我想知道,GUID的创建是什么。我不是指用什么来创建特定语言的GUID(SQL Server中的NewID(),C#中的Guid.NewGuid()),我的意思是当你调用那些方法/函数时,他们做了什么来做GUID?
答案 0 :(得分:3)
此外,RFC 4122(维基百科文章中引用)描述了如何构建GUID。
答案 1 :(得分:2)
GUID的详细信息,包括用于生成它们的算法,在wikipedia中有所描述。
答案 2 :(得分:1)
简而言之,它并不复杂。 GUID (或UUID)版本4(当前)是部分随机数,简单明了(128位中的122位是随机的, rest用于存储版本和修订版本)。诀窍在于这个数字的可能值是如此之多,以至于在大多数实际目的中命中概率,零。
答案 3 :(得分:0)
哈希函数。它很复杂。
答案 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详细描述了所有五种算法的工作原理。但是,并不能保证所有实现都是正确的。