我搜索了很多md5哈希冲突,但我只找到了二进制示例。我想找到两个UTF8字符串,它们具有相同的md5哈希值。有没有,或者碰撞只适用于二进制数据?
答案 0 :(得分:6)
是 UTF-8碰撞。根据密码哈希的性质,即使对于像MD5一样破坏的哈希,找到它们也是有意的。
您可以搜索MD5 Rainbow Tables,它可用于密码破解,因此也可用于UTF-8字符串。正如@alk指出的那样,蛮力搜索需要很长时间。
答案 1 :(得分:3)
这绝对可能:
仅凭这一点,其中一些冲突绑定是有效的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)的规范示例:
d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f89
55ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70
d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89
55ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70
事实上,是有效的UTF-8字符串。它们不包含任何NULL
个字节,因此是UTF-8字符串。现在,它们毫无意义,在解码时看起来像垃圾:
1i=\/ʵF~@X>U4 䈃%qAZQ%ɟ7<[>1V4[m6Sⴇ9cH͠3BW~Tp
Ƙ!e+o*p
(某些字符是控制字符)
1i=\/ʵF~@X>U4 䈃%AZQ%ɟr7<[>1V4[m6S49cH͠3BW~Tp(
Ƙ!eo*p
(同样的情况)
哦,在我忘记之前,这是MD5哈希:
79054025255fb1a26e4bc422aef54eb4