【问题标题】:encrypt in Javascript and decrypt in Java - Not working [duplicate]在Javascript中加密并在Java中解密 - 不工作[重复]
【发布时间】:2017-12-25 11:53:54
【问题描述】:

我在 JavaScript 中加密并在 Java 中解密,但出现以下错误:

java 中抛出的错误: java.lang.Exception:给定最终块未正确填充

以下是我的 Java 脚本代码:

var key =CryptoJS.enc.Utf8.parse("0123456789012345");
var ive  = CryptoJS.enc.Utf8.parse("0123456789012345");

var encrypted = CryptoJS.AES.encrypt(password, key, {iv: ive});
console.log('encrypted msg = ' + encrypted.toString());


var afterEncryptionText = encrypted.toString();
console.log("encrypted password: " + afterEncryptionText);

Java 代码:

public String decrypt(String cipherText) throws Exception {

    try {
        String encryptionKey = "0123456789012345";
        String ive = "0123456789012345";

        final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "SunJCE");

        final SecretKeySpec key = new SecretKeySpec(encryptionKey.getBytes("UTF-8"), "AES");
        cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(ive.getBytes("UTF-8")));
        return new String(cipher.doFinal(cipherText.getBytes("UTF-8")),"UTF-8");

    } 
    catch(Exception e){

        throw new Exception(e.getMessage());
    }
}

【问题讨论】:

  • 我没有使用 Ajax。我只是在 Javascript 中加密并在 java 中解密

标签: javascript java node.js encryption


【解决方案1】:

我发现将加密数据表示为字符串往往会导致有损转换。当我尝试将加密字节直接转换为字符串时,我通常会丢失映射到某些控制字符的字节或字节对。

我建议直接传输加密后的字节。如果这是不可能的,或者你不喜欢这样做,我建议将加密字节表示为一个数字(比如 base-16 或 base-64),传输包含数字的字符串,在接收端解析数字,通过执行表示过程的逆过程并解密这些字节来从该数字中获取字节。例如,这可以使用 BigInteger 类来完成,或者您可以编写自己的 base-16 编码器。

【讨论】:

  • 不工作。又出现一个错误:使用填充密码加密时,输入长度必须是 16 的倍数
  • 在使用 BigInteger 或在 base-16 中进行自定义编码时是否会引发此错误?我也不好澄清,我的意思是你应该只为传输编码,而不是在加密和其他东西时。
  • 我没有使用 BigInteger 。我在没有转换为 toString() 的情况下进行了传输。 Java 保持不变。现在出现错误:使用填充密码加密时输入长度必须是 16 的倍数
  • 在这种情况下,我建议您编写一些代码,将一个字节转换为两个十六进制数字(您可以阅读here)并传输从加密字节生成的十六进制数字字符串。然后在另一端,将该字符串转换回字节数组(与将字节转换为十六进制相反)并尝试解密。
  • 能否请您提供工作代码示例,其中在 Javascript 中加密并在 Java 中解密
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 2021-03-25
  • 2015-03-30
  • 1970-01-01
  • 2021-09-22
  • 2013-11-10
  • 2018-08-30
相关资源
最近更新 更多