MD5转换中是否有固定点,即是否存在x这样md5(x) == x
?
md5(x) == x
,因为md5(x)
它的长度为 128位。因此,当且仅当在128位域的md5中存在固定点时,md5中的定点才适合任意大小的输入。
1-(1/e)*(1/e) ≈ 86.47%
MD5转换中是否有固定点,即是否存在x这样md5(x) == x
?
md5(x) == x
,因为md5(x)
它的长度为 128位。因此,当且仅当在128位域的md5中存在固定点时,md5中的定点才适合任意大小的输入。
1-(1/e)*(1/e) ≈ 86.47%
Answers:
由于MD5总和为128位长,因此任何固定点也必须必须为128位长。假设任何字符串的MD5和均匀地分布在所有可能的和,则概率任何给定的128位串是一个固定点是1 / 2 128。
因此,没有128位串是一个固定点的概率是(1 - 1 / 2 128)2 128,使得存在一个固定的点的概率为1 - (1 - 1 / 2 128)2 128。
由于随着n进入的无穷大的极限(1 - 1 / Ñ)Ñ是1 / ë,和2 128是肯定一个非常大的数字,这个概率是几乎完全1 - 1 / Ë ≈63.21%。
当然,实际上不涉及任何随机性-有固定点或没有固定点。但是,我们可以63.21%的信心存在一个固定点。(此外,请注意,此数字并不取决于键空间的大小-如果MD5的总和是32位或1024位,则答案是相同的,只要它大于大约4位或5位即可。)
我的暴力破解尝试找到了12个前缀和12个后缀匹配项。
前缀12:54db1011d76dc70a0a9df3ff3e0b390f-> 54db1011d76d137956603122ad86d762
后缀12:df12c1434cec7850a7900ce027af4b78-> b2f6053087022898fe920ce027af4b78
博客文章:https : //plus.google.com/103541237243849171137/posts/SRxXrTMdrFN
md5sum
linux命令,所以得到了不同的结果
由于哈希是不可逆的,因此很难弄清楚。解决此问题的唯一方法是在哈希的所有可能输出上计算哈希,然后查看是否匹配。
详细地说,MD5哈希中有16个字节。这意味着有2 ^(16 * 8)= 3.4 * 10 ^ 38个组合。如果在16字节值上计算哈希值花了1毫秒,那么计算所有这些哈希值将需要10790283070806014188970529154.99年。
虽然我没有“是/否”的答案,但我的猜测是“是”,此外,大概有2 ^ 32这样的固定点(用于位字符串解释,而不是字符串解释)。我正在积极研究这一问题,因为这似乎是一个很棒的,简洁的难题,需要大量的创造力(如果您不立即进行暴力搜索的话)。
我的方法如下:将其视为数学问题。我们有128个布尔变量和128个方程式,它们根据输入(应该匹配)描述输出。通过插入算法表和填充位中的所有常量,我希望可以大大简化方程式,以生成针对128位输入情况进行优化的算法。然后,可以用某种不错的语言对这些简化的方程式进行编程,以进行有效搜索,或者再次进行抽象处理,一次分配单个位,注意矛盾。您只需要查看输出的几位即可知道它与输入不匹配!
有两种解释,如果允许其中一种选择,则找到固定点的可能性会增加到81.5%。
严格来说,由于MD5的输入为512位长,输出为128位,因此从定义上讲这是不可能的。