常用加密方法有 对称加密和非对称加密。对称加密常用的有 DES 和 AES。DES 可被破解。这里介绍 c# 的 AES 加密方式。
// AES 的 key 支持 128 位,最大支持 256 位。256 位需要 32 个字节。
// 所以这里使用密钥的前 32 字节作为 key ,不足 32 补 0。
public static byte[] GetKey(string pwd)
{
while (pwd.Length < 32)
{
pwd += '0';
}
pwd = pwd.Substring(0, 32);
return Encoding.UTF8.GetBytes(pwd);
}
// AES 加密的初始化向量,加密解密需设置相同的值。
// 这里设置为 16 个 0。
public static byte[] AES_IV = Encoding.UTF8.GetBytes("0000000000000000");
public static string Encrypt(string pwd, object data)
{
var converter = new JavaScriptSerializer();
var str = converter.Serialize(data);
return Encrypt(pwd, str);
}
// 加密
public static string Encrypt(string pwd, string data)
{
using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
{
aesAlg.Key = GetKey(pwd);
aesAlg.IV = AES_IV;
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(data);
}
byte[] bytes = msEncrypt.ToArray();
return Convert.ToBase64String(bytes);
}
}
}
}
// 解密
public static string Decrypt(string pwd, string data)
{
byte[] inputBytes = Convert.FromBase64String(data);
using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
{
aesAlg.Key = GetKey(pwd);
aesAlg.IV = AES_IV;
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream(inputBytes))
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srEncrypt = new StreamReader(csEncrypt))
{
return srEncrypt.ReadToEnd();
}
}
}
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。