【发布时间】:2018-06-26 16:46:17
【问题描述】:
在 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));
上面的代码总是抛出 BadPaddingException: pad block corrupted 用于以下 16 字节加密数据
data = ":ʺ$jhk¨ë‹òºÃ"(数据为 16 个字符)
密钥长度为 16 个字节。
当数据已经是块大小时为什么会抛出这个异常。?并且不需要填充。
注意:加密数据是从 php 服务器获取的。
编辑:
改成后Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
来自Cipher cipher = Cipher.getInstance("AES");
解密方法成功,但给出了这个输出
【问题讨论】:
-
Cipher.doFinal 采用字节数组而不是字符串作为参数。
-
是的..它是字节数组..
-
给我们一些关于你收到的数据的更多信息,如果这就是你要解密的一切吗?
-
@Android-Developer 这是可用于加密的数据。我把它作为一个 base 64 字符串,在将它传递给这个解密方法之前对其进行解码。上面的代码就是整个解密方法。密钥为 16 个字节。
-
@userSeven7s:您在示例中使用的字符串和代码长度为 13 个字符。您尝试解密的实际数据是什么?
标签: java android aes badpaddingexception