已知字符串具有相同的 MD5 哈希,在现实生活中没有冲突?

信息安全 哈希 md5
2021-08-16 06:05:06

我正在阅读这篇关于 MD5 哈希冲突的文章,其中明确指出这两个字符串(差异标记为^):

d131dd02c5e6eec4693d9a0698aff95c2fcab58712467eab4004583eb8fb7f8955ad340609f4b30283e488832571415a085125e8f7cdc99fd91dbdf280373c5bd8823e3156348f5bae6dacd436c919c6dd53e2b487da03fd02396306d248cda0e99f33420f577ee8ce54b67080a80d1ec69821bcb6a8839396f9652b6ff72a70

d131dd02c5e6eec4693d9a0698aff95c2fcab50712467eab4004583eb8fb7f8955ad340609f4b30283e4888325f1415a085125e8f7cdc99fd91dbd7280373c5bd8823e3156348f5bae6dacd436c919c6dd53e23487da03fd02396306d248cda0e99f33420f577ee8ce54b67080280d1ec69821bcb6a8839396f965ab6ff72a70
                                      ^                                                                                                                               ^                                                                               ^

具有相同的 MD5 哈希值。虽然用这个 MD5 生成器测试了这个假设,但它们没有相同的哈希值。

第一个字符串散列到edde4181249fea68547c2fd0edd2e22f,同时第二个字符串e234dbc6aa0932d9dd5facd53ba0372a不一样。

为什么说这两个字符串产生相同的 MD5 哈希值?

3个回答

...其中明确指出这两个字符串...

不,它明确指出“......两个不同的 128 字节序列......”

这些说法有很大的不同。首先,字符串按原样使用。在第二个中,希望意识到这些是256个字符长的字符串,由十六进制字符组成,需要它们转换为二进制以获得128 个字节

一旦完成此转换并从实际的128 个字节计算 MD5 ,就会看到两个字节序列产生相同的 MD5,即79054025255fb1a26e4bc422aef54eb4(与文章匹配)。

例如,这可以通过使用此站点并选择十六进制格式的字节作为输入来复制。

正如其他答案中所指出的,必须首先将十六进制字符串解码为原始字节,然后将原始字节馈送到 MD5 哈希函数中。如果这样做,两者都会产生 79054025255fb1a26e4bc422aef54eb4 的哈希值。

这可以在命令行上轻松完成:

echo -n 'd131dd02c5e6eec4693d9a0698aff95c2fcab58712467eab4004583eb8fb7f8955ad340609f4b30283e488832571415a085125e8f7cdc99fd91dbdf280373c5bd8823e3156348f5bae6dacd436c919c6dd53e2b487da03fd02396306d248cda0e99f33420f577ee8ce54b67080a80d1ec69821bcb6a8839396f9652b6ff72a70' | xxd -r -p | md5sum

生产

79054025255fb1a26e4bc422aef54eb4

echo -n 'd131dd02c5e6eec4693d9a0698aff95c2fcab50712467eab4004583eb8fb7f8955ad340609f4b30283e4888325f1415a085125e8f7cdc99fd91dbd7280373c5bd8823e3156348f5bae6dacd436c919c6dd53e23487da03fd02396306d248cda0e99f33420f577ee8ce54b67080280d1ec69821bcb6a8839396f965ab6ff72a70' | xxd -r -p | md5sum

生产

79054025255fb1a26e4bc422aef54eb4

这些是字节值而不是字符串。

使用https://cryptii.com/pipes/md5-hash并将输入更改为字节。

两个字节数组都产生相等的哈希79054025255fb1a26e4bc422aef54eb4