Ron*_*nie 4 java android aes badpaddingexception
在Android/Java应用程序中,
byte[] data = ":ʺ$jhk¨ë‹òºÃ"; // fetched from php server..
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, mKeyspec);
return new String(cipher.doFinal(data));
Run Code Online (Sandbox Code Playgroud)
上面的代码总是抛出BadPaddingException: pad block corrupted以下16字节的加密数据
data =":ʺ$jhk¨ë<òºÃ"(数据为16个字符)
密钥长度为16个字节.
当数据已经是块的大小时,为什么会抛出此异常.并且不需要填充.
注意:加密数据是从php服务器获取的.
改变后
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
的
Cipher cipher = Cipher.getInstance("AES");
decrypt方法成功,但是给出了这个输出

在大多数情况下,我一直在处理的BadPaddingException是当我试图解密在服务器端使用不同填充加密的东西时,或者在某些情况下它甚至没有被解密.所以首先我建议你看看方式,并确保服务器返回你的字符串不仅Base64编码,而且加密AES.另一件需要注意的事情是,如果服务器端的加密使用某种类型的填充,如:AES/CBC/NoPadding,AES/CBC/PKCS5Padding或AES/CBC/PKCS7Padding.在这种情况下,您必须在Android中使用相同的填充,以便您可以解密字符串.
| 归档时间: |
|
| 查看次数: |
19954 次 |
| 最近记录: |