在比较以不同方式创建的 GUID 时,是否有更大的冲突机会

本文关键字:是否 机会 冲突 GUID 比较 创建 方式 | 更新日期: 2023-09-27 18:36:22

如果我使用构造函数(例如,Guid myGuid = new Guid("myguid"))创建 GUID,它是否更有可能与使用 Guid.NewGuid() 创建的 GUID 发生冲突,而不是两个使用 Guid.NewGuid() 创建的 GUID 发生冲突?

编辑:

更具体的问题:在比较基于哈希的 GUID 与"Guid.NewGuid()"时,是否有更大的冲突机会?

在比较以不同方式创建的 GUID 时,是否有更大的冲突机会

真正的答案是这取决于。 Guid.NewGuid根据此处描述的几个因素创建它。如果您从NewGuid创建它的字符串表示形式并将其放入构造函数中,那么机会与调用NewGuid两次相同。

话虽如此,并非所有 GUID 都是平等的。 不同的系统有不同的生成方式,它们可能不像 .NET 实现那样抗冲突。 没有什么可说的,我无法创建一个可以解析为不基于任何规则的 GUID 的字符串。 此 GUID 发生冲突的可能性要大得多。

如果"myguid"值是由合法的 GUID 生成器创建的,那么这是一个平等的机会。

使用 Windows 上最新的 GUID 生成器(它几乎是一个安全的随机数生成器),猜测下一个数字并将其传递给new Guid("myguid")的可能性几乎是不可能的。

这与较旧的生成器不同,当 GUID 可以追溯到创建它的硬件时。那时,你可以对生成 GUID 的过程进行反向工程,并尝试故意传递冲突的 GUID。