我正在做一个关于MD5碰撞的演示,我想让人们知道碰撞的可能性。
最好有两个文本块散列到同一件事上,并解释在碰到碰撞之前需要多少[a-zA-Z]组合。
显而易见的答案是对所有可能的组合进行哈希处理,直到命中相同的两个哈希。那么您将如何进行编码。作为一个快速实验,我尝试对[AZ]的5列的每个组合进行哈希处理,将其存储在.net哈希表中并捕获冲突异常。这有两个问题- 哈希表最终超时,而且我很确定自己将需要更多的字符。
显然,此数据结构太大,无法在内存中处理,因此现在我必须涉及一个数据库。听起来像是测试天蓝色的好项目- 有点像这些家伙。
谁能指出我这样做的 有效 方向?
以下两个不同的128个字节序列散列为相同的值:
MD5哈希 :79054025255fb1a26e4bc422aef54eb4
下面的差异突出显示(粗体)。抱歉,很难看到。
d131dd02c5e6eec4693d9a0698aff95c 2fcab5 **8** 712467eab4004583eb8fb7f89 55ad340609f4b30283e4888325 **7** 1415a 085125e8f7cdc99fd91dbd **f** 280373c5b d8823e3156348f5bae6dacd436c919c6 dd53e2 **b** 487da03fd02396306d248cda0 e99f33420f577ee8ce54b67080 **a** 80d1e c69821bcb6a8839396f965 **2** b6ff72a70
和
d131dd02c5e6eec4693d9a0698aff95c 2fcab5 **0** 712467eab4004583eb8fb7f89 55ad340609f4b30283e4888325 **f** 1415a 085125e8f7cdc99fd91dbd **7** 280373c5b d8823e3156348f5bae6dacd436c919c6 dd53e2 **3** 487da03fd02396306d248cda0 e99f33420f577ee8ce54b67080 **2** 80d1e c69821bcb6a8839396f965 **a** b6ff72a70
碰撞/块1的可视化(来源:Links.Org)
碰撞/块2的可视化(来源:Links.Org)