what would the equivalent php version be of the following nodejs md5 hashing source code?
我正在从nodejs迁移到PHP,但对于以下具有相同输入的代码片段,我无法获得类似的输出md5哈希摘要。也许我缺少一些东西。
1 2 3 | var md5sum = crypto.createHash('md5'); md5sum.update(new Buffer(str, 'binary')); md5_result = md5sum.digest('hex'); |
预先感谢您的帮助!,顺便说一句,我的nodejs版本是10.1.0,npm版本是5.6.0。对于那些询问的人,此源代码等效项不是
考虑到您的提案,我只是尝试在https://www.tutorialspoint.com/execute_nodejs_online.php上运行以下代码段,但它们不起作用:
1 2 3 4 5 6 7 8 9 10 | 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); |
我在该站点上得到的是:
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摘要为
您不应该使用:
1 2 3 4 |
使用它,您将得到与php
对于您的输入:
md5sum
1 | echo -n"42b86318d761e13ef90c126c3e060582¤3¤724039¤1" | md5sum |
的PHP
1 |
节点
1 2 3 4 | require('crypto') .createHash('md5') .update("42b86318d761e13ef90c126c3e060582¤3¤724039¤1") .digest('hex'); |
所有这三个将输出:
注意:
不建议使用
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等效的代码,因此它是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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); |
它将输出: