Hash md5哈希冲突。

Hash md5哈希冲突。,hash,md5,collision,hash-collision,Hash,Md5,Collision,Hash Collision,如果从1到X计数,其中X是第一个与前一个数字发生md5冲突的数字,那么X是什么数字 我想知道我是否使用md5来表示序列号,在发生冲突之前,我希望能够枚举多少个单元。我相信没有人对此进行过测试 考虑到如果你有一个简单的递增数字,你不需要对它进行散列,它实际上取决于你输入的大小。一个完美的散列函数在每个(输入长度/散列长度)散列中都有冲突。 如果您的输入很小,那么碰撞是不太可能的,到目前为止,只有一个单块碰撞。理论上,您可以预期X在264左右发生碰撞。对于输出为n位的散列函数,当累积了大约2n/2个

如果从1到X计数,其中X是第一个与前一个数字发生md5冲突的数字,那么X是什么数字


我想知道我是否使用md5来表示序列号,在发生冲突之前,我希望能够枚举多少个单元。

我相信没有人对此进行过测试


考虑到如果你有一个简单的递增数字,你不需要对它进行散列,它实际上取决于你输入的大小。一个完美的散列函数在每个(输入长度/散列长度)散列中都有冲突。
如果您的输入很小,那么碰撞是不太可能的,到目前为止,只有一个单块碰撞。

理论上,您可以预期X在264左右发生碰撞。对于输出为n位的散列函数,当累积了大约2n/2个输出时,会出现第一次冲突(无论您如何选择输入;顺序整数值在这方面没有什么特殊)


当然,MD5已经被证明不是一个好的散列函数。此外,2n/2只是一个平均值。那你为什么不试试呢?采取MD5实现,散列序列号,看看是否发生冲突。一个基本的MD5实现应该能够每秒散列几百万个值,并且,使用一个合理的硬盘,您可以累积数十亿个输出,对它们进行排序,并查看是否存在冲突。

我无法回答您的问题,但您要找的是一个冲突。UUID序列号对于数以百万计的产品来说是唯一的,但您可能需要检查数据库以减少微小的冲突机会。

据我所知,md5中2^32(整数大小)没有已知的冲突。

我意识到这是一个老问题,但我偶然发现了它,找到了一个更好的方法,我想我会和你分享

你的序数N有一个上限,所以让我们利用它。假设N<232≈ 4.3*1010. 现在,每当您需要一个新的标识符时,您只需选择一个随机的32位数字R,并将其与R xor N(连接前的零填充)连接起来。这将产生一个看起来随机唯一的64位标识符,您可以用16个十六进制数字来表示它

这种方法完全防止了冲突,因为两个标识符恰好具有相同的随机分量,因此必然具有不同的异或分量


额外功能:您可以将这样一个64位标识符拆分为两个32位数字,并将其异或以恢复原始序号。

如果有更好的替代方案(尚未被打破),为什么您现在还想使用MD5?如果您担心冲突,请使用其中一个SHA函数。事实上,即使你不关心碰撞,也可以选择SHA。它们在任何明显的方面都不比MD5差,但在几个方面比MD5好。为什么要对序列号进行散列?它们的用途是什么?用例是我有一套产品,我需要在上面盖上ID代码。客户不希望ID代码以“1”、“2”开头,他们希望类似于“Serial#c4ca4238a0b923820dcc509a6f75849b”的代码,如果有点长的话,它看起来是正式的。我担心的是知道碰撞可能会发生,我想确保在产品运行的生命周期内不太可能发生碰撞,这可能是数百万次,如果不是1亿次(他们的希望)。MD5散列对我来说很简单,因为它就在php中,我不需要想出一些简单的方法。使用MD5来生成一个序列是件坏事,它是一个散列函数,它可能会有冲突,因为从设计上看,没有任何东西可以让你看到散列的唯一性。我不是专家,但你应该考虑使用加密函数为你的目的。我想要一个序列号/ ID号码,不显示总的单位数量的用户查看。如果您的ID需要扩展到32位整数以上,它也将是未来的证明。虽然在达到这个数量之前你需要切分很多,但是使用UUID而不是自动递增的ID也会使切分变得更容易。。。∞], 无穷大是高端。很明显,这个系列中的第一个数字与前面的一个数字相冲突。我只想知道是哪个数字,以及我是否有可能达到那个高度。我可以做到。但为了论证起见,让我们假设你是对的,X是2^64。我写这个程序的目的是检查所有以前的散列都是非平凡的磁盘抖动。可能是SSD。@John:要在一大组值中搜索冲突,诀窍是按升序排序。然后冲突显示为两个相同的连续值。合并排序只意味着少量的线性过程;不涉及抖动。不过,2^64还是相当多。而且你的2^n/2数字在统计上并不准确,尽管直觉上似乎是正确的。你不需要存储或检查2^64的值来检测周期,有一个巧妙的算法,使用O(0)空间要求。请参阅此帖子:@alexis您链接的算法用于检测md5中的循环,其中结果作为下一次迭代的数据输入。这不适用于此问题,因为即使在第一次碰撞时,也没有固有的循环。您有来源吗?