使用Python计算文件的快速,非密码安全哈希值

时间:2018-12-26 00:13:00

标签: python hash

关于文件的计算哈希的堆栈溢出问题,有一些很好的讨论,包括使用Python(12,{{ 3}})。他们最终得到了如下所示的解决方案(从#3进行了轻轻编辑):

def md5_file(path, size):
    m = hashlib.md5()
    with open(path, 'rb') as f:
        b = f.read(size)
        while len(b) > 0:
            m.update(b)
            b = f.read(size)
    return m.digest()

如果您不需要哈希函数在密码上是安全的(我不需要),那么可以使用3(似乎也称为pyhash),如pyfasthash所述。不幸的是,pyfasthash的哈希类缺少上面使用的update方法。我没有太多运气想出其他办法。 Python-C混合代码超出了我。我只是像这样将整个文件读入内存:

with open(path, 'rb') as afile:
    return hasher(afile.read())

这种方法的缺点是:

  1. 文件必须容纳在内存中
  2. 比较慢。根据{{​​3}},您希望一次加载到内存中的文件量足够小,以避免页面交换(在海报计算机上约为64KiB)。

有什么方法可以更快地计算文件的哈希值?

0 个答案:

没有答案