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

标签 python macos md5

我正在编写一个脚本,需要检查 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/

相关文章:

python - Azure Python 函数日期时间表达式

python - TeamCity 不接受数组作为参数值

python - 上传文件休息

swift - 最新版本的照片库是否已弃用 fetchAssetCollections 方法?

ios - 哪个线程调用 CFRunLoopStop(CFRunLoopGetCurrent())?

git - 最短哈希? MD5/安全算法。第一个字符,git

java - 性能暴力哈希 C++ Java

Python 模块安装失败,因为 gcc 命令缺少标志...gcc 命令具有

macos - 在 Swift 中逐行读取文件/URL

ApacheDS - 无法验证非明文密码的质量