.net - .NET 4 GUID 是如何生成的?

标签 .net .net-4.0 guid

我知道有很多问题here以及雷蒙德的出色(像往常一样)post 。然而,由于创建 GUID 的算法明显发生了变化,我发现很难获得任何最新信息。 MSDN似乎试图提供尽可能少的信息。

关于 .NET 4 中如何生成 GUID,我们了解多少?更改了什么?它如何影响安全性(“随机性”)和完整性(“唯一性”)?

我感兴趣的一个具体方面:在 v1 中,似乎不可能在一台计算机上再次生成相同的 GUID,因为涉及时间戳和计数器。在 v4 中,情况不再如此(有人告诉我),因此在单台计算机上获得相同 GUID 的机会......增加了

最佳答案

Windows 2000 Microsoft 使用版本 4 算法:

With Windows 2000, Microsoft switched to version 4 GUIDs, since embedding the MAC address was viewed as a security risk. 1

您也可以从 .NET 中生成的 GUID 中看到这一点(来自 Wikipedia ):

Version 4 UUIDs have the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx with any hexadecimal digits for x but only one of 8, 9, A, or B for y. e.g. f47ac10b-58cc-4372-a567-0e02b2c3d479.

版本 4 UUID 由 122 个有效位组成,提供 2^122 个不同的值,这是一个非常大的数字。给定一组 H 值,在以 50% 的概率找到第一次随机碰撞之前,我们必须选择的预期值数量可以计算如下(请参阅维基百科上的 Birthday Attack):

alt text

2^122 个不同值的结果(生日范围)约为 2,89e+18。这假设生成的值是随机分布的。显然,如果值分布不均匀,则可以更快地发现随机碰撞。有关更多详细信息,请参阅Random UUID probability of duplicates .

1事实上,Melissa 蠕虫病毒的作者可能是 tracked down由于使用版本 1 算法生成的 GUID。

关于.net - .NET 4 GUID 是如何生成的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2757910/

相关文章:

c# - 尽管有 TryCatch 事件,异常仍从工作流中逃逸

asp.net - 在 VB.Net 中将字符串转换为 Guid

guid - GUID 和 UUID 之间有什么区别吗?

java - 向 MQ 主题发布消息时是否可以使用内置关联?

c# - 任务并行库 (TPL) 是否处理竞争条件

c# - 在 .NET 4.0 中是否有更优雅的方法来执行此操作?

wpf - Datagrid 绑定(bind)文本框内存泄漏

java - 获取音频输出设备(扬声器、耳机)的 GUID

c# - 是否有跨平台方法将一个字符串编码为另一个不带任何空格的字符串,然后将其解码回来?

c# - 如何将特殊的 "xml"命名空间前缀与 XElement 一起使用