什么是GUID?

2016-12-28 10:11:06来源:作者:Dawei XU人点击

第七城市

最近看了下面几个文章,讲了GUID的一些相关知识,解释的很清楚,有兴趣的可以看看,我把大概要点翻译整理了一下。

GUID Guide, part one - Fabulous Adventures In Coding - Site Home - MSDN Blogs

GUID guide, part two - Fabulous Adventures In Coding - Site Home - MSDN Blogs

GUID guide, part three - Fabulous Adventures In Coding - Site Home - MSDN Blogs

GUID有如下的形式:

{xxxxxxxx-xxxx-1xxx-xxxx-xxxxxxxxxxxx} or

{xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx}

这个1和4表明了GUID的生成策略。

策略1使用了MAC地址和时间。

这种策略有2个缺点:

1)如果机器没有网卡,那么生成的GUID不保证是唯一的。

2)有可能生成一样的GUID。(比如2个GUID生成器同时尝试生成GUID,或者时间倒流)

使用1策略生成GUID有几个特点:

1)生成的GUID不是随机的,所以不能用来生成随机数。

2)有可能在特定机器上生成的GUID是单调递增的,这对于用这个GUID用来做数据库的primary key,并且数据库用primary key做index来说是个好消息。

3)可以通过GUID找到生成这个GUID的机器,有隐私问题。

4)他的子序列不具备全局唯一的特性。

策略4使用了随机数:

1)第四段的第一个永远是8,9,a或者b,这表明了版本信息,加上第三段的第一个4,一共有6个bit被reserve了,剩下的122个bit可以随机生成。

2)122个bit的完全随机数,概率上7万年后可能有2个随机数一样,对于一个特定的数,3百亿万亿年后有可能生成一个一样的。

总结:

1)GUID保证唯一,但是不保证随机,所以不要用GUID当作随机数来使用。

2)随机数算法生成的GUID不是密码学强度的随机数。

3)只有大家遵守GUID生成规则,GUID才是唯一的,GUID是一个生成规则,而不是一个安全机制。

4)GUID有内部的结构,至少有6个bit的保留字有特殊含义。

5)GUID允许顺序生成。

6)完整的GUID才有唯一性,子串不具备唯一性。

7)GUID可以用多种算法生成出来。

8)用随机方法生成的GUID在可以预见的将来有非常低的概率重复。

9)GUID可以泄漏生成的时间空间信息(比如机器),无论是策略1(直接获得)还是策略4(通过密码分析).

10)GUID在将来可能会用完全不同的算法来生成。

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台