我正在编写一个脚本,需要检查 OSX 和 Windows 上文件的 md5 总和,作为健全性检查,我将结果与命令行 md5
的结果进行了比较。工具,但我得到不同的结果。这是代码
def MD5File(self, f, block_size=2**20):
md5 = hashlib.md5()
while True:
data = f.read(block_size)
if not data:
break
md5.update(data)
return md5.hexdigest()
with open(path, 'rb') as f:
print MD5File(path)
我做了以二进制模式打开文件的明显操作,但它仍然给出了不同的结果。我尝试了不同的缓冲数据的方法,包括一次性读取所有数据,并且 python 脚本始终返回相同的内容,但这与 md5 命令不同。
那么还有其他明显的我做错的事情吗,或者是运行 md5 filename
的情况吗?实际上并没有达到您的预期?当我直接读取文件的二进制文件时,不应该有任何换行问题。如果我运行cat filename | md5
然后我再次得到不同的结果。
最佳答案
以下内容对我来说正确:
In [1]: with file("play.py") as f:
...: data = f.read()
...: from hashlib import md5
...: print(md5(data).hexdigest())
...:
07030b37de71f3ad9ef2398b4f0c3a3e
In [2]:
bensonk@angua ~ $ md5 play.py
MD5 (play.py) = 07030b37de71f3ad9ef2398b4f0c3a3e
请尝试我的代码,看看它是否适合您。如果没有,您可以上传一个 gist你的 python 脚本和示例文件供我尝试?
关于python - python 中的 md5 输出与命令行不同(即使在二进制模式下),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5141275/