rijndael-128 cbc javascript不像php mcrypt那样返回正确的

rijndael-128 cbc javascript不像php mcrypt那样返回正确的,javascript,node.js,encryption,Javascript,Node.js,Encryption,在php中,我使用mcrypt用key和lv对字符串进行加密…现在我正在将我的php代码项目移植到node js,需要在javascript中获得与php中相同的加密字符串。。。我的数据如下: lv: 968kjnv0myizvjio key: 9qdx524o5rzytekr string: androidtest encoding: rijndael-128 mode: cbc 在php中,我得到了正确的加密字符串: 9620825aa10ce13d9e8

在php中,我使用mcrypt用key和lv对字符串进行加密…现在我正在将我的php代码项目移植到node js,需要在javascript中获得与php中相同的加密字符串。。。我的数据如下:

lv:       968kjnv0myizvjio
key:      9qdx524o5rzytekr
string:   androidtest
encoding: rijndael-128
mode:     cbc
在php中,我得到了正确的加密字符串: 9620825aa10ce13d9e886b6dec146074

在javascript(节点库)中,我得到以下信息: 6c6943435771454d34543265694774743742526764413d3d

我的代码是:

var MCrypt = require('mcrypt').MCrypt;

var desEcb = new MCrypt('rijndael-128', 'cbc');
desEcb.open('9qdx524o5rzytekr', '968kjnv0myizvjio'); // we are set the key and lv

var ciphertext = desEcb.encrypt('androidtest');
console.log(bin2hex(ciphertext.toString('base64')));

function bin2hex(s) {
    var i
    var l
    var o = ''
    var n
    s += ''
    for (i = 0, l = s.length; i < l; i++) {
        n = s.charCodeAt(i).toString(16)
        o += n.length < 2 ? '0' + n : n
    }
    return o
}
如何在节点js(javascript)中获得与上面发布的PHP相同的结果? 或者您知道另一个在NodeJS中工作的库可以获得与PHP相同的结果吗?
或者可以编写自定义函数来将上述内容存档?

首先,不要将密文转换为base64,因为在PHP中没有,所以这是不同的一点

您不需要使用
bin2hex
函数,因为node可以为您执行此操作

var ciphertext = desEcb.encrypt('androidtest');
console.log(ciphertext.toString('hex')); //9620825aa10ce13d9e886b6dec146074

您是否注意到javascript结果,每个十六进制数字对都在可打印的ascii范围内,最后两对是ascii
==
。。。看起来像是转换为十六进制的base64字符串。。。如果你解码了base64。。。猜猜你得到了什么:pso,这应该告诉你为什么
ciphertext.toString('base64')
不是正确的事情。我对这种解码东西是新手…在php中,我得到了正确的值,所以我的android设备解码成功…所以我需要删除base64?好吧。。。对在转换为十六进制之前,是否在PHP中转换为base64?-删除
.toString('base64')
-查看结果是什么是的,你是对的…我删除了它,得到了
var ciphertext = desEcb.encrypt('androidtest');
console.log(ciphertext.toString('hex')); //9620825aa10ce13d9e886b6dec146074