在 JS 中加密并在 Java 中解密 - 错误
Encrypting in JS and decrypting in Java - errors
我有一个用例,我需要在 JS 中加密并在 Java 中解密。我尝试了两种方法:
对于这种情况,我得到一个 javax.crypto.BadPaddingException:给定的最终块未正确填充错误。
参考各种来源编写的代码。
对于加密:
var salt = CryptoJS.lib.WordArray.random(16);
var salt_hex = CryptoJS.enc.Hex.stringify(salt);
var iv = CryptoJS.lib.WordArray.random(16);
var iv_hex = CryptoJS.enc.Hex.stringify(iv);
var key = CryptoJS.PBKDF2(secret, salt, {
keySize : 256 / 32,
iterations : 1
});
var encrypted = CryptoJS.AES.encrypt(value, key, { iv : iv });
我将 'salt'、'iv' 和 'encrypted' 传递给 JS 代码。这里我用
解密
SecretKey key = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv));
plaintext = new String(cipher.doFinal(msg), "UTF-8");
在这种情况下,我得到 java.security.InvalidKeyException:在这种情况下密钥大小非法。
我的设置是:
- JS端写在一个AngularJS服务
- 服务器 java 代码是通过 MobileFirst Server 中的适配器调用的
关于我哪里出错的任何指示。
我有一个用例,我需要在 JS 中加密并在 Java 中解密。我尝试了两种方法:
对于这种情况,我得到一个 javax.crypto.BadPaddingException:给定的最终块未正确填充错误。
参考各种来源编写的代码。 对于加密:
var salt = CryptoJS.lib.WordArray.random(16); var salt_hex = CryptoJS.enc.Hex.stringify(salt); var iv = CryptoJS.lib.WordArray.random(16); var iv_hex = CryptoJS.enc.Hex.stringify(iv); var key = CryptoJS.PBKDF2(secret, salt, { keySize : 256 / 32, iterations : 1 }); var encrypted = CryptoJS.AES.encrypt(value, key, { iv : iv });
我将 'salt'、'iv' 和 'encrypted' 传递给 JS 代码。这里我用
解密SecretKey key = new SecretKeySpec(key, "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv)); plaintext = new String(cipher.doFinal(msg), "UTF-8");
在这种情况下,我得到 java.security.InvalidKeyException:在这种情况下密钥大小非法。
我的设置是:
- JS端写在一个AngularJS服务
- 服务器 java 代码是通过 MobileFirst Server 中的适配器调用的
关于我哪里出错的任何指示。