Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.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
如何使PHP和Node.js中的哈希值相同?_Php_Hash_Node.js_Md5_Signature - Fatal编程技术网

如何使PHP和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。。同样的事情也会发生 您的代码为我创建了相同的哈希值,您可能会在某个时候出错我在过去给我的简单谷

在node.js中,我有:

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ô