对称加密解密通用类库函数

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

namespace Common
{
 /// <summary>
 /// 加密解密通用类库函数
 ///Copyright (C), 2004, kwklover(邝伟科)
 ///File name:Crypto.cs
 ///Author:邝伟科     Version:1.0        Date:2004年4月21日
 ///Description:可逆的通用对称加密解密函数集                         
 /// </summary>
 public class Crypto
 {
  private string _CryptText;  //待加密和解密的字符序列变量
  private byte[] _CryptKey;   //加密解密私钥变量
  private byte[] _CryptIV;    //加密解密初始化向量IV变量

  /// <summary>
  /// 待加密或解密的字符序列
  /// </summary>
  public string CryptText
  {
   set
   {
       _CryptText=value;
   }
   get
   {
      return _CryptText;
   }
  }

  /// <summary>
  /// 加密私钥
  /// </summary>
  public byte[] CryptKey
  {
   set
   {
       _CryptKey=value;
   }
   get
   {
       return _CryptKey;
   }
  }

  /// <summary>
  /// 加密的初始化向量IV
  /// </summary>
  public byte[] CryptIV
  {
   set
   {
       _CryptIV=value;
   }
   get
   {
       return _CryptIV;
   }
  }

  public Crypto()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }

  /// <summary>
  /// 加密函数,用于对字符串进行加密。需要提供相应的密钥和IV。
  /// </summary>
  /// <returns></returns>
  public string Encrypt()
  {
   string strEnText=CryptText;
   byte[] EnKey=CryptKey;
   byte[] EnIV=CryptIV;

   byte[] inputByteArray=System.Text.Encoding.UTF8.GetBytes(strEnText);

   //此处也可以创建其他的解密类实例,但注意不同(长度)的加密类要求不同的密钥Key和初始化向量IV
   RijndaelManaged RMCrypto = new RijndaelManaged();

   MemoryStream ms=new MemoryStream();
   CryptoStream cs=new CryptoStream(ms,RMCrypto.CreateEncryptor(EnKey,EnIV),CryptoStreamMode.Write);
   cs.Write(inputByteArray,0,inputByteArray.Length);
   cs.FlushFinalBlock();

   return Convert.ToBase64String(ms.ToArray());
  }

  /// <summary>
  /// 解密函数,用于经过加密的字符序列进行加密。需要提供相应的密钥和IV。
  /// </summary>
  /// <returns></returns>
  public string Decrypt()
  {
   string strDeText=CryptText;
   byte[] DeKey=CryptKey;
   byte[] DeIV=CryptIV;

      byte[] inputByteArray=Convert.FromBase64String(strDeText);

   //此处也可以创建其他的解密类实例,但注意不同的加密类要求不同(长度)的密钥Key和初始化向量IV
   RijndaelManaged RMCrypto = new RijndaelManaged();

   MemoryStream ms=new MemoryStream();
   CryptoStream cs=new CryptoStream(ms,RMCrypto.CreateDecryptor(DeKey,DeIV),CryptoStreamMode.Write);
   cs.Write(inputByteArray,0,inputByteArray.Length);
   cs.FlushFinalBlock();

   return System.Text.Encoding.UTF8.GetString(ms.ToArray());
  }
 }
}

下面使用上面类代码加密解密的一些部分数据,我本人无法对这些数据进行归纳为有价值的表达,望各位不吝赐教:

加密前英文字母,数字长度范围 加密前中文字符长度范围 加密后长度大小
0-15 0-5 24
16-31 6-10 44
32-47 11-15 64
48-63 16-20 88
64-79 21-15 108
80-95 16-30 128
96-111 31-35 152

posted @ 2004-06-22 14:42  kwklover  阅读(5443)  评论(8编辑  收藏  举报