gpt4 book ai didi

python - 对大文件同时计算 MD5 和 SHA1

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:09 26 4
gpt4 key购买 nike

我正在编写一个 Python 程序来查找重复文件。计算 MD5 并比较文件大小并非 100% 万无一失,因为两个不同的文件可能具有相同的文件大小和 MD5(冲突概率 2^128)。

那时我在想,也许如果我在混合中添加另一个哈希,例如 SHA1 (2^160) 或 CRC32 (2^32),是否会大大提高识别唯一文件的能力,即比较 MD5 和 SHA1文件的唯一性?对于此二次检查,SHA1 还是 CRC32 更可取?

如果是这样,我如何在遍历一个非常大的文件的 1MB block 时同时计算 MD5 和 SHA1/CRC32,以避免读取大文件两次?这是我的 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 后,将在两个文件上运行 filecmp.cmp 作为最终检查。这显然是资源密集型且效率低下。

我正在使用 SQLite 来存储这些哈希值。我认为它比 Python 列表慢,但在处理数十亿个文件时不会遇到内存不足的问题。

最佳答案

您已经完成了最困难的部分。您只需将读取的 block 提供给另一个哈希器:

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()

关于python - 对大文件同时计算 MD5 和 SHA1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44803743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com