在C#中,AES(高级加密标准)是一种常用的对称加密算法。使用AES进行加密和解密可以有效地保护数据安全。C#提供了 System.Security.Cryptography
命名空间来进行加密和解密操作
AES为对称加密,加密和解密使用同一密钥,因此需要安全地共享密钥;支持的密钥长度通常为128位、192位或256位。
1.加密
public byte[] Encrypt(byte[] key, byte[] plainData, int offset, int count)
{
// CBC模式需要设置初始化向量IV,ECB模式则不需要设置(等价于设置为全零向量)
// 这里设置为ECB模式
using var aes1 = Aes.Create();
aes1.Mode = CipherMode.ECB;
aes1.Padding = PaddingMode.Zeros;
aes1.Key = key;
using var encryptor = aes1.CreateEncryptor();
using var ms = new MemoryStream();
using var writer = new CryptoStream(ms, encryptor, CryptoStreamMode.Write);
writer.Write(plainData, offset, count);
writer.FlushFinalBlock();
return ms.ToArray();
}
2.解密
public byte[] Decrypt(byte[] key, byte[] cipherText)
{
// CBC模式需要设置初始化向量IV,ECB模式则不需要设置(等价于设置为全零向量)
// 这里设置为ECB模式
using var aes = Aes.Create();
aes.Mode = CipherMode.ECB;
aes.Padding = PaddingMode.Zeros;
aes.Key = key;
using var decryptor = aes.CreateDecryptor();
using var msDecrypt = new MemoryStream(cipherText);
using var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
var plain = new List<byte>(cipherText.Length);
var b = csDecrypt.ReadByte();
while (b != -1)
{
plain.Add((byte) b);
b = csDecrypt.ReadByte();
}
return plain.ToArray();
}
如果需要的是字符串,则按需转换即可。