Aes javascript加密 - java解密

时间:2017-04-20 11:33:28

标签: javascript java cryptography aes cryptojs

我尝试在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}"

任何帮助?

提前致谢

1 个答案:

答案 0 :(得分:0)

我可能错了,但我认为在这种情况下BadPaddingException意味着你没有正确的密钥来成功执行解密。异常本质上意味着密钥太短或太长(我认为)。

Try{
    String decrypted = aes.decrypt(...);
    System.out.println(decryted);
}catch(Exception e){

}

上面的代码之类的东西可能会起作用,因为只有在未捕获BadPaddingException时才会到达System.out,这可以在尝试可能的密钥进行解密时在循环中使用,例如,如果您尝试计算所有解密的可能密钥。