AES CBC算法如何检查密码钥匙是否正确?

时间:2018-10-16 13:10:21

标签: java encryption aes

我正在使用this class通过AES / CBC算法对文件或字节数组进行加密。

但是,我不了解如何在Java中实现此算法以检查密码转换密钥是否正确。输入错误的密码时,将引发javax.crypto.BadPaddingException。这是错误消息:

  

给出的最终块未正确填充。如果在解密过程中使用了错误的密钥,则会出现此类问题。

此算法是否将密钥存储在加密文档中?什么是初始化向量?Java如何继续检查给定的密码转换密钥是否为真?在解密过程中到底会发生什么?

1 个答案:

答案 0 :(得分:1)

该代码指定您使用PKCS5填充(带有CIPHER_SPEC = "AES/CBC/PKCS5Padding")。这意味着在加密之前,在清除数据的末尾将填充1-16个字节。这种填充可确保数据在加密之前与AES的块大小(16字节)对齐。填充的构造方式很容易检测到它是填充(填充的字节数就是填充的字节数。例如,如果需要5个字节,则填充为05 05 05 05 05)。

如果使用错误的密钥解密,最终将得到随机数据,那么大多数情况下,这也会给您带来无效的填充。由于填充无效,因此密码不知道数据在哪里结束,并给您BadPaddingException