我正在使用AesCryptoServiceProvider
和CryptoStream
加密一些数据,当我使用相同的密钥进行解密时,它似乎工作正常。但是,如果我尝试用错误的密钥解密它,我不会得到异常,只是垃圾数据。我在 .Net 文档中找不到任何说明应该发生的事情,但据此:
http://books.google.co.uk/books?id=_Y0rWd-Q2xkC&pg=PA631
和这个:
我应该得到一个 CryptographicException。我做错了吗?我的功能是这样的:
public static byte[] Encrypt(byte[] data, string password, string salt, bool decrypt)
{
SymmetricAlgorithm aes = new AesCryptoServiceProvider();
Rfc2898DeriveBytes rfc2898 = new Rfc2898DeriveBytes(password, Encoding.UTF8.GetBytes(salt));
aes.IV = rfc2898.GetBytes(aes.BlockSize / 8);
aes.Key = rfc2898.GetBytes(256 / 8);
ICryptoTransform enc;
if (decrypt) {
enc = aes.CreateDecryptor();
} else {
enc = aes.CreateEncryptor();
}
using (enc) {
using (MemoryStream ms = new MemoryStream()) {
using (CryptoStream cs = new CryptoStream(ms, enc, CryptoStreamMode.Write)) {
cs.Write(data, 0, data.Length);
return ms.ToArray();
}
}
}