/// <summary>
/// Aes加密和解密
/// </summary>
public static partial class AesHelper
{
//生成字节数组
private static readonly byte [] salt = Encoding.Unicode.GetBytes("7BANANAS");
//迭代次数 应最少设置1000
private static readonly int iterations = 2000;
/// <summary>
/// 加密
/// </summary>
/// <param name="plainText">加密文本</param>
/// <param name="password">密钥</param>
/// <returns>返回加密后的字节字符串</returns>
public static string Encrypt(string plainText,string password){
byte [] encryptedBytes;
byte [] plainBytes = Encoding.Unicode.GetBytes(plainText);
var aes = Aes.Create();
var pbkdf2 = new Rfc2898DeriveBytes(password,salt,iterations); //使用密码 字节数组 和 迭代次数 生成密钥
aes.Key = pbkdf2.GetBytes(32);
aes.IV = pbkdf2.GetBytes(16);
using (var ms = new MemoryStream()){
using(var cs = new CryptoStream(ms,aes.CreateEncryptor(),CryptoStreamMode.Write)){
cs.Write(plainBytes,0,plainBytes.Length);
}
encryptedBytes = ms.ToArray();
}
return Convert.ToBase64String(encryptedBytes);
}
/// <summary>
/// 解密
/// </summary>
/// <param name="crytoText">字节文本</param>
/// <param name="password">密钥</param>
/// <returns>将字节文本解密为字符串返回</returns>
public static string Decrypt(string crytoText,string password){
byte [] plainBytes;
byte [] cryptoBytes = Convert.FromBase64String(crytoText);
var aes = Aes.Create();
var pbkdf2 = new Rfc2898DeriveBytes(password,salt,iterations);
aes.Key = pbkdf2.GetBytes(32);
aes.IV = pbkdf2.GetBytes(16);
using(var ms = new MemoryStream()){
using (var cs = new CryptoStream(ms,aes.CreateDecryptor(),CryptoStreamMode.Write)){
cs.Write(cryptoBytes,0,cryptoBytes.Length);
}
plainBytes = ms.ToArray();
}
return Encoding.Unicode.GetString(plainBytes);
}
}
C# AES加密解密
最新推荐文章于 2024-04-09 10:01:12 发布