猿问

GUID碰撞可能吗?

我正在使用SQL Server 2000中的一个数据库,该数据库为每个使用与其绑定的应用程序的用户使用GUID。不知何故,两个用户最终获得了相同的GUID。我知道微软使用一种算法来生成随机GUID,该GUID引起碰撞的可能性极低,但是碰撞仍然可能吗?


幕布斯7119047
浏览 304回答 3
3回答

精慕HU

基本上没有 我认为有人在破坏您的数据库。根据使用的GUID版本,该值是唯一的(对于版本1 GUID而言),或者是唯一且不可预测的(对于版本4 GUID而言)。SQL Server的NEWID()函数的实现似乎使用128位随机数,因此不会发生冲突。要使碰撞几率达到1%,您需要生成大约2,600,000,000,000,000,000个 GUID。

HUX布斯

首先,让我们看一下两个GUID发生碰撞的机会。正如其他答案所指出的,由于生日悖论,它不是2 ^ 128(10 ^ 38)中的1 ,这意味着对于两个GUID发生冲突的可能性为50%,实际上是2 ^ 64中的1(10 ^ 19)小得多。但是,这仍然是一个非常大的数目,因此,假设您使用的是合理数量的GUID,发生碰撞的可能性很低。还请注意,GUID不包含很多人似乎相信的时间戳或MAC地址。对于v1 GUID确实如此,但是现在使用v4 GUID,它只是一个伪随机数,这意味着发生碰撞的可能性更高,因为它们不再是时间和机器所独有的。因此,基本上答案是肯定的,可能发生碰撞。但是它们极不可能。
随时随地看视频慕课网APP

相关分类

Java
我要回答