在使用AesManaged解密之前验证密钥/ IV?或者在发生CryptographicException之前避免它?

时间:2012-03-30 18:33:04

标签: .net exception encryption aes

我根据此example编写了一对AES加密/解密函数。

它很好用,直到我将错误的密钥或IV传递给我的解密函数,此时我得到“填充无效且无法删除”。其他人讨论过的CryptographicException。

我的问题是:在异常发生之前是否有某种方法来验证密钥/ IV?也许是某种校验和?或者只是抓住那个例外的答案?

2 个答案:

答案 0 :(得分:1)

答案只是抓住异常是的。 IV通常与加密消息一起发送,因此单独验证它是没有意义的。至于密钥,检查密钥值的常规方法是使用KCV(密钥检查值):

在这里查看关于我的问题的雨披的asnwer:

https://crypto.stackexchange.com/questions/1930/sending-kcv-key-check-value-with-cipher-text

基本上,它似乎不值得。你的milage可能会有所不同。另一方面,在加密消息中添加某种身份验证确实很有意义,但如果数据损坏或被篡改,或者您的密钥错误,它仍然无法显示...

答案 1 :(得分:0)

加密数据唯一可能无效的是它可能有一个错误的长度(只是通过鸽子原理)。一些填充方案要求数据的大小是块大小的倍数。其他填充方案没有这样的限制。