program.cs

来自「C#高级编程第6版随书源代码 值得下载」· CS 代码 · 共 54 行

CS
54
字号
using System;
using System.Security.Cryptography;
using System.Text;

namespace Wrox.ProCSharp.Security
{
   class Program
   {
      internal static CngKey aliceKeySignature;
      internal static byte[] alicePubKeyBlob;

      static void Main()
      {
         CreateKeys();

         byte[] aliceData = Encoding.UTF8.GetBytes("Alice");
         byte[] aliceSignature = CreateSignature(aliceData, aliceKeySignature);
         Console.WriteLine("Alice created signature: {0}", Convert.ToBase64String(aliceSignature));

         if (VerifySignature(aliceData, aliceSignature, alicePubKeyBlob))
         {
            Console.WriteLine("Alice signature verified successfully");
         }
      }

      static void CreateKeys()
      {
         aliceKeySignature = CngKey.Create(CngAlgorithm.ECDsaP256);
         alicePubKeyBlob = aliceKeySignature.Export(CngKeyBlobFormat.GenericPublicBlob);       
      }

      static bool VerifySignature(byte[] data, byte[] signature, byte[] pubKey)
      {
         bool retValue = false;
         using (CngKey key = CngKey.Import(pubKey, CngKeyBlobFormat.GenericPublicBlob))
         {
            ECDsaCng signingAlg = new ECDsaCng(key);
            retValue = signingAlg.VerifyData(data, signature);
            signingAlg.Clear();
         }      
         return retValue;
      }

      static byte[] CreateSignature(byte[] data, CngKey key)
      {
         ECDsaCng signingAlg = new ECDsaCng(key);
         byte[] signature = signingAlg.SignData(data);
         signingAlg.Clear();

         return signature;
      }
   }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?