【发布时间】:2015-07-13 12:11:56
【问题描述】:
起初,Node.js 加密。
// Both of key and IV are hex-string, but I hide them in Stackoverflow.
var secretKey = new Buffer('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'), // 48 chars
iv = new Buffer('bbbbbbbbbbbbbbbb', 'hex'); // 16 chars
var str = 'This string will be encrypted.';
var cipher = crypto.createCipheriv('des-ede3-cbc', secretKey, iv),
cryptedStr = cipher.update(str, 'utf8', 'base64') + cipher.final('base64');
然后,PHP mcrypt。
$key = pack('H*', "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
$iv = pack('H*', "bbbbbbbbbbbbbbbb");
$string = 'This string will be encrypted.';
$text = mcrypt_encrypt(MCRYPT_3DES, $key, $string, MCRYPT_MODE_CBC, $iv);
$text_base64 = base64_encode($text);
问题。
同一个字符串,同一个算法,同一个编码。
还有一点不匹配,那就是cipher.final()。
下面是真实的示例输出。
// Node.js output.
UKBI17EIHKNM2EU48ygsjil5r58Eo1csByAIFp9GhUw=
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Same part
// PHP output.
UKBI17EIHKNM2EU48ygsjil5r58Eo1csAY4C0JZoyco=
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Same part
为什么cipher.final() 会产生不同的结果?
在不修改 PHP 代码的情况下,如何在 Node.js 中获得相同的结果。
【问题讨论】:
-
node.js 示例报错:runnable.com/VUcebtM0NhY3v9v5/output
-
我明白了,我不知道如何让它可见。无论如何,错误是:“buffer.js:348 ret = this.parent.hexWrite(string, this.offset + offset, length); TypeError: Invalid hex string”。
-
@GergoErdosi,你说得对。我修好了它。因为之前的文章我为 Buffer 写了奇怪的字符。
-
你知道哪个输出是正确的吗?
-
我不知道哪个是正确的。但我必须遵循 PHP 结果。我用Node.js连接别人的PHP系统。
标签: php node.js encryption mcrypt