【发布时间】:2013-12-25 20:39:20
【问题描述】:
这纯粹是一个假设性的问题,但是如果您从 128 位开始,然后将它们散列 2^128 次,例如使用 MD5 算法,您最终会回到原来的位吗?是否会使用所有可能的组合?如果没有,是否有某些 nuber 比其他人更快地“回馈给自己”?
我认为这实际上是不可能实现的(在查看了我的计算器对 2^128 的答案之后...),我很确定不同算法的答案会有所不同,但这并不能阻止理论化,是吗?
是的,就是这样,希望有人对这个主题有更多的了解。期待看到答案,提前致谢!
编辑: 澄清一下:我对这个问题最感兴趣的是它是否会经历所有可能的位组合,或者是否有几个较小的循环,如果有任何额外的、相关的和有趣的信息,我们将不胜感激。 p>
【问题讨论】:
-
对我来说,如果你有 128 位,那么你的集合中只有 2^128 个组合/项目。所以在某些时候,如果你将一个值散列 2^128 次,你会遇到冲突。
-
显然必须有一些循环,因为值的数量是有限的。但并非每个数字都必须是循环的成员。这可能有点像康威的生命游戏:有一些周期性的配置,以及最终落入其中之一的其他配置。
-
有些哈希是破坏性的,有些则不是。不知道MD5。使用破坏性哈希,您将永远不会(嗯,几乎永远不会)循环回来,但最终会“稳定”在少数模式上。
-
这个问题是理论上的,不是实际的。
-
一个排列可以分解为一组循环。将 128 位映射到 128 位时的 MD5 不是置换。相反,这看起来像一个循环和“尾巴”的集合。如果你迭代哈希 2^128 次,你必须以一个循环结束。