gpt4 book ai didi

c# - 尝试使用错误的 key 解密时 AesCryptoServiceProvider 的行为

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:57 35 4
gpt4 key购买 nike

我正在使用 AesCryptoServiceProviderCryptoStream 来加密一些数据,当我使用相同的 key 进行解密时,它似乎工作正常。但是,如果我尝试用错误的 key 解密它,我不会得到异常,只是垃圾数据。我在 .Net 文档中找不到任何说明应该发生什么的内容,但根据这个:

http://books.google.co.uk/books?id=_Y0rWd-Q2xkC&pg=PA631

还有这个:

Why does a bad password cause "Padding is invalid and cannot be removed"?

我应该得到一个 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();
}
}
}

最佳答案

依靠填充错误不是确定 key 是否正确的好方法。你真的应该考虑使用 Authenticated Encryption为此目的。

我有一个在 C# 中为这个 Modern Examples of Symmetric Authenticated Encryption of a string. 工作的公共(public)域 snip-it我努力保持更新和审查。

附言此外,尚不清楚您的盐是针对每个域、每个用户还是样本中的每个密文,但如果它不是代码中的每个密文,则 IV 将是可预测的并且对于许多密文都是相同的,这对 AES-CBC 不利。实现加密很难。

我还研究过一个高级加密库,一个 C# port of Google Keyczar .但这对你来说可能不太适用,它只支持随机生成 key 和 key 集,然后可以对这些 key 集进行密码加密,但仅限于 key 集。高级加密框架是加密的最佳实践。

关于c# - 尝试使用错误的 key 解密时 AesCryptoServiceProvider 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14646403/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com