/// <summary>
/// 帮助类
/// </summary>
public class CryptoHelper
{
//// 对称加密算法提供器
/// <summary>
/// 加密器对象
/// </summary>
private readonly ICryptoTransform encryptor;
/// <summary>
/// 解密器对象
/// </summary>
private readonly ICryptoTransform decryptor;
/// <summary>
/// 缓存
/// </summary>
private const int BufferSize = 1024;
/// <summary>
/// Initializes a new instance of the <see cref="CryptoHelper"/> class.
/// </summary>
/// <param name="algorithmName">
/// algorithmName
/// </param>
/// <param name="key">
/// 密钥
/// </param>
public CryptoHelper(string algorithmName, string key)
{
SymmetricAlgorithm _provider = SymmetricAlgorithm.Create(algorithmName);
_provider.Key = Encoding.UTF8.GetBytes(key);
_provider.IV = new byte[] { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
encryptor = _provider.CreateEncryptor();
decryptor = _provider.CreateDecryptor();
}
/// <summary>
/// Initializes a new instance of the <see cref="CryptoHelper"/> class.
/// </summary>
/// <param name="key">
/// 密钥
/// </param>
public CryptoHelper(string key) : this("TripleDES", key) { }
/// <summary>
/// 加密算法
/// </summary>
/// <param name="clearText">
/// The clear text.
/// </param>
/// <returns>
/// 密文
/// </returns>
public string Encrypt(string clearText)
{
//// 创建明文流
byte[] _clearBuffer = Encoding.UTF8.GetBytes(clearText);
var _clearStream = new MemoryStream(_clearBuffer);
//// 创建空的密文流
var _encryptedStream = new MemoryStream();
var _cryptoStream = new CryptoStream(_encryptedStream, encryptor, CryptoStreamMode.Write);
//// 将明文流写入到buffer中
//// 将buffer中的数据写入到cryptoStream中
int _bytesRead;
var _buffer = new byte[BufferSize];
do
{
_bytesRead = _clearStream.Read(_buffer, 0, BufferSize);
_cryptoStream.Write(_buffer, 0, _bytesRead);
}
while (_bytesRead > 0);
_cryptoStream.FlushFinalBlock();
//// 获取加密后的文本
_buffer = _encryptedStream.ToArray();
string _encryptedText = Convert.ToBase64String(_buffer);
return _encryptedText;
}
/// <summary>
/// 解密算法
/// </summary>
/// <param name="encryptedText">
/// The encrypted text.
/// </param>
/// <returns>
/// 解密字符串
/// </returns>
public string Decrypt(string encryptedText)
{
byte[] _encryptedBuffer = Convert.FromBase64String(encryptedText);
Stream _encryptedStream = new MemoryStream(_encryptedBuffer);
var _clearStream = new MemoryStream();
var _cryptoStream = new CryptoStream(_encryptedStream, decryptor, CryptoStreamMode.Read);
int _bytesRead;
var _buffer = new byte[BufferSize];
do
{
_bytesRead = _cryptoStream.Read(_buffer, 0, BufferSize);
_clearStream.Write(_buffer, 0, _bytesRead);
}
while (_bytesRead > 0);
_buffer = _clearStream.GetBuffer();
string _clearText = Encoding.UTF8.GetString(_buffer, 0, (int) _clearStream.Length);
return _clearText;
}
/// <summary>
/// 加密
/// </summary>
/// <param name="clearText">
/// 连接字符串
/// </param>
/// <param name="key">
/// 密钥
/// </param>
/// <returns>
/// 加密后的字符串
/// </returns>
public static string Encrypt(string clearText, string key)
{
var _helper = new CryptoHelper(key);
return _helper.Encrypt(clearText);
}
/// <summary>
/// 解密
/// </summary>
/// <param name="encryptedText">
/// 连接字符串
/// </param>
/// <param name="key">
/// 密钥
/// </param>
/// <returns>
/// 解密后的字符串
/// </returns>
public static string Decrypt(string encryptedText, string key)
{
var _helper = new CryptoHelper(key);
return _helper.Decrypt(encryptedText);
}
}