using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace Encryption
{
/// <summary>
/// 完成字符串的散列生成,以及3DES加密解密码
/// </summary>
public class EncryptTransformer
{
private string mIV;
private string mKey;
private byte[] bIV;
private byte[] bKey;
private TripleDES tDes ;
/// <summary>
/// 解密3DES加密字符串时的构造函数
/// </summary>
/// <param name="key"></param>
/// <param name="iv"></param>
public EncryptTransformer(string key, string iv)
{
Key = key;
IV = iv;
InitEncryptTransformer();
}
/// <summary>
/// 加密数据时用的构造函数
/// 系统自动生成Key,与IV的Base64字符串
/// 请妥协保存
/// </summary>
public EncryptTransformer()
{
InitEncryptTransformer();
}
/// <summary>
/// 用3DES加密字符串,结果已Base64编码返回
/// </summary>
/// <param name="inStr">需要加密的字符串</param>
/// <returns>Base64编码的加密字符串</returns>
public string EncryptString(string inStr)
{
byte[] bytes = Encoding.UTF8.GetBytes(inStr);
ICryptoTransform enTransform= tDes.CreateEncryptor(bKey, bIV);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, enTransform, CryptoStreamMode.Write);
cs.Write(bytes, 0, bytes.Length);
cs.FlushFinalBlock();
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
/// <summary>
/// 解密编码为Base64的加密字符串
/// </summary>
/// <param name="inStr">Base64编码的加密字符串</param>
/// <returns>原字符串数据</returns>
public string DecryptString(string inStr)
{
byte[] bytes = Convert.FromBase64String(inStr);
ICryptoTransform deTransfrom = tDes.CreateDecryptor(bKey, bIV);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms,deTransfrom,CryptoStreamMode.Write);
cs.Write(bytes, 0, bytes.Length);
cs.FlushFinalBlock();
cs.Close();
return Encoding.UTF8.GetString(ms.ToArray());
}
private void InitEncryptTransformer()
{
tDes= new TripleDESCryptoServiceProvider();
if (Key == null || IV==null)
{
tDes.GenerateIV();
bIV = tDes.IV;
tDes.GenerateKey();
bKey = tDes.Key;
Key = Convert.ToBase64String(bKey);
IV = Convert.ToBase64String(bIV);
}
else
{
bIV = Convert.FromBase64String(IV);
bKey = Convert.FromBase64String(Key);
}
}
/// <summary>
/// 将字符串数据以MD5加密后编码成Base64
/// </summary>
/// <param name="inStr"></param>
/// <returns></returns>
public static string MD5(string inStr)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] bytes = Encoding.UTF8.GetBytes(inStr);
byte[] enBytes = md5.ComputeHash(bytes);
return Convert.ToBase64String(enBytes);
}
/// <summary>
/// Base64编码的向量字符串
/// </summary>
public string IV
{
get
{
return mIV;
}
set
{
mIV = value;
bIV = Convert.FromBase64String(value);
}
}
/// <summary>
/// Base64编码的密码
/// </summary>
public string Key
{
get
{
return mKey;
}
set
{
mKey = value;
bKey = Convert.FromBase64String(value);
}
}
}
}