PDBSample.cs

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace APress.DotNetSecurity.Chapter2.PDBSample
{
 class PDBSampleTester
 {
  static void Main(string[] args)
  {
   try
   {
    Console.WriteLine("Creating the salt...");
    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
    byte[] rngData = new byte[8];
    rng.GetBytes(rngData);
    Console.WriteLine("Salt value is " + ArrayToHexString(rngData));

    PasswordDeriveBytes pwdDerive = new PasswordDeriveBytes("SuperSecretPassword",
     rngData);

    Console.WriteLine("Creating the IV...");
    byte[] ivData = new byte[8];
    rng.GetBytes(ivData);
    Console.WriteLine("IV value is " + ArrayToHexString(ivData));

    Console.WriteLine("Deriving the RC2 key...");
    RC2CryptoServiceProvider rc2 = new RC2CryptoServiceProvider();
    byte[] RC2Key =
     pwdDerive.CryptDeriveKey("RC2", "SHA", 128, ivData);

    rc2.Key = RC2Key;
    Console.WriteLine("Key value is " + ArrayToHexString(rc2.Key));
   }
   catch(CryptographicUnexpectedOperationException cuoe)
   {
    Console.WriteLine("CryptographicUnexpectedOperationException:  "
     + cuoe.Message);
    Console.WriteLine(cuoe.StackTrace);
   }
   catch(CryptographicException ce)
   {
    Console.WriteLine("CryptographicException:  " + ce.Message);
    Console.WriteLine(ce.StackTrace);
   }
   catch(Exception ge)
   {
    Console.WriteLine("Exception:  " + ge.GetType().Name + " " + ge.Message);
    Console.WriteLine(ge.StackTrace);
   }
   finally
   {
    Console.WriteLine("Press the return key to continue...");
    Console.Read();
   }
  }
  private static String ArrayToHexString(byte[] ByteData)
  {
   StringBuilder retVal = new StringBuilder();
   
   foreach(byte b in ByteData)
   {
    retVal.Append(b.ToString("X2"));
    retVal.Append(" ");
   }
   retVal.Remove(retVal.Length - 1, 1);

   return retVal.ToString();
  } 
 }
}

原文地址:https://www.cnblogs.com/dushu/p/2511961.html