【问题标题】:Reasonable SHA1 hash length for a specific number of values特定数量值的合理 SHA1 哈希长度
【发布时间】:2016-09-07 01:10:51
【问题描述】:

我有一个大约的列表。 2500 张图片。对于每张图片,我都会创建一个 SHA1 哈希,我可以使用它来引用每张图片。我还使用哈希在列表中查找重复的图像。

默认情况下,SHA1 哈希的长度为 40 个字符。目前我将哈希值减少到前 7 个字符。 这是一个合理的长度还是碰撞概率太高?

【问题讨论】:

  • 什么概率是可以接受的?
  • 引用任何带有截断 (!!) 散列的东西从不是个好主意。相反,您应该生成唯一 ID(如升序数字)并使用它们。其他一切都会导致混乱和/或软件错误。甚至像 eclipse EGIT 提交历史哈希这样的用例也是......非常值得怀疑,尽管它们实际上并没有用于显示目的
  • 升序数字不会提供图像相同的信息。至于截断,每个位本质上是独立的,因此截断不会降低“随机性”,并且在需要子集(例如 16 字节 IV)时使用更大的哈希例程完成。

标签: encryption hash sha


【解决方案1】:

什么概率是可以接受的?

注意:一个 SHA1 哈希是 20 字节,你的意思是 40 位十六进制字符吗?

7 个十六进制字符将是 7*4 = 28 位。

table 来看,查看 32 位和 2900 个元素,IMO 不够好的碰撞概率为 0.01%。

为什么不只使用完整的散列和 20 字节而不是十六进制?

【讨论】:

  • 我想将哈希导出到 XML 文件,所以我需要将哈希作为字符串。
  • 在这种情况下,您可能需要更多的十六进制字符。如果有很多用户,你需要考虑到这一点。
猜你喜欢
  • 1970-01-01
  • 2016-05-29
  • 2015-08-22
  • 2016-10-27
  • 2011-10-27
  • 2020-01-20
  • 2015-07-07
  • 2017-10-30
  • 1970-01-01
相关资源
最近更新 更多