使用Java中UUID的最高有效位的碰撞的可能性

问题:

如果我使用Long uuid = UUID.randomUUID().getMostSignificantBits()获得碰撞的可能性有多大。它切断最不重要的位,所以有可能遇到碰撞,对吧?

回答:

根据the documentation,静态方法UUID.randomUUID()生成4类UUID。
这意味着对于某些类型的信息使用6位,剩余的122位是随机分配的。
六个非随机位在UUID的最重要的一半中分布四个,最不重要的一半分配两个。因此,您的UUID中最重要的一半包含60位的随机性,这意味着您平均需要生成2 ^ 30个UUID以获得冲突(相对于完整的UUID为2 ^ 61)。
所以我会说你很安全。请注意,对于其他类型的UUID,绝对不会如Carl Seleborg所说。
顺便提一句,你可以通过使用最不重要的一半的UUID(或者只是使用SecureRandom生成一个随机的长度)来稍微好一些。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Likelihood of collision using most significant bits of a UUID in Java

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 1 = 1