对称加密解密通用类库函数
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 |