我必须使用 AES 在 C# 中加密/解密数据。问题:密钥长度必须是128、192或256位。我希望用户可以输入长度为 6-256 个字符的任意密码。我读到这可以通过使用“填充”来实现,我将如何在我的代码中实现它:
public static byte[] EncryptStringToBytes(string plainText, byte[] key)
{
byte[] cipherText;
using var aes = new AesCryptoServiceProvider();
aes.Key = key;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
aes.GenerateIV();
using (MemoryStream msEncrypt = new MemoryStream())
{
msEncrypt.Write(aes.IV, 0, aes.IV.Length);
ICryptoTransform encoder = aes.CreateEncryptor();
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encoder, CryptoStreamMode.Write))
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(plainText);
}
cipherText = msEncrypt.ToArray();
}
return cipherText;
}```
我终于从以下问题中找到了一个我认为对安全性和可理解性都有好处的可行解决方案:在 C# 中加密和解密字符串?