在最近的一个.net项目中,用户希望加密保存到数据库中的信息。参考MSDN,写出了下面这个类!现在拿出来和大家分享!
using System;
using System.Text;
using System.Security.Cryptography;
namespace Util
{
public class EncryptUtil
{
private static string defaultKeyStr = "JERRYHAN581321";
/// <summary>
/// 构造方法
/// </summary>
private EncryptUtil(){}
/// <summary>
/// 使用缺省密钥字符串加密
/// </summary>
/// <param name="originalStr">明文</param>
/// <returns>密文</returns>
public static string Encrypt(string originalStr)
{
return Encrypt(originalStr, defaultKeyStr);
}
/// <summary>
/// 使用缺省密钥解密
/// </summary>
/// <param name="originalStr">密文</param>
/// <returns>明文</returns>
public static string Decrypt(string originalStr)
{
return Decrypt(originalStr, defaultKeyStr, Encoding.Default);
}
/// <summary>
/// 使用给定密钥加密
/// </summary>
/// <param name="originalStr">原始文字</param>
/// <param name="keyStr">密钥</param>
/// <param name="encoding">字符编码方案</param>
/// <returns>密文</returns>
public static string Encrypt(string originalStr, string keyStr)
{
byte[] buffBytes = Encoding.Default.GetBytes(originalStr);
byte[] keyBytes = Encoding.Default.GetBytes(keyStr);
return Convert.ToBase64String(Encrypt(buffBytes,keyBytes));
}
/// <summary>
/// 使用给定密钥解密
/// </summary>
/// <param name="originalStr">密文</param>
/// <param name="keyStr">密钥</param>
/// <returns>明文</returns>
public static string Decrypt(string originalStr, string keyStr)
{
return Decrypt(originalStr, keyStr, Encoding.Default);
}
/// <summary>
/// 使用给定密钥解密
/// </summary>
/// <param name="encrypted">密文</param>
/// <param name="keyStr">密钥</param>
/// <param name="encoding">字符编码方案</param>
/// <returns>明文</returns>
private static string Decrypt(string encrypted, string keyStr, Encoding encoding)
{
byte[] buffBytes = Convert.FromBase64String(encrypted);
byte[] keyBytes = Encoding.Default.GetBytes(keyStr);
return encoding.GetString(Decrypt(buffBytes, keyBytes));
}
/// <summary>
/// 生成MD摘要
/// </summary>
/// <param name="originalStr">数据源</param>
/// <returns>摘要</returns>
public static byte[] MakeMD(byte[] originalStr)
{
MD5CryptoServiceProvider hashmd = new MD5CryptoServiceProvider();
byte[] keyhash = hashmd.ComputeHash(originalStr);
hashmd = null;
return keyhash;
}
/// <summary>
/// 使用给定密钥加密
/// </summary>
/// <param name="originalStr">明文</param>
/// <param name="keyStr">密钥</param>
/// <returns>密文</returns>
public static byte[] Encrypt(byte[] originalStr, byte[] keyStr)
{
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Key = MakeMD(keyStr);
des.Mode = CipherMode.ECB;
return des.CreateEncryptor().TransformFinalBlock(originalStr, 0, originalStr.Length);
}
/// <summary>
/// 使用给定密钥解密数据
/// </summary>
/// <param name="encrypted">密文</param>
/// <param name="keyStr">密钥</param>
/// <returns>明文</returns>
public static byte[] Decrypt(byte[] encrypted, byte[] keyStr)
{
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Key = MakeMD(keyStr);
des.Mode = CipherMode.ECB;
return des.CreateDecryptor().TransformFinalBlock(encrypted, 0, encrypted.Length);
}
/// <summary>
/// 使用给定密钥加密
/// </summary>
/// <param name="originalStr">原始数据</param>
/// <param name="keyStr">密钥</param>
/// <returns>密文</returns>
public static byte[] Encrypt(byte[] originalStr)
{
byte[] keyStr = Encoding.Default.GetBytes(defaultKeyStr);
return Encrypt(originalStr,keyStr);
}
/// <summary>
/// 使用缺省密钥解密数据
/// </summary>
/// <param name="encrypted">密文</param>
/// <param name="keyStr">密钥</param>
/// <returns>明文</returns>
public static byte[] Decrypt(byte[] encrypted)
{
byte[] keyStr = Encoding.Default.GetBytes(defaultKeyStr);
return Decrypt(encrypted,keyStr);
}
}
}