php - 相同的二进制文件产生不同的 md5

标签 php node.js character-encoding cryptography md5

看看这个:

我想将字符串编码为二进制并打印它的 md5。我有 2 个代码库:node 和 php。

PHP:

<?php
$key="12ab";
$hex_key = pack('H*', $key);
for ($i=0; $i<strlen($hex_key); $i++) {
    echo ord(substr($hex_key, $i ,1))."\n";
}       
echo md5($hex_key)."\n";

产生此输出:

/code # php md5.php 
18
171
53e035069bdb4f08a666fb7d42f29b15

Node :

const crypto = require("crypto");
const key = "12ab";

let hex_key = "";

for (let i = 0; i < key.length; i += 2) {
    hex_key += String.fromCharCode( parseInt(key[i] + key[i+1], 16) );
}
for (var i = 0; i < hex_key.length; i++) {
    console.log(hex_key.charCodeAt(i));        
}
console.log( crypto.createHash('md5').update( hex_key).digest("hex");

产生此输出:

/code # node md5.js
18
171
3f83d1a9a01e19e1a85665394f0f5a09

您可以看到二进制文件具有相同的代码,并且顺序相同。 md5怎么可能不一样呢?

最佳答案

不要将二进制数据存储在字符串中。它很少起作用。使用适当的容器,例如缓冲区:

const crypto = require("crypto");
const key = "12ab";

console.log(crypto.createHash('md5').update(new Buffer(key, "hex")).digest("hex"));

关于php - 相同的二进制文件产生不同的 md5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39610112/

相关文章:

node.js - Csslint:多次使用背景图像

Java正则表达式匹配UTF-8字符串(无副本)

php - 对象比较给出 fatal error

php - MySQL 选择具有同一组 id 的所有行

node.js - Sails js 和 Sequelize

javascript - Node.js 在对象创建后不会终止

Windows上的java println输出编码

c++ - 在 C++ 中编码解码的 url

javascript - Vue JS 在 console.log 上返回 [Object object] 并在 JSON.parse 上返回未定义

php - Symfony 2 app.php 与 app_dev.php