GUID幕后故事

时间:2008-09-17 20:13:02

标签: guid

我想知道,GUID的创建是什么。我不是指用什么来创建特定语言的GUID(SQL Server中的NewID(),C#中的Guid.NewGuid()),我的意思是当你调用那些方法/函数时,他们做了什么来做GUID?

6 个答案:

答案 0 :(得分:3)

此外,RFC 4122(维基百科文章中引用)描述了如何构建GUID。

答案 1 :(得分:2)

GUID的详细信息,包括用于生成它们的算法,在wikipedia中有所描述。

答案 2 :(得分:1)

简而言之,它并不复杂。 GUID (或UUID)版本4(当前)部分随机数,简单明了(128位中的122位是随机的, rest用于存储版本和修订版本)。诀窍在于这个数字的可能值是如此之多,以至于在大多数实际目的中命中概率

答案 3 :(得分:0)

哈希函数。它很复杂。

http://en.wikipedia.org/wiki/GUID#Algorithm知道的比我多。

答案 4 :(得分:0)

请注意,您在互联网上阅读的关于GUID创建的大量内容可能是错误的,或者至少对您的特定平台来说已经过时了。

我曾经单步执行过一堆Windows代码来解决关于在WinXP上创建GUID的争论。不幸的是,事实证明我错了(即我失去了争论),但拉里奥斯特曼也是如此,所以我觉得它稍微好一点。

答案 5 :(得分:0)

有五种官方方式可以生成GUID(当然还有更多非官方方法)。

  • 版本1是基于时间的GUID,通常使用用于计算GUID的主要网卡的MAC地址。由于隐私问题,通常不会使用此功能,但我确实认为2005年及以后的Microsoft SQL Server使用此版本(声称版本为14)的修改版本,以创建对数据库中的id有用的顺序GUID,以避免分数数据块(NewSequentialId())。

  • 版本2是DCE安全版。我从来没有找到过这种GUID,但我也没有对POSIX进行过多次工作,并且版本2 GUID和POSIX之间似乎存在连接。

  • 版本3是“基于名称”的版本,这意味着您可以获取文本并在给定命名空间的情况下创建该GUID表示形式。版本3使用MD5散列算法。另见第5版。

  • 版本4基本上是随机数类型GUID。随机数是sequrity级别,而不仅仅是你的平均随机数生成器。这是当今世界通常使用的版本。根据Microsoft文档,C#Guid.NewGuid()使用此版本。此外,在MS SQL Server(NewId())中生成uniqueidentifier的常规函数​​生成版本4 GUID。

  • 版本5与版本3类似,但使用SHA-3散列算法。 extended guid C# project使用版本5算法。

对于GUID制作的一个实现,我建议查看扩展的guid项目。正如许多人所指出的,RFC 4122详细描述了所有五种算法的工作原理。但是,并不能保证所有实现都是正确的。