在使用 AES 或 DES 解密时,异常如下:
javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:966)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:824)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:436)
at javax.crypto.Cipher.doFinal(Cipher.java:2165)
可能原因1:加密和解密的算法密钥不同,即“cipher.init()”时的密钥不同。
本人实例如下:
设置了一个静态默认密钥(default_password),加密解密算法均有动态密钥参数(password),比如:
public static String encrypt(String content, String password) {...}
然后在函数中有个判断,当传入password为空时就采用默认密钥default_password。
我加密时传入空字符串,解密时传入null值,因此导致异常发生。因为“空字符串”不等于“null”。
可能原因2:windows下没报异常,linux下报异常,这是算法密钥生成的规则问题,可以如下解决:</