为什么这两个应该在 md5 中产生哈希碰撞的字符串在 php 中没有产生相同的哈希值?

问题描述 投票:0回答:1

我正在尝试解决一个挑战,我遇到了与 md5 哈希冲突相关的问题。 这是 php 代码:

if ($_GET['param1'] !== $_GET['param2']) {
    if (md5($_GET['param1']) === md5($_GET['param2'])) {
        die($flag);
    }
}

我发现了多个哈希冲突的例子。但它们不会产生相同的哈希值! 这些是应该产生此哈希的两个字符串:

79054025255fb1a26e4bc422aef54eb4
字符串1=

d131dd02c5e6eec4 693d9a0698aff95c 2fcab58712467eab 4004583eb8fb7f89
55ad340609f4b302 83e488832571415a 085125e8f7cdc99f d91dbdf280373c5b
d8823e3156348f5b ae6dacd436c919c6 dd53e2b487da03fd 02396306d248cda0
e99f33420f577ee8 ce54b67080a80d1e c69821bcb6a88393 96f9652b6ff72a70

字符串2=

d131dd02c5e6eec4 693d9a0698aff95c 2fcab50712467eab 4004583eb8fb7f89
55ad340609f4b302 83e4888325f1415a 085125e8f7cdc99f d91dbd7280373c5b
d8823e3156348f5b ae6dacd436c919c6 dd53e23487da03fd 02396306d248cda0
e99f33420f577ee8 ce54b67080280d1e c69821bcb6a88393 96f965ab6ff72a70

但是当我检查下面代码中的哈希值时,它们没有冲突问题:

<?php
$code1="d131dd02c5e6eec4 693d9a0698aff95c 2fcab58712467eab 4004583eb8fb7f89 55ad340609f4b302 83e488832571415a 085125e8f7cdc99f d91dbdf280373c5b d8823e3156348f5b ae6dacd436c919c6 dd53e2b487da03fd 02396306d248cda0 e99f33420f577ee8 ce54b67080a80d1e c69821bcb6a88393 96f9652b6ff72a70";
$code2="d131dd02c5e6eec4 693d9a0698aff95c 2fcab50712467eab 4004583eb8fb7f89 55ad340609f4b302 83e4888325f1415a 085125e8f7cdc99f d91dbd7280373c5b d8823e3156348f5b ae6dacd436c919c6 dd53e23487da03fd 02396306d248cda0 e99f33420f577ee8 ce54b67080280d1e c69821bcb6a88393 96f965ab6ff72a70";
echo $code1;
echo "\n";
echo $code2;
echo "\n";
echo md5($code1);
echo"\n";
echo md5($code2);
echo"\n";
if(md5($code1) === md5($code2)){
  
  print("hash collision\n");
}
else{
  print("not equal");
}

?>

我变得不平等了。 我知道这可能与字符串中的空格或字符串的十六进制格式有关; 它们在 bash 命令中也不会产生相同的哈希值

echo -n "string" | md5sum 
。我如何在 php 代码中创建碰撞? 字符串取自维基百科页面:https://en.wikipedia.org/wiki/MD5 你可以在这里在线运行 php 代码:https://onecompiler.com/php/3zuqj997z

这两个字符串与md5哈希冲突问题有关。但我没有得到预期的相等的 md5 哈希值。

php hash md5 md5sum hash-collision
1个回答
0
投票

哈希冲突通常发生在精心制作的二进制数据中,而不是简单的英文字母字符串中。示例数据是十六进制转储,您应该从中生成二进制字符串:

$code1 = hex2bin(
    "d131dd02c5e6eec4693d9a0698aff95c2fcab58712467eab4004583eb8fb7f8955ad340609f4b30283e488832571415a085125e8f7cdc99fd91dbdf280373c5bd8823e3156348f5bae6dacd436c919c6dd53e2b487da03fd02396306d248cda0e99f33420f577ee8ce54b67080a80d1ec69821bcb6a8839396f9652b6ff72a70"
);
$code2 = hex2bin(
    "d131dd02c5e6eec4693d9a0698aff95c2fcab50712467eab4004583eb8fb7f8955ad340609f4b30283e4888325f1415a085125e8f7cdc99fd91dbd7280373c5bd8823e3156348f5bae6dacd436c919c6dd53e23487da03fd02396306d248cda0e99f33420f577ee8ce54b67080280d1ec69821bcb6a8839396f965ab6ff72a70"
);

演示

© www.soinside.com 2019 - 2024. All rights reserved.