我正在尝试比较本地和远程文件的MD5哈希值(将相同的文件复制/粘贴到我的wamp“www”目录中),但我不明白为什么“校验和”不对应...
以下是校验和代码:
#-*- coding: utf-8 -*-
import hashlib
import requests
def md5Checksum(filePath,url):
if url==None:
with open(filePath, 'rb') as fh:
m = hashlib.md5()
while True:
data = fh.read(8192)
if not data:
break
m.update(data)
return m.hexdigest()
else:
r = requests.get(url, stream=True)
m = hashlib.md5()
for line in r.iter_lines():
m.update(line)
return m.hexdigest()
print "checksum_local :",md5Checksum("projectg715gb.pak",None)
print "checksum_remote :",md5Checksum(None,"http://testpangya.ddns.net/projectg715gb.pak")
我很惊讶地得到了这个输出:
checksum_local : 9d33806fdebcb91c3d7bfee7cfbe4ad7
checksum_remote : a13aaeb99eb020a0bc8247685c274e7d
"projectg715gb.pak"的大小为14.7Mb
但如果我尝试一个文本文件(大小为1Kb):
print "checksum_local :",md5Checksum("toto.txt",None)
print "checksum_remote :",md5Checksum(None,"http://testpangya.ddns.net/toto.txt")
然后它就可以工作了,我得到了以下输出:
checksum_local : f71dbe52628a3f83a77ab494817525c6
checksum_remote : f71dbe52628a3f83a77ab494817525c6
我还不太了解比较MD5哈希值,所以请大家多多包涵^^' 我可能会犯一些错误,我不明白为什么它不能处理大文件,如果有人能给我一些提示,那就太好了!
无论如何感谢你的阅读和帮助!
fh.read(8192)
更新为fh.readline()
即可。请注意保持翻译后的内容与原文意思一致,并尽量使其通俗易懂。 - Nick Chapman.iter_lines()
在 URL 版本中会丢弃数据中的任何换行符。使用.iter_content()
按块读取数据,就像文件版本一样。 - jasonharper