1
我的常量 'BadPaddingException垫块损坏'获得:在AES/CBC/PKCS5Padding
public static final String AES_ALGORITHM_MODE_PADDING = "AES/CBC/PKCS5Padding";
public static final String AES = "AES";
public static final String PROVIDER = "BC";
加密
Cipher aesCipher = Cipher.getInstance(AES_ALGORITHM_MODE_PADDING, PROVIDER);
SecretKeySpec aeskeySpec = new SecretKeySpec(rawAesKey, AES);
aesCipher.init(Cipher.ENCRYPT_MODE, aeskeySpec);
byte[] encryptedData = aesCipher.doFinal(data);
this.iv = Base64.encodeBase64(aesCipher.getIV()); //get hold of the random IV
return encryptedData;
在另一类我做解密
IvParameterSpec ivspec = new IvParameterSpec(this.iv); //this is already been converted from base64 to raw form.
Cipher aesCipher = Cipher.getInstance(AES_ALGORITHM_MODE_PADDING, PROVIDER);
SecretKeySpec aeskeySpec = new SecretKeySpec(rawAesKey, AES);
aesCipher.init(Cipher.DECRYPT_MODE, aeskeySpec, ivspec);
return aesCipher.doFinal(rawEncryptedLicenseData);
现在,当我运行这个我得到一个BadPaddingException在doFinal解密时,我做错了什么?如果我删除CBC/PKCS5Padding和IV的东西,只使用AES,它的工作原理!
我看不出什么毛病你是显示的代码。我怀疑你没有正确地在课堂上移动IV。如果您可以在自包含的示例中重现问题(首先进行加密然后解密的一种方法),请尝试尝试。 – 2010-07-05 08:21:55
你说得对。我注释了我的RAW AES密钥的保存,所以eclipse使用了之前的JUnit测试中的旧密钥。 – jax 2010-07-05 09:13:44