我想生成唯一的64位密鑰(僞) - 隨機地標識我們模型中的對象。在系統的所有用戶中,我需要儘可能保持唯一的密鑰(將任何N個密鑰一起使用時的衝突概率降至最低)。如何生成唯一的64位密鑰
因爲我們的數據便宜,所以現在通常的GUID已經不存在了。因爲我不認爲需要在同一個環境中使用超過100萬個密鑰,所以我認爲64位就足夠了(碰撞概率約爲10e-7)。作爲一個側面說明,我還需要一個方案來將這些密鑰的元組摺疊/散列成一個單一的64位密鑰,該密鑰也需要分佈/獨特。
因爲無論如何我需要一個很好的(分佈良好的)散列函數,所以將一個GUID摺疊成一半(也許會以某種方式佔用GUID中的固定位)可以嗎?還是使用本地RNG更好?我將如何播種RNG以最大限度地提高跨代空間/時間的獨特性? 強我需要一個RNG嗎?
我並不是特別期待效率(達到某一點),但我真的很希望確保這些概率符合他們的承諾!
我們目前有一個分佈32位密鑰範圍的服務器來保證唯一性,但使用這種簡單的計數器正是我試圖避免的(單點故障,連接問題)。 – fparadis2
您可以使用以前的ID代替計數器。這樣你可以有很多獨立的「計數器」,因爲每個MD5都給你兩個。 – Rotsor
或有不同來源的前綴。一旦你使用哈希值,選擇是無止境的。例如,每臺機器都可以散列它的MAC地址加一個計數器等,等等更新了答案。 –