以下 nodejs md5 哈希源代码的等效 php 版本是什么?
what would the equivalent php version be of the following nodejs md5 hashing source code?
我正在从 nodejs 迁移到 PHP,但我无法为具有相同 input.Perhaps 的以下代码段获得类似的输出 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 support my claim (i.e. md5 digest is 9860bd2248c069c7b65045917c215596
), however,so far, this site http://rextester.com/l/nodejs_online_compiler 输出你们中的一些人获得的内容(即 b8ee918f782fe7135b25c1fa59339094
)。正如我之前所说,请帮我找到第一个 nodejs 代码片段的 PHP 等效版本。
你不应该使用:new Buffer(str, 'binary')
只是:
const md5 = crypto
.createHash('md5')
.update(string)
.digest('hex');
使用它,您将获得与 php md5
、linux md5sum
和 node.
相同的输出
对于您的输入: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
。
Other sites such as
https://www.katacoda.com/courses/nodejs/playground,https://repl.it/
,https://www.jdoodle.com/execute-nodejs-online support my claim (i.e.
md5 digest is 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
摘自:
它将输出:9860bd2248c069c7b65045917c215596
与您的节点片段相同。
我正在从 nodejs 迁移到 PHP,但我无法为具有相同 input.Perhaps 的以下代码段获得类似的输出 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 support my claim (i.e. md5 digest is 9860bd2248c069c7b65045917c215596
), however,so far, this site http://rextester.com/l/nodejs_online_compiler 输出你们中的一些人获得的内容(即 b8ee918f782fe7135b25c1fa59339094
)。正如我之前所说,请帮我找到第一个 nodejs 代码片段的 PHP 等效版本。
你不应该使用:new Buffer(str, 'binary')
只是:
const md5 = crypto
.createHash('md5')
.update(string)
.digest('hex');
使用它,您将获得与 php md5
、linux md5sum
和 node.
对于您的输入: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
。
Other sites such as https://www.katacoda.com/courses/nodejs/playground,https://repl.it/ ,https://www.jdoodle.com/execute-nodejs-online support my claim (i.e. md5 digest is 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
摘自:
它将输出:9860bd2248c069c7b65045917c215596
与您的节点片段相同。