3 回答

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

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