代码之家  ›  专栏  ›  技术社区  ›  ebann

在大文件上同时计算MD5和SHA1

  •  2
  • ebann  · 技术社区  · 7 年前

    然后我想知道,如果我在混合中添加另一个散列,例如SHA1(2^160)或CRC32(2^32),这是否会大大提高识别唯一文件的能力,即比较文件的MD5和SHA1的唯一性?该二次检查是否首选SHA1或CRC32?

    如果是这样,我如何同时计算MD5和SHA1/CRC32,同时迭代一个非常大的文件的1MB块,以避免读取大文件两次?这是我为MD5准备的:

    def md5(fname):
        hash_md5 = hashlib.md5()
        with open(fname, "rb") as f:
            for chunk in iter(lambda: f.read(2 ** 20), b""):
                hash_md5.update(chunk)
        return hash_md5.hexdigest()
    

    目前,在检查相同的MD5之后,我的代码将运行 作为最终检查。这显然是资源密集型的,效率不高。

    1 回复  |  直到 7 年前
        1
  •  4
  •   Maciek    7 年前

    def calculate_hashes(fname):
        hash_md5 = hashlib.md5()
        hash_sha1 = hashlib.sha1()
        with open(fname, "rb") as f:
            for chunk in iter(lambda: f.read(2 ** 20), b""):
                hash_md5.update(chunk)
                hash_sha1.update(chunk)
        return hash_md5.hexdigest(), hash_sha1.hexdigest()