平常都用MD5,但是这个MD5解密不了,现在用AES代替,代码如下
加密方法
/// <summary>
/// AES加密
/// </summary>
/// <param name="plaintext">加密的文本</param>
/// <param name="key">加密Key</param>
/// <param name="iv">加密IV</param>
/// <returns></returns>
public static byte[] Encrypt(string plaintext, byte[] key, byte[] iv)
{
using (var aes = Aes.Create())
{
aes.Key = key;
aes.IV = iv;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
using (var encryptor = aes.CreateEncryptor(aes.Key, aes.IV))
using (var ms = new MemoryStream())
using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
byte[] plaintextBytes = Encoding.UTF8.GetBytes(plaintext);
cs.Write(plaintextBytes, 0, plaintextBytes.Length);
cs.FlushFinalBlock();
return ms.ToArray();
}
}
}
解密方法
/// <summary>
/// AES解密
/// </summary>
/// <param name="ciphertext">加密后的数据</param>
/// <param name="key">加密的Key</param>
/// <param name="iv">加密的IV</param>
/// <returns></returns>
public static string Decrypt(byte[] ciphertext, byte[] key, byte[] iv)
{
using (var aes = Aes.Create())
{
aes.Key = key;
aes.IV = iv;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
using (var decryptor = aes.CreateDecryptor(aes.Key, aes.IV))
using (var ms = new MemoryStream(ciphertext))
using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
using (var reader = new StreamReader(cs, Encoding.UTF8))
{
return reader.ReadToEnd(); // 读取解密后数据
}
}
}
加密方法使用
把要加密的数据key和iv传入
string jmtext = "我是被加密的数据";
byte[] key = Encoding.UTF8.GetBytes("1231231231111111"); // AES 密钥,长度必须是 16 字节(128 位)
byte[] iv = Encoding.UTF8.GetBytes("1511151515111511"); // AES 初始化向量(IV),长度必须是 16 字节
if (key.Length != 16 || key.Length != 24 || key.Length != 32)
{
Console.WriteLine("Key 长度错误,必须是 16, 24, 32 字节");
return;
}
if (iv.Length != 16)
{
Console.WriteLine("IV 长度错误,必须是 16 字节");
return;
}
byte[] encrypted = AES.Encrypt(jmtext, key, iv);//加密的数据
解密方法使用
就是把加密的数据key和iv传入即可,加密的key和iv必须和解密的key和iv一样
byte[] key = Encoding.UTF8.GetBytes("1231231231111111"); // AES 密钥,长度必须是 16 字节(128 位)
byte[] iv = Encoding.UTF8.GetBytes("1511151515111511"); // AES 初始化向量(IV),长度必须是 16 字节
byte[] encrypted = AES.Encrypt(jmtext, key, iv);//加密的数据
string text = AES.Decrypt(encrypted, key, iv);//解密出来的数据,就是("我是被加密的数据")
注意事项!!!
key必须为16,24,32字节,iv必须16字节,字节是啥可以自己去搜搜
例子:
字母 1字节
数字 1字节
中文 3字节
还是用数字和英语混搭好点,中文就别用了哈