相同的二进制产生不同的md5
问题描述:
看看这个:相同的二进制产生不同的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
节点:
产生这样的输出:
/code # node md5.js
18
171
3f83d1a9a01e19e1a85665394f0f5a09
您可以看到二进制文件具有相同的代码,并且顺序相同。 怎么可能没有相同的MD5?
答
该字符串应该发送它的MD5
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));
}
var str = ""
console.log('length ' + hex_key.length);
for (var i = 0; i < hex_key.length; i++) {
console.log(hex_key.charCodeAt(i));
}
console.log(crypto.createHash('md5').update(new Buffer(hex_key, "binary")).digest("hex"));
答
二进制数据不存储在一个字符串之前切换到二进制缓冲区。它很少起作用。使用适当的容器如Buffer
:
const crypto = require("crypto");
const key = "12ab";
console.log(crypto.createHash('md5').update(new Buffer(key, "hex")).digest("hex"));
http://*.com/questions/3450983/will-the-md5-cryptographic-hash-function-output-be-same-in-all-programming -langu – RST
存在以下两种可能性之一:1. MD5在其中一个实现中被破坏。 2.你没有提供相同的输入。我敢打赌#2,调试和确保值以预期的格式提供,输出正确显示。 – zaph