如何使PHP和Node.js中的哈希值相同?
在node.js中,我有:如何使PHP和Node.js中的哈希值相同?,php,hash,node.js,md5,signature,Php,Hash,Node.js,Md5,Signature,在node.js中,我有: var h = crypto.createHash("md5"); // md5 h.update("AAA"); h.digest("hex"); 在PHP中,我有: md5("AAA"); 然而,两者都有不同的价值。我怎样才能使它相同?或者,我应该使用什么其他算法使它们相同,以便我可以将其用作签名计算。谢谢 哎呀。。事实上我的错误。当我测试它时,有一个bug。。同样的事情也会发生 您的代码为我创建了相同的哈希值,您可能会在某个时候出错我在过去给我的简单谷
var h = crypto.createHash("md5"); // md5
h.update("AAA");
h.digest("hex");
在PHP中,我有:
md5("AAA");
然而,两者都有不同的价值。我怎样才能使它相同?或者,我应该使用什么其他算法使它们相同,以便我可以将其用作签名计算。谢谢
哎呀。。事实上我的错误。当我测试它时,有一个bug。。同样的事情也会发生 您的代码为我创建了相同的哈希值,您可能会在某个时候出错我在过去给我的简单谷歌搜索=> Node.js 脚本:
var crypto = require('crypto');
var hash = crypto.createHash('md5').update('AAA').digest("hex");
console.log(hash);
alfred@alfred-laptop:~/node/hash$ node hash.js
e1faffb3e614e6c2fba74296962386b7
alfred@alfred-laptop:~/node/hash$ php md5.php
e1faffb3e614e6c2fba74296962386b7
输出:
var crypto = require('crypto');
var hash = crypto.createHash('md5').update('AAA').digest("hex");
console.log(hash);
alfred@alfred-laptop:~/node/hash$ node hash.js
e1faffb3e614e6c2fba74296962386b7
alfred@alfred-laptop:~/node/hash$ php md5.php
e1faffb3e614e6c2fba74296962386b7
PHP
代码
<?php
echo md5("AAA");
PHP和node.js的输出是相等的
C扩展
另外,您可能已经了解了哪些使用C实现,这将更快。我在为非UTF8字符串创建哈希时遇到了同样的问题:
var non_utf8_str = "test_merchant;www.market.ua;DH783023;1415379863;1547.36;UAH;Процессор
Intel Core i5-4670 3.4GHz;Память Kingston DDR3-1600 4096MB
PC3-12800;1;1;1000;547.36";
在我使用库之前,PHP和NodeJS中的结果是不同的。
因此,以下代码对PHP和NodeJ都是等效的:
crypto.createHash('md5').update(utf8.encode(non_utf8_str)).digest('hex');
这对我有用。尝试不同的编码:“utf8”、“ascii”或“latin1”。这两种编码都为我输出完全相同的值:E1FAFFB3E614E6C2FBA7429692386B7。您使用的是什么版本的node和php?您应该在一条语句中创建哈希,如下所示…如果您的字符串包含非1字节长度的字符(例如l'Entrecôte),请使用缓冲区而不是字符串-->
crypto.createHash('md5').update(新缓冲区(ts)).digest('hex'))
使用包含非1字节字符的字符串测试代码,否则将失败。例如l'Entercô