最近看了下面幾個文章,講了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在將來可能會用完全不同的算法來生成。