GUID 和 SHA1 哈希值之间哪个更容易发生碰撞?

3
是否在GUID(128位)或GUID的SHA1哈希(160位)之间发生冲突的机会更大?我的意见是使用GUID的可能性更小(即使有32位较少),因为它具有一些特殊机制来确保它几乎是独一无二的(例如:时间戳)。请注意:我已经知道一个GUID极不可能与另一个GUID碰撞,请勿再就此进行讨论。

哈希冲突是不可避免的。你所能做的就是尝试使用一个哈希,它的键空间足够大,以至于在你的使用场景中发生冲突的可能性很小。 - Marc B
1个回答

9

很简单:如果两个 GUID 相同(即每个 GUID 发生碰撞),它们的哈希值也相同(我们有一个不是“SHA1 碰撞”但对于我们的应用程序来说已经足够糟糕的“碰撞”)。此外,可能会出现哈希冲突(即不同 GUID 具有相同的 SHA1 值)。

只能在哈希 GUIDs 时添加碰撞。


同意。GUID是如何生成的,SHA1哈希中有多少位也并不重要。你最后一句话已经说得很清楚了。 - hatchet - done with SOverflow
我们是否确定两个不同的128位GUID生成SHA1碰撞的非零概率?如果是这样,你知道那个概率是多少吗? - mbeckish
根据生日悖论,在将所有唯一的 GUID 哈希到一个 256 位的哈希空间中,会有大约超过 25% 的几率出现冲突。如果只有 160 位,冲突的几率将会更高。 - hatchet - done with SOverflow
@mbeckish - 你是正确的...这就是为什么我说“大致如此”。在最好的情况下,哈希GUID会与仅生成GUID有相同的碰撞机会。但是通过将GUID哈希到有限的哈希空间中的新值,您可以创建另一个可能发生碰撞的机会,其中生日问题将成为一个问题。但像你说的那样,这可能取决于哈希函数如何哈希Guid。 - hatchet - done with SOverflow
@ mbeckish - 由于良好的哈希函数的目标之一是在输入发生小变化时产生非常不同的结果,因此我认为生日问题可能适用于这里。 不过我不确定。 - hatchet - done with SOverflow
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接