我正在尝试解决一个挑战,我遇到了与 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 哈希值。
哈希冲突通常发生在精心制作的二进制数据中,而不是简单的英文字母字符串中。示例数据是十六进制转储,您应该从中生成二进制字符串:
$code1 = hex2bin(
"d131dd02c5e6eec4693d9a0698aff95c2fcab58712467eab4004583eb8fb7f8955ad340609f4b30283e488832571415a085125e8f7cdc99fd91dbdf280373c5bd8823e3156348f5bae6dacd436c919c6dd53e2b487da03fd02396306d248cda0e99f33420f577ee8ce54b67080a80d1ec69821bcb6a8839396f9652b6ff72a70"
);
$code2 = hex2bin(
"d131dd02c5e6eec4693d9a0698aff95c2fcab50712467eab4004583eb8fb7f8955ad340609f4b30283e4888325f1415a085125e8f7cdc99fd91dbd7280373c5bd8823e3156348f5bae6dacd436c919c6dd53e23487da03fd02396306d248cda0e99f33420f577ee8ce54b67080280d1ec69821bcb6a8839396f965ab6ff72a70"
);