在 Java 中使用 UUID 的最高有效位发生冲突的可能性
如果我使用碰撞的可能性有多大。它切断了最不重要的位,所以你有可能遇到碰撞,对吧?Long uuid = UUID.randomUUID().getMostSignificantBits()
如果我使用碰撞的可能性有多大。它切断了最不重要的位,所以你有可能遇到碰撞,对吧?Long uuid = UUID.randomUUID().getMostSignificantBits()
根据文档,静态方法生成类型 4 UUID。UUID.randomUUID()
这意味着六位用于某些类型信息,其余122位是随机分配的。
六个非随机位分布,其中四个在UUID最显著的一半,两个在最低有效一半。因此,UUID最重要的一半包含60位随机性,这意味着您平均需要生成2 ^ 30个UUID才能获得冲突(相比之下,完整UUID需要2 ^ 61)。
所以我想说你是相当安全的。然而,请注意,正如Carl Seleborg所提到的,对于其他类型的UUID来说,这绝对不是真的。
顺便说一句,通过使用UUID的最低有效一半(或者只是使用SecureRandom生成随机长线),你会稍微好一些。