我在一个 android 应用程序和一个独立的 java 应用程序中使用以下内容:
private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(clear);
...
我在 android 和我的独立 java 应用程序上得到不同的加密字符串(都使用相同的代码和密钥)。我得到了与这个问题相同的异常(javax.crypto.BadPaddingException:Blocktype mismatch:0):
建议的解决方案是指定填充策略,例如:
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
但我使用的是“AES”,而不是“RSA”,并且不确定如何结合 AES 指定填充。在这种情况下,我将如何构造传递给 Cipher.getInstance() 的字符串?我试了一下:
Cipher cipher = Cipher.getInstance("AES/PKCS1Padding");
但得到一个关于无效的例外。
谢谢