python中的md5输出与命令行不同(即使在二进制模式下)

2024-09-30 20:28:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个脚本,它需要检查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,那么我会再次得到不同的结果。在


Tags: 文件数据path脚本datasizewindows二进制
2条回答

哦,这是一个用户错误。我重写了shell中的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

请尝试我的代码,看看它是否适合您。如果没有,你能上传一个你的python脚本的gist和一个示例文件让我试试吗?在

相关问题 更多 >