【问题标题】:Is there more chance having collisions between GUID's or a SHA1 hashes of GUID's?GUID 或 GUID 的 SHA1 散列之间是否有更多的机会发生冲突?
【发布时间】:2013-01-29 10:58:24
【问题描述】:

GUID's(128 位)或GUID's(160 位)的 SHA1 哈希之间是否有更多发生冲突的机会?我的观点是GUID 的机会更少(即使少了 32 位),因为它有一些特殊的机制来确保它(几乎,因为不能保证)是唯一的(例如:时间戳)

注意:我已经知道GUID 不太可能与另一个GUID 发生冲突,请不要再讨论这个问题。

【问题讨论】:

  • 哈希冲突是不可避免的。您所能做的就是尝试使用具有足够大的密钥空间的哈希,以便在您的使用场景中不太可能发生冲突。

标签: algorithm guid sha1 hash-collision


【解决方案1】:

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

只有在散列 GUID 时才能添加冲突。

【讨论】:

  • 同意。甚至如何制作 GUID 或 SHA1 哈希中有多少位都无关紧要。你的最后一句话说明了一切。
  • 我们是否确定是否存在两个不同的 128 位 GUID 产生 SHA1 冲突的非零概率?如果有,你知道这个概率是多少吗?
  • @mbeckish - 根据生日问题,将所有唯一 GUID 散列到 256 位散列空间中的碰撞概率大约为 >25%。只有 160 位的机会会更高。
  • @hatchet - 生日问题仅适用于将 160 位 SHA1 哈希随机分配给小于 160 位的输入,对吗?我们知道 SHA1 是否属于这种情况?对于所有可能的散列函数来说,这当然不是真的。例如,对于
  • @mbeckish - 你是对的......这就是我说“大致”的原因。充其量,散列 GUID 与仅生成 GUID 发生冲突的机会相同。但是通过在有限的散列空间中将 GUID 散列为新值,您可以创造额外的碰撞机会,其中生日问题将成为问题。但就像你说的,这可能取决于散列函数如何散列 Guid。
猜你喜欢
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多