>>> from env_helper import info; info()
页面更新时间: 2024-01-19 21:51:54
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-17-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

2.5. 如何在Python中计算文件的MD5哈希

MD5是一种消息摘要算法,用于从可变输入数据中创建唯一的固定大小值。 MD5通常用于检查文件在传输过程中是否损坏(在这种情况下,哈希值称为校验和)。 文件中的任何更改都将导致不同的MD5哈希值。

以下Python程序计算给定文件的MD5哈希值。计算出的128位MD5哈希将转换为可读的十六进制形式。

2.5.1. Python程序生成文件的MD5哈希值

>>> import hashlib
>>>
>>> filename = './img2_2.png'
>>> with open(filename,"rb") as f:
>>>     file_bytes = f.read() # read file as bytes
>>>     readable_hash = hashlib.md5(file_bytes).hexdigest();
>>>     print(readable_hash)
d3526b4ecf394d12a7cf2e40ebe992d4

以下是另外一种用法,使用了 update() 函数,进行了简单封装:

>>> def out_md5(src):
>>>     m = hashlib.md5()
>>>     m.update(src)
>>>     return m.hexdigest()
>>> out_md5(open(filename, 'rb').read())
'd3526b4ecf394d12a7cf2e40ebe992d4'

2.5.2. Python程序生成大文件的MD5哈希值

请注意,由于我们在计算MD5哈希值之前将整个文件读取到内存中,因此上述程序对于大型输入文件可能会失败。 以下python程序是经过改进的版本,能够处理大文件

>>> import hashlib
>>>
>>> filename =  './img2_2.png'
>>> md5_hash = hashlib.md5()
>>> with open(filename,"rb") as f:
>>>     # Read and update hash in chunks of 4K
>>>     for byte_block in iter(lambda: f.read(4096),b""):
>>>         md5_hash.update(byte_block)
>>>     print(md5_hash.hexdigest())
d3526b4ecf394d12a7cf2e40ebe992d4