我想随机生成唯一的 64 位密钥(伪)来识别我们模型中的对象。我需要密钥在系统的所有用户中尽可能唯一(将任何 N 个密钥一起使用时发生冲突的可能性降到最低)。
现在通常的 GUID 是不可能的,因为我们的数据很便宜:)。因为我预计在同一上下文中需要使用超过 100 万个密钥,所以我认为 64 位就足够了(冲突概率约为 10e-7)。
作为旁注,我还需要一个方案将这些密钥的元组折叠/散列成一个 64 位密钥,该密钥也需要良好分布/唯一。
由于无论如何我都需要一个良好的(分布良好的)散列函数,是否可以将 GUID 对折(也许以某种方式考虑 GUID 中的固定位)?还是使用本地RNG更好?我将如何播种 RNG 以最大化跨空间/生成时间的独特性?我需要多强的RNG?
我并不是特别在寻找效率(在一定程度上),但我真的很想确保概率能够兑现他们的承诺!