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