【发布时间】:2020-09-06 08:14:21
【问题描述】:
我有一个奇怪的问题,我来自流文件的 md5 哈希与 md5sum 不匹配。奇怪的是,如果我读入文件并将其写入第二个文件,python md5 和md5sum second_file.txt 同意。这是哈希码:
import hashlib
import sys
file_hash = hashlib.md5()
with open(sys.argv[1], 'r') as f, open(sys.argv[2], 'w') as w:
while True:
c = f.read(1)
w.write(c)
file_hash.update(c.encode(encoding='utf-8'))
if c == '':
# end of file
break
print(file_hash.hexdigest())
这两个文件都在UTF-8 中并在 docker 容器中运行。我在这里有点不知所措。有什么想法吗?
【问题讨论】:
-
您没有显示流式传输位......所以不太可能有人能够明确回答。 ..但猜测它是一个编码问题(即流文件通常是字节......但你正在以“r”模式而不是“rb”打开文件......也许尝试用“rb”打开文件并且不要这样做编码位
-
已更新并正在尝试
-
猜测您打开的文件已经是 utf8 并且在您写入后它与流匹配,因为 python 会将文件保存为 utf8 ...但我不知道该文件是使用 utf8 流式传输的
-
在第二个文件上调用
hash.py脚本将产生与md5sum一致的哈希值。只是原始文件给了我不同的结果。 -
@JoranBeasley 用
rb读取文件解决了这个问题。谢谢您的帮助!如果你想留下答案,我会选择它
标签: python linux file hash md5