我尝试在javascript中加密邮件(使用crypto-js库)并在java中解密。
这是javascript代码:
var key = CryptoJS.enc.Utf8.parse(aesPassword);
var ive = CryptoJS.enc.Utf8.parse(aesIv);
var encryptedData = CryptoJS.AES.encrypt(dataToEncrypt, key, {mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7, iv: ive});
这是java代码:
final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
final SecretKeySpec key = new SecretKeySpec(aesPassword().getBytes("UTF-8"), "AES");
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(aesIv().getBytes("UTF-8")));
byte[] decrypted = cipher.doFinal(DatatypeConverter.parseBase64Binary(message));
但是当我尝试在Java中解密时,抛出了这个异常: javax.crypto.BadPaddingException:给定最终块未正确填充
密码:6h2faBePVxpgyFSN iv:NKOzRKrmEMKs1kE4 要加密的数据:" {token:cMGOIrYlJm9lPhPW}"
任何帮助?
提前致谢
答案 0 :(得分:0)
我可能错了,但我认为在这种情况下BadPaddingException意味着你没有正确的密钥来成功执行解密。异常本质上意味着密钥太短或太长(我认为)。
Try{
String decrypted = aes.decrypt(...);
System.out.println(decryted);
}catch(Exception e){
}
上面的代码之类的东西可能会起作用,因为只有在未捕获BadPaddingException时才会到达System.out,这可以在尝试可能的密钥进行解密时在循环中使用,例如,如果您尝试计算所有解密的可能密钥。