在 Java 中使用 UUID 的最高有效位发生冲突的可能性

2022-08-31 05:41:03

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


答案 1

根据文档,静态方法生成类型 4 UUID。UUID.randomUUID()

这意味着六位用于某些类型信息,其余122位是随机分配的。

六个非随机位分布,其中四个在UUID最显著的一半,两个在最低有效一半。因此,UUID最重要的一半包含60位随机性,这意味着您平均需要生成2 ^ 30个UUID才能获得冲突(相比之下,完整UUID需要2 ^ 61)。

所以我想说你是相当安全的。然而,请注意,正如Carl Seleborg所提到的,对于其他类型的UUID来说,这绝对不是真的。

顺便说一句,通过使用UUID的最低有效一半(或者只是使用SecureRandom生成随机长线),你会稍微好一些。


答案 2

Raymond Chen有一篇非常出色的博客文章:

GUID 是全局唯一的,但 GUID 的子字符串不是