创建自己的MD5冲突

rus*_*sau 43 language-agnostic algorithm hash

我正在做关于MD5碰撞的演讲,我想让人们知道碰撞的可能性.

最好有两个文本块对同一个东西进行哈希处理,并解释在碰撞之前需要多少[a-zA-Z]组合.

显而易见的答案是哈希每个可能的组合,直到两个哈希相同.那么你将如何编写这个呢?作为一个快速实验,我尝试散列5列[AZ]的每个组合,将其存储在.net哈希表中并捕获碰撞异常.这有两个问题 - 哈希表最终超时,我很确定我需要更多的字符.

显然这个数据结构太大而无法在内存中处理,所以现在我必须要涉及一个数据库.听起来像是一个测试天蓝色的好项目 - 有点像这些家伙.

有人能指出我这样做的有效方法吗?

Ale*_*lex 51

以下两个不同的128字节序列散列为相同:

MD5哈希:79054025255fb1a26e4bc422aef54eb4

以下差异突出显示(粗体).对不起,有点难看.

d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f89 
55ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5b 
d8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0 
e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70

d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89 
55ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5b 
d8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0 
e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70

碰撞/ block1的可视化(来源:Links.Org)

替代文字

碰撞/ block2的可视化(来源:Links.Org)

替代文字

  • 用于测试的实际代码(在[Python]中(http://python.net/~mwh/blog/nb.cgi/view/weblog/2004/8),[perl](http://yuweijun.blogspot.com /2008/10/md5.html)). (2认同)
  • 用JavaScript测试的实际代码:https://gist.github.com/mathiasbynens/5525001 (2认同)