我需要通过散列一些数据来生成全局唯一id。
一方面,我可以使用时间戳和网络地址的组合,这是唯一的,因为每台计算机同时只能创建一个id。但由于这些数据太长,我需要对其进行哈希处理,因此可能会发生冲突。(顺便说一句,如果时间戳不够精确,我们也可以输入一个随机数。)
另一方面,我可以使用一个随机数并对其进行散列。这难道不应该带来与第一种方法完全相同的哈希冲突概率吗?这很有趣,因为这种方法会更快,更容易实现。
使用唯一数据而不是随机数据时,在哈希冲突方面有区别吗?(顺便说一句,我不会使用标准中描述的真实GUID,但我的GUID只有64位长。但这不应该影响问题。)
为什么要对随机数进行散列?哈希的设计目的是将输入统一映射到密钥空间,但PRNG已经为您提供了结果的统一映射。你所做的只是创造更多的工作。