Как сделать так, чтобы хеш в PHP и Node.js имели одинаковое значение? - PullRequest
2 голосов
/ 20 июля 2011

В node.js у меня есть:

var h = crypto.createHash("md5");   // md5
h.update("AAA");
h.digest("hex");

В PHP у меня есть:

md5("AAA");

Однако оба имеют разное значение.Как я могу сделать это так же?или, какой другой алгоритм я должен использовать, чтобы сделать их такими же, чтобы я мог использовать его в качестве расчета подписи.Спасибо.


Оппсс .. на самом деле.виноват.когда я проверяю это, есть ошибка .. это будет md5 то же самое.

Ответы [ 4 ]

10 голосов
/ 20 июля 2011

Простой поиск в Google, который я делал в прошлом, дал мне => http://japhr.blogspot.com/2010/06/md5-in-nodejs-and-fabjs.html

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

PHP

Код

<?php
echo md5("AAA");

Выход:

alfred@alfred-laptop:~/node/hash$ php md5.php 
e1faffb3e614e6c2fba74296962386b7

Выходные данные для PHP и node.js равны.

Расширение C

Также вы можете взглянуть на https://github.com/brainfucker/hashlib, который использует реализацию C, которая являетсябудет быстрее.

1 голос
/ 20 июля 2011

Ваш код создает для меня то же хеш-значение, что вы можете сделать это неправильно в какой-то момент

0 голосов
/ 22 сентября 2018
var hash = crypto.createHash('md5').update(password, 'latin1', 'latin1').digest('hex');

Это сработало для меня. Попробуйте разные кодировки: utf8, ascii или latin1.

0 голосов
/ 24 ноября 2016

У меня была та же проблема с созданием хэша для строки, отличной от 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 были разными, пока я не использовал библиотеку utf8 .Поэтому следующий код работает как для PHP, так и для NodeJS:

crypto.createHash('md5').update(utf8.encode(non_utf8_str)).digest('hex');
...