3 回答

TA貢獻1876條經(jīng)驗 獲得超5個贊
當然,對于隨機生成的令牌,始終存在生成重復令牌的可能性。有一些標準,例如UUID(不包括 v4)使用其他方法來嘗試“保證”每個標識符的唯一性。這些方法并沒有真正消除碰撞的可能性,它們只是改變了故障模式。例如,UUID1 依賴于MAC 地址的唯一性,這本身就是一個問題。
如果你不受令牌大小的限制,你可以很容易地選擇足夠多的比特,使得碰撞的概率變得如此之小,以至于與無數(shù)其他故障模式(例如程序員錯誤、宇宙射線、a大規(guī)模全球滅絕事件等)。
非常近似地,如果你有一個真正的 N 位隨機密鑰長度,你可以在有 50% 的機會看到?jīng)_突之前生成 2^(N/2) 個密鑰。有關更通用的公式,請參閱UUID#Collisions的維基百科頁面。

TA貢獻1783條經(jīng)驗 獲得超4個贊
對于 crypto/rand,不能保證單個隨機數(shù)會多次出現(xiàn)。但是,發(fā)生這種情況的可能性非常低,并且對于您的用例來說可能已經(jīng)足夠好了。在許多情況下,UUID 就足夠了。如果您對重復 UUID 的概率感到好奇,請參閱維基百科。
如果您真的需要真正的唯一性,您可能希望將隨機數(shù)與映射結合起來記錄它們,其中數(shù)字作為鍵,值是“無關”。在記錄數(shù)字時,可以檢測到重復項,并可以請求新的隨機數(shù)以防萬一。但是,這種方法可能會帶來新的挑戰(zhàn),具體取決于您的設置,因為數(shù)字現(xiàn)在保存在本身不安全的內(nèi)存中。如果您的用例無法確定系統(tǒng)生命周期內(nèi)所需的機密數(shù)量,那么它在復雜性方面也將具有挑戰(zhàn)性。
對我來說,這實際上歸結為一個問題,即您用于信息查找的系統(tǒng)標識符是否真的是秘密,或者您只想要在系統(tǒng)中出現(xiàn)之前難以預測的唯一標識符。也許您可以詳細說明您的用例以闡明您的要求。
- 3 回答
- 0 關注
- 362 瀏覽
添加回答
舉報