node.js — какова будет эквивалентная версия php следующего хэширующего исходного кода md5 для nodejs?

Я перехожу с nodejs на PHP и не могу получить аналогичный выходной хэш-дайджест md5 для приведенного ниже фрагмента с тем же вводом. Возможно, что-то мне не хватает.

var md5sum = crypto.createHash('md5');
md5sum.update(new Buffer(str, 'binary'));
md5_result = md5sum.digest('hex');

Заранее спасибо за помощь !!! Кстати, моя версия nodejs — 10.1.0, а версия npm — 5.6.0. И для тех, кто спрашивает, этот эквивалент исходного кода не md5($str) и это не мой код, я просто конвертирую его. Например, для следующего ввода 42b86318d761e13ef90c126c3e060582¤3¤724039¤1 полученный дайджест 9860bd2248c069c7b65045917c215596,

Я просто попытался запустить следующий фрагмент на https://www.tutorialspoint.com/execute_nodejs_online.php, с учетом ваших предложений, но они не работают:

const crypto = require('crypto');
var str = "42b86318d761e13ef90c126c3e060582¤3¤724039¤1";
var md5sum = crypto.createHash('md5');
md5sum.update(new Buffer(str, 'binary'));
const md5_result = md5sum.digest('hex');
const md5 = crypto.createHash('md5').update(str).digest('hex');
const expected_digest = "9860bd2248c069c7b65045917c215596";
console.log("original version digest:" + md5_result);
console.log("proposed equivalent digest:" + md5);
console.log("expected digest:" + expected_digest);

Что я получаю на этом сайте:
original version digest:9860bd2248c069c7b65045917c215596
proposed equivalent digest:b8ee918f782fe7135b25c1fa59339094
expected digest:9860bd2248c069c7b65045917c215596

Другие сайты, такие как https://www.katacoda.com/courses/nodejs/playground,https://repl.it/ ,https://www.jdoodle.com/execute-nodejs-online поддержать мою заявку (т. е. дайджест md5 9860bd2248c069c7b65045917c215596) однако пока что этот сайт http://rextester.com/l/nodejs_online_compiler выводит то, что некоторые из вас получили (т.е. b8ee918f782fe7135b25c1fa59339094). Как я уже говорил, пожалуйста, помогите мне найти PHP-ЭКВИВАЛЕНТ версию первого фрагмента кода nodejs.

-2

Решение

Вы не должны использовать: new Buffer(str, 'binary') просто:

const md5 = crypto
.createHash('md5')
.update(string)
.digest('hex');

Используя это, вы получите тот же результат с php md5Linux md5sumи узел.

Для вашего ввода: 42b86318d761e13ef90c126c3e060582¤3¤724039¤1 следующие команды будут печатать одинаково:

md5sum

echo -n "42b86318d761e13ef90c126c3e060582¤3¤724039¤1" | md5sum

PHP

echo md5("42b86318d761e13ef90c126c3e060582¤3¤724039¤1");

Узел

require('crypto')
.createHash('md5')
.update("42b86318d761e13ef90c126c3e060582¤3¤724039¤1")
.digest('hex');

Все три будут выводить: b8ee918f782fe7135b25c1fa59339094

НОТА:

new Buffer устарела, Buffer.from следует использовать вместо

Другие сайты, такие как
https://www.katacoda.com/courses/nodejs/playground,https://repl.it/
,https://www.jdoodle.com/execute-nodejs-online поддержать мою претензию (т.е.
Дайджест md5 — 9860bd2248c069c7b65045917c215596)

Они не поддерживают ваше требование, Вы выполняете один и тот же код, что неверно, в разных средах node.js. Конечно, каждая среда Node.js будет печатать этот вывод для вашего кода, что не делает его правильным.


Поскольку вы не можете изменить код и хотите получить эквивалент PHP, вот он:

function utf8_char_code_at($str, $index) {
$char = mb_substr($str, $index, 1, 'UTF-8');

if (mb_check_encoding($char, 'UTF-8')) {
$ret = mb_convert_encoding($char, 'UTF-32BE', 'UTF-8');
return hexdec(bin2hex($ret));
} else {
return null;
}
}

function myMD5($str) {

$tmp = "";

for($i = 0; $i < mb_strlen($str); $i++)
$tmp .= bin2hex(chr(utf8_char_code_at($str, $i)));

return md5(hex2bin($tmp));
}

echo myMD5($string);

utf8_char_code_at взято из: https://stackoverflow.com/a/18499265/1119863

Это выведет: 9860bd2248c069c7b65045917c215596 так же, как ваш фрагмент узла.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]