'BadPaddingException:pad block corrupted'在使用AES/ECB解密时

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方法成功,但是给出了这个输出 在此输入图像描述

har*_*ore 7

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