小编典典

在 Python 中获取大文件的 MD5 哈希

all

我使用了 hashlib(它在 Python 2.6/3.0 中替换了
md5),如果我打开一个文件并将其内容放入hashlib.md5()函数中,它工作得很好。

问题在于非常大的文件,它们的大小可能超过 RAM 大小。

如何在不将整个文件加载到内存的情况下获取文件的 MD5 哈希?


阅读 63

收藏
2022-07-02

共1个答案

小编典典

将文件分成 8192 字节的块(或其他 128 字节的倍数),并使用update().

这利用了 MD5 具有 128 字节的摘要块(8192 为 128×64)这一事实。由于您没有将整个文件读入内存,因此使用的内存不会超过 8192 字节。

在 Python 3.8+ 你可以做

import hashlib
with open("your_filename.txt", "rb") as f:
    file_hash = hashlib.md5()
    while chunk := f.read(8192):
        file_hash.update(chunk)
print(file_hash.digest())
print(file_hash.hexdigest())  # to get a printable str instead of bytes
2022-07-02