您的位置:首页 > 编程语言 > ASP

asp.net总结之加密解密

2012-09-06 17:58 344 查看
加密和解密常用于保护敏感的数据,比如url中的查询参数,防止被人手动修改等等。。。

/// <summary>
/// md5加密(密文128位,一般不可逆)
/// </summary>
/// <param name="data">要加密的字符串</param>
/// <returns></returns>
public string Md5CryptData(string data)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] dataByte = Encoding.UTF8.GetBytes(data);

byte[] md5Data = md5.ComputeHash(dataByte);

StringBuilder sb=new StringBuilder();

foreach (var b in md5Data)
{
//0xA转换为0x0A
sb.Append(b.ToString("x2"));
}

return sb.ToString();
}


/// <summary>
/// DES加密(密文64位,密钥64位,IV向量64位)
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public string DesEnCryptData(string data)
{
const string key = "a1b2c3d4";
const string iv = "a1b2c3d4";
byte[] keyByte = Encoding.UTF8.GetBytes(key);
byte[] ivByte = Encoding.UTF8.GetBytes(iv);

DESCryptoServiceProvider desEncrypt = new DESCryptoServiceProvider();

MemoryStream memoryStream=new MemoryStream();

CryptoStream cryptoStream = new CryptoStream(memoryStream, desEncrypt.CreateEncryptor(keyByte, ivByte),
CryptoStreamMode.Write);

byte[] dataByte = Encoding.UTF8.GetBytes(data);

cryptoStream.Write(dataByte, 0, dataByte.Length);

cryptoStream.FlushFinalBlock();

byte[] tmp = memoryStream.ToArray();

return Convert.ToBase64String(tmp);
;
}

/// <summary>
/// DES解密
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public string DesDeCryptData(string data)
{

byte[] dataByte = Convert.FromBase64String(data);

MemoryStream memoryStream = new MemoryStream(dataByte);

const string key = "a1b2c3d4";
const string iv = "a1b2c3d4";
byte[] keyByte = Encoding.UTF8.GetBytes(key);
byte[] ivByte = Encoding.UTF8.GetBytes(iv);

DESCryptoServiceProvider desEncrypt = new DESCryptoServiceProvider();

CryptoStream cryptoStream = new CryptoStream(memoryStream, desEncrypt.CreateDecryptor(keyByte, ivByte),
CryptoStreamMode.Read);
byte[] tmp = new byte[dataByte.Length];

cryptoStream.Read(tmp, 0, tmp.Length);

return Encoding.UTF8.GetString(tmp);
}


/// <summary>
/// Rijndael加密(密文128位,最长196位,IV向量16位,密钥16、24、32位)
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public string EncryptData(string data)
{
string key = "12345678123456781234567812345678";
string iv = "1234567812345678";
byte[] keyByte = Encoding.UTF8.GetBytes(key);
byte[] ivByte = Encoding.UTF8.GetBytes(iv);

Rijndael rijndael = Rijndael.Create();

MemoryStream mStream=new MemoryStream();

CryptoStream cryptoStream = new CryptoStream(mStream, rijndael.CreateEncryptor(keyByte, ivByte),
CryptoStreamMode.Write);
byte[] dataByte = Encoding.UTF8.GetBytes(data);

cryptoStream.Write(dataByte,0,dataByte.Length);

cryptoStream.FlushFinalBlock();

byte[] tmp = mStream.ToArray();

return Convert.ToBase64String(tmp);
}

/// <summary>
/// Rijndael解密
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public string DecryptData(string data)
{
byte[] dataByte = Convert.FromBase64String(data);
string key = "12345678123456781234567812345678";
string iv = "1234567812345678";
byte[] keyByte = Encoding.UTF8.GetBytes(key);
byte[] ivByte = Encoding.UTF8.GetBytes(iv);

MemoryStream memoryStream=new MemoryStream(dataByte);

Rijndael rijndael = Rijndael.Create();

CryptoStream cryptoStream = new CryptoStream(memoryStream, rijndael.CreateDecryptor(keyByte, ivByte),
CryptoStreamMode.Read);
byte[] tmp=new byte[dataByte.Length];

cryptoStream.Read(tmp,0,tmp.Length);

return Encoding.UTF8.GetString(tmp);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: