Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中加密,在node.js中解密_Java_Node.js_Encryption_Aes - Fatal编程技术网

在java中加密,在node.js中解密

在java中加密,在node.js中解密,java,node.js,encryption,aes,Java,Node.js,Encryption,Aes,我需要用java加密,用node.js解密。解密结果已损坏。 下面是java代码: public String encrypt(SecretKey key, String message){ Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key); byte


我需要用java加密,用node.js解密。解密结果已损坏。

下面是java代码:

    public String encrypt(SecretKey key, String message){ 
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");              
        cipher.init(Cipher.ENCRYPT_MODE, key);        
        byte[] stringBytes = message.getBytes("UTF8");       
        byte[] raw = cipher.doFinal(stringBytes);

        // converts to base64 for easier display.
        BASE64Encoder encoder = new BASE64Encoder();
        String base64 = encoder.encode(raw);

        return base64;

    }
下面是node.js代码:

    AEse3SCrypt.decrypt = function(cryptkey,  encryptdata) {
    encryptdata = new Buffer(encryptdata, 'base64').toString('binary');

    var decipher = crypto.createDecipher('aes-128-cbc', cryptkey);
    decipher.setAutoPadding(false);
    var decoded  = decipher.update(encryptdata);

    decoded += decipher.final();
    return decoded;
  }

  As a key I use: "[B@4ec6948c"
  The jave encrypted result is: "dfGiiHZi8wYBnDetNhneBw=="<br>
  The node.js result is garbich....
AEse3SCrypt.decrypt=函数(加密密钥,加密数据){
encryptdata=新缓冲区(encryptdata,'base64')。toString('binary');
var decipher=crypto.createDecipher('aes-128-cbc',cryptkey);
解密。设置自动添加(false);
var decoded=解密更新(加密数据);
解码+=解密.final();
返回解码;
}
作为密钥,我使用:[B@4ec6948c"
jave加密的结果是:“dfGiiHZi8wYBnDetNhneBw==”
node.js的结果是garbich。。。。
  • 在java中,我使用“PKCS5Padding”。在node.js中应该如何处理填充?我设置了setAutoPadding(false)。如果我不这样做,则会导致错误解密失败。(仅从node.js版本0.8开始)。
  • 我试图从java中删除utf8编码,以便与node.js互补,但没有成功。 知道怎么回事吗?
  • 作为密钥,我使用:[B@4ec6948c"

    这听起来很像是在字节数组上调用
    toString()
    。这并没有提供字节数组中的数据-它只是在字节数组上调用的
    Object.toString()
    的默认实现

    尝试使用
    Arrays.toString(key)
    打印密钥

    如果您在node.js代码中使用了那个断开的键值,难怪它会给您带来垃圾

    我试图从java中删除utf8编码,以便与node.js互补

    这绝对是错误的方法。相反,您应该解决如何让node.js代码将明文数据解释为UTF-8编码的文本。从根本上说,字符串是字符数据,加密作用于二进制数据-您需要一种方法来弥合差距,UTF-8是一种完全合理的方法。decryp的初始结果js中的数据应该是二进制数据,然后通过UTF-8“解码”为文本


    恐怕我对填充方面的了解还不够,无法对此发表评论。

    谢谢你的回答。现在我有字节数组,但如何在node.js中将其转换为字符串?使用什么编码?我不知道编码。它是二进制的,ascii吗?@user1064101:它是UTF-8。“二进制”不是一种编码。我不知道你是如何在node.js中进行UTF-8解码的,不是一个js人-但你应该能够对此进行研究。我在node.js中使用数组的部分缓冲区(根据文档,它默认为UTF-8):新缓冲区([78,101,-38,-37,102,54,-115,95,37,85,-45,24,57,-3,-35,-7]。我仍然得到错误的解密。