AsymmetricAlgorithmEncryptor.cs

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

namespace APress.DotNetSecurity.Chapter2.AsymmetricAlgorithmEncryptor
{
 class AsymmetricAlgorithmEncryptorTester
 {
  static void Main(string[] args)
  {
   try
   {
    String adPath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
    Console.WriteLine("Creating the random data file information...");
    RandomNumberGenerator rng = new RNGCryptoServiceProvider();
    byte[] randomBytes = new byte[1000];
    rng.GetNonZeroBytes(randomBytes);

    FileStream fCreate = new FileStream(adPath + @"\randomData.dat",
     FileMode.Create, FileAccess.Write);

    Console.WriteLine("Writing the random data to the file " +
     adPath + @"\randomData.dat...");
    fCreate.Write(randomBytes, 0, (int)randomBytes.Length);
    fCreate.Close();

    FileStream fin = new FileStream(adPath + @"\randomData.dat",
     FileMode.Open, FileAccess.Read);
    FileStream fdec = new FileStream(adPath + @"\randomDataOut.dat",
     FileMode.OpenOrCreate, FileAccess.Write);

    //  Read in the file data.
    RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)RSA.Create();
    int len = 0, readBytes = 0, dataSize = 0;
    
    if(1024 == rsa.KeySize)
    {
     dataSize = 16;
    }
    else
    {
     dataSize = 5;
    }

    Console.WriteLine("Data length is " + dataSize.ToString());

    byte[] finData = new byte[dataSize], rsaEncrypt = null,
     rsaDecrypt = null;

    Console.WriteLine("Encrypting the data and decrypting the data to " +
     adPath + @"\randomDataOut.dat...");

    while(readBytes < fin.Length)
    {
     len = fin.Read(finData, 0, dataSize);
     readBytes += len;
     //  Encrypt the data.
     rsaEncrypt = rsa.Encrypt(finData, false);
     //  Decrypt the data.
     rsaDecrypt = rsa.Decrypt(rsaEncrypt, false);
     fdec.Write(rsaDecrypt, 0, (int)rsaDecrypt.Length);
    }
    fdec.Close();
   }
   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);
    retVal.Append(" ");
   }
   retVal.Remove(retVal.Length - 1, 1);

   return retVal.ToString();
  } 
 }
}

 

转载于:https://www.cnblogs.com/dushu/archive/2012/05/21/2511215.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值