只是好奇,但匹配Guid的概率是多少?猜測(匹配)Guid的概率是多少?
從SQL Server假設一個GUID:5AC7E650-CFC3-4534-803C-E7E5BBE29B3D
它是一個階乘?:(36 * 32)! =(1152)!
討論 = d
只是好奇,但匹配Guid的概率是多少?猜測(匹配)Guid的概率是多少?
從SQL Server假設一個GUID:5AC7E650-CFC3-4534-803C-E7E5BBE29B3D
它是一個階乘?:(36 * 32)! =(1152)!
討論 = d
目前尚不清楚你在問什麼。我看到兩種方式來解釋你的問題。
給定一個GUID g
,有人猜測它的概率是多少?爲簡單起見,假設所有128位的GUID都可用。那麼猜測g
的概率是2^-128
。這很小。讓我們圍繞這個做一些直覺。假設我們的攻擊者每秒可以產生10億個GUID。要有50%的機會猜測g
,我們的攻擊者必須生成2^127個GUID。以每秒十億的速度,需要5391448762278159040348年才能生成2^127個GUID。
我們正在生成guid集合。碰撞的可能性是什麼?也就是說,我們生成兩個具有相同值的guid的可能性是多少?這是生日悖論。如果隨機生成一個n個GUID序列,那麼至少有一次碰撞的概率大約爲p(n) = 1 - exp(-n^2/2 * 2^128)
(這是生日問題,可能的生日數是2^128)。
n p(n) 2^30 1.69e-21 2^40 1.77e-15 2^50 1.86e-10 2^60 1.95e-03
所以,即使你產生2^60點的GUID,發生碰撞的機率是非常小的。如果每秒能夠生成10億個GUID,那麼碰撞機率爲1.95e-03仍需要36年時間。
它爲1 /(唯一號碼可能與給定的UID長度的數量)。在上面的例子中,我們看到了16個字節或128位。 2^128,所以匹配的概率是1/2^128。
可能的GUID(128位的值)的數是2^128或3.4×10^38 - 每立方毫米地球的整個體積的約2萬億美元。
換句話說,種類很低。
(來源對於地球體積參考:維基百科)
取決於GUID生成算法的類型。目前的算法使用124個隨機比特,所以概率在2^124中爲1。
對於較早的算法(即使用時間和MAC地址)的概率高得多。
有許多事情錯了你的計算。 首先,36 * 32意味着任何字母數字字符都可以是GUID的一部分。不是這種情況;只允許使用HEX字符。
其次,對於獨特的GUID的數目的計算是 數字有效性狀的(16:0-9,AF)^長度GUID的(32個字符)
因此,我們有16^32 ==> 2 ^(4^32)==> 2^128
猜測的機率任一項GUID爲1/2^128。
這取決於有多少的GUID生成。這與統計中的生日問題類似。見維基百科和http://betterexplained.com/articles/understanding-the-birthday-paradox/(這一個特別具有GUID示例)
一般而言,用於通過N個可能的GUID生成M個的GUID碰撞的概率是1 - (1- (1/N))^C(M,2)
其中C(M,2)
是「M選擇2」
讓我們認爲通過...如果GUID中只有兩個字符,它會是(2 * 36)! ? 36 * 36聽起來更有可能......爲三個字母做出解釋,然後看看答案看起來是否合理。 – 2011-02-02 18:38:33
你爲什麼認爲這是一個因子。只有當你不能重複價值時,情況纔會如此。 – 2011-02-02 18:42:16
我敢打賭,只有其中一個領域(例如E7E5BBE29B3D)是隨機的。其他則是固定的(例如通過主機或服務器實例)或基於當前時間。這嚴重降低了可能性。 – arnaud576875 2011-02-02 18:42:23