【发布时间】:2019-04-23 01:12:51
【问题描述】:
我是 Python 新手,所以我决定制作一个小项目,从服务器下载一些文件。一切正常,我决定通过生成 MD5 并与服务器的 MD5 进行比较来检查下载文件的完整性。问题是,它并不总是有效。有时对于某些文件,它能够生成正确的 MD5,但大多数(大约 80%)生成的 MD5 与服务器的不匹配。
我尝试了许多不同的示例来生成 MD5,但所有示例都产生相同的结果。
注意:我正在读取 64kB 块中的文件,因为我的资源有限(在 Raspberry Pi 上运行脚本),所以我认为这样做是个好主意。是的,我已经尝试过一次加载所有文件——结果相同。
def md5_check(self, file_path, original_md5):
calculated_md5 = hashlib.md5()
with open(file_path, "rb") as file:
while True:
chunk = file.read(65536) #The downloaded file will be read in 64kB chunks
if not chunk: break
calculated_md5.update(chunk)
calculated_md5 = calculated_md5.hexdigest()
【问题讨论】:
-
用于 py2.7.15 win64 的 WFM。我怀疑您的下载正在丢失数据或其他东西。你能给个minimal reproducible example吗?
-
作为记录,我将
hexdigest()结果与md5sum实用程序计算的结果进行比较,结果匹配。 -
您确定下载的文件实际上已经完成下载/没有损坏吗?
-
你的代码没问题,你确定你比较的哈希值真的正确吗?
-
在文件上运行
md5sum以找出它真正的 MD5 是什么。然后你就会知道哪一部分坏了——MD5代码,下载代码,还是服务器MD5。