【发布时间】:2013-09-27 18:58:48
【问题描述】:
出于研究的目的,了解我可以用自身组合多少次 md5 函数而不获得相同的值会很有用。
这是一种对盐的并行/互补方法,因为这样使用暴力破解值变得更加困难。
【问题讨论】:
-
你的意思是
while(foo != md5(foo)) { foo = md5(foo) }?虽然 md5 这些天没用了,但我怀疑它是否从根本上被破坏到foo == md5(foo)永远不会是真的。 -
这在数学上是不可能的。 MD5 关系集是有限的。因此,您将返回比关系中存在的元素更多的元素。 (16^32 个值)有很多值,但这正是我的问题的重点:我能做多少次?
-
任何其他统计/数据/研究(例如对于 sha1)都同样有用。
-
是的,输入是无限的。但是,一旦您开始将输出作为输入反馈回来,您就会立即将自己限制为 2^128 个输入,因为这就是 md5 将输出的全部内容。生成与自身相同的输出作为输入的哈希函数是无用的。
-
您必须考虑两件事: 1. 它有多少输入(无限)并不重要,重要的是输出是有限的。 2. 选择你想要的合成函数: md5, substr 。 md5,反向。子字符串MD5。没关系。每个组合都有一个递归限制。
标签: security hash brute-force md5sum