【问题标题】:Quick 64-bit deterministic hash in pythonpython中的快速64位确定性哈希
【发布时间】:2016-04-11 02:23:43
【问题描述】:

我之前一直在使用adler32 生成一个 32 位的文本块哈希(然后我将其用作文件名,以保存该文本的处理版本的缓存)。例如

  hashed_file_name = adler32(pragraph.encode())

我希望增加哈希大小,以减少冲突的可能性 [即两个不同的文本块获得相同的哈希码,考虑到我有大约 1000 万个文本块,我认为在大约 0.2% 的情况下会产生冲突 - 即 1000 万 / 2^32]

我的问题是,产生至少 64 位哈希的最快哈希生成器是什么? sha1 会是一个有效的选项[产生 160 位哈希]?即

  hashed_file_name  = hashlib.sha1(pragraph.encode()).hexdigest()

虽然这对我来说有点过头了,但其他版本/选项在处理时间方面是否更有效?

【问题讨论】:

  • 看看PyHash library。它包括 MurmurHash 3(具有 32 位和 128 位变体)和 Google 的 CityHash(具有 64 位和 128 位变体)。
  • 这是一个不错的列表。 en.wikipedia.org/wiki/…
  • 为什么不用python内置的hash()函数呢?它在我的 64 位机器上生成了 64 位数字。我认为它非常快。
  • hash() 在 32 位 Python 上是 32 位,看起来,虽然这是一个可能会改变的实现细节。
  • @kindall hash() 将为每个程序运行产生不同的值。对于检查文件不是很有用。

标签: python hash checksum


【解决方案1】:

MD5 是 128 位的,并且不添加依赖项。尽管您比我更了解您的要求,但它可能已经足够快了。另一个想法是在排列数据后应用您的 32 位哈希两次,例如通过 XOR 或旋转。

【讨论】:

    猜你喜欢
    • 2017-12-14
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 2013-09-12
    • 2014-03-26
    • 2011-12-14
    相关资源
    最近更新 更多