哈希冲突示例(可打印字符串)

时间:2014-10-06 13:17:29

标签: c hash cryptography md5

我搜索了很多md5哈希冲突,但我只找到了二进制示例。我想找到两个UTF8字符串,它们具有相同的md5哈希值。有没有,或者碰撞只适用于二进制数据?

4 个答案:

答案 0 :(得分:6)

UTF-8碰撞。根据密码哈希的性质,即使对于像MD5一样破坏的哈希,找到它们也是有意的。

您可以搜索MD5 Rainbow Tables,它可用于密码破解,因此也可用于UTF-8字符串。正如@alk指出的那样,蛮力搜索需要很长时间。

答案 1 :(得分:3)

这绝对可能:

  • 我们都同意由于birthday paradox而导致MD5发生冲突 - 我们将无限多个可能的输入映射到属于有限序列的元素。
  • 存在无限多次碰撞的可能性:我们能够产生无限的输入对,而MD5会尝试均匀地映射它们。

仅凭这一点,其中一些冲突绑定是有效的UTF8字符串,但它们非常罕见,因为其中大多数只是随机二进制垃圾。

如果你绝对需要来查找此类消息,我建议使用collision finder written by Patrick Stach,它应在几小时内返回一对任意消息,或my attempt to improve it。后者使用了Wang(第一个演示 MD5碰撞示例的人),Lian,Sasaki,Yajima和Klima的后续论文中提出的技术。

我认为你也可以在某种程度上使用length extension attack,但它需要更深入地了解MD5内部发生的事情。

答案 2 :(得分:1)

我最近在我的项目中发现了一个非常简单的哈希冲突案例。我正在使用xxhash的Python包装器进行散列。链接:https://github.com/ewencp/pyhashxx

s1 = 'mdsAnalysisResult105588'
s2 = 'mdsAlertCompleteResult360224'
pyhashxx.hashxx(s1) # Out: 2535747266
pyhashxx.hashxx(s2) # Out: 2535747266

它在系统中引起了一个非常棘手的缓存问题,然后我终于发现它是一个哈希冲突。

答案 3 :(得分:-1)

MD5哈希冲突(hex - from here)的规范示例:

消息1:

d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f89
55ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70

消息2

d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89
55ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70
事实上,

是有效的UTF-8字符串。它们不包含任何NULL个字节,因此是UTF-8字符串。现在,它们毫无意义,在解码时看起来像垃圾:

消息1:

1i=\/ʵF~@X>U4 䈃%qAZQ%ɟ7<[؂>1V4[m6Sⴇ9cH͠3BW~Tp
Ƙ!e+o*p

(某些字符是控制字符)

消息2:

1i=\/ʵF~@X>U4    䈃%AZQ%ɟr7<[؂>1V4[m6S49cH͠3BW~Tp(
Ƙ!eo*p

(同样的情况)


哦,在我忘记之前,这是MD5哈希:

79054025255fb1a26e4bc422aef54eb4