使用Python Cryptography库获取文件的MD5值
如何用cryptography库正确获取并输出文件的MD5值
你的代码核心问题是:没有保存finalize()方法返回的哈希结果,反而直接打印了Hash对象实例。hashes.Hash类的finalize()方法才会输出MD5哈希的二进制结果,你需要把这个结果赋值给变量,再转换成人类可读的十六进制格式。
修改后的代码
from cryptography.hazmat.primitives import hashes archivos = input() with open(archivos, "rb") as f: bfile = f.read() # 初始化MD5哈希对象 hash_obj = hashes.Hash(hashes.MD5()) # 传入文件二进制内容更新哈希 hash_obj.update(bfile) # 获取二进制哈希结果 hash_bytes = hash_obj.finalize() # 转换为十六进制字符串(标准MD5格式) md5_result = hash_bytes.hex() print(md5_result)
关键说明
finalize()是生成哈希值的关键方法,它返回的是二进制字节串,必须赋值给变量才能使用- 调用
hex()方法可以把二进制字节串转换成常见的32位十六进制MD5字符串,比如d41d8cd98f00b204e9800998ecf8427e
大文件优化方案
如果处理大文件,一次性读取整个文件会占用大量内存,建议分块读取更新哈希:
from cryptography.hazmat.primitives import hashes archivos = input() hash_obj = hashes.Hash(hashes.MD5()) with open(archivos, "rb") as f: # 每次读取4KB分块 chunk = f.read(4096) while chunk: hash_obj.update(chunk) chunk = f.read(4096) # 生成并转换哈希结果 hash_bytes = hash_obj.finalize() md5_result = hash_bytes.hex() print(md5_result)
内容的提问来源于stack exchange,提问作者Steven Sparkies
相关产品推荐
相关产品推荐

