别介意我为什么要这样做 - 这主要是理论上的。
如果我是整数的MD5散列字符串表示,在两个散列碰撞之前我需要计算多高?
答案 0 :(得分:2)
此问题(一般情况下)称为Birthday Paradox
可以轻松计算一般情况下的碰撞概率。但是,在您的特定情况下,您必须实际计算(并存储!)每个MD5。
编辑@Scott:不是真的。 Pigeonhole原则(仅仅是生日问题的一个特例)会说有2 ^ 128个可能的MD5值,我们肯定会在1 + 2 ^ 128次尝试后发生碰撞。生日悖论说,对于大约2 ^ 70个MD5值,碰撞概率将大于0.5。根据存储要求的这些估算,由您来决定问题是否值得。我没有。
答案 1 :(得分:0)
显然,人们可以base a thesis on this very thing(或类似的问题,无论如何)。我还没看过,但史蒂文斯的论文中的某些内容可能对你有帮助(它显然与维基百科文章有关)。
答案 2 :(得分:0)
在一个完美的世界中,1 + 2^128
。但我怀疑md5是完美的,我不能给你一个数字,但保证是<= 1+ 2^128
答案 3 :(得分:0)
这是一种科学的方法,可以找出你需要计算多高的估计值。
将MD5哈希值减少为4位。计算一下(确保计算直到达到100次碰撞,这样你才能得到一个好的平均值)
然后以8位进行相同的操作(再次,等待多次碰撞,以便计算平均值)。
一次又一次地执行此操作,直到您获得4,8,12,16位的平均值,然后查看是否可以找到趋势。遵循该趋势高达128位
您可能希望xor全部128位来提出您的较短版本。考虑第一部分或最后部分可能不是最佳测试。