我需要解密一个AES密文,我有密钥。问题是在Java中解密时会发生错误:
javax.crypto.BadPaddingException: Given final block not properly padded
我认为这是数据库中持久存在的数据存在问题,并且数据的某些部分已损坏(因为到目前为止没有问题,因此不能成为关键)。密文的长度是16的倍数。
两个问题:
答案 0 :(得分:1)
如果可以保证消息长度始终是AES块大小的16倍,则可以在加密时使用NOPADDING
省略填充规范的填充。如果在不需要填充的模式下使用AES(即CTR
模式),也可以省略填充。
此外,您始终可以尝试使用NOPADDING
解密填充的邮件,但您必须在某个时刻处理明文中的填充。
总的来说,你可能最好不要试图弄明白为什么你的消息没有正确解密而不是尝试解决方法。处理加密时的解决方法通常不是一个好主意。