【发布时间】:2015-10-03 00:14:43
【问题描述】:
我遇到了一个小问题。出于某种原因,我无法使用与加密它们相同的方法来解密某些字符串。例如,我正在使用此代码进行解密:
SecretKeySpec key = new SecretKeySpec(salt.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", "SunJCE");
cipher.init(Cipher.DECRYPT_MODE, key);
String result = new String(cipher.doFinal(message));
System.out.println("Decrypted:" + result);
无论如何,当盐是“1231231231231231”并且我试图解密的消息是“读取”时。我收到此错误:
Exception in thread "main" javax.crypto.BadPaddingException: Given final block not properly padded
但是加密器(工作方式相同)说加密的值是
I¡?Þd↨Ú#à, 7êLO*
如何解决此问题或避免用户输入此类字符串?谢谢
【问题讨论】:
-
“请忽略乱七八糟”没问题,我就忽略你的帖子。
-
这必须作为“本周的哑剧”而下降。我推荐阅读How To s The Smart Way,特别是On Not Reacting Like A Loser。祝你好运!
-
"...要加密的消息是'read'":你不是要解密吗?您需要将具有相同填充的加密操作的输出传递给上述函数。
-
抱歉,我就是这么想的。加密“读取”后,输出为“I¡?Þd↨Ú#à, 7êLO*”,但是当我尝试使用相同的密钥对其进行解密时,我收到了我发布的错误。我编辑了最初的帖子。
-
您是否还使用 PKCS#5 填充进行加密?在任何情况下,您都可以在没有填充的情况下解密,并查看解密的数据以了解 JCE 认为填充不是 PKCS#5 的原因。
标签: java string encryption aes