fra*_*axa 4 python hash checksum md5
我正在尝试比较本地和远程文件 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")
Run Code Online (Sandbox Code Playgroud)
我很惊讶得到这个输出:
checksum_local : 9d33806fdebcb91c3d7bfee7cfbe4ad7
checksum_remote : a13aaeb99eb020a0bc8247685c274e7d
Run Code Online (Sandbox Code Playgroud)
“projectg715gb.pak”的大小为14.7Mb
但是,如果我尝试使用文本文件(大小为 1Kb):
print "checksum_local :",md5Checksum("toto.txt",None)
print "checksum_remote :",md5Checksum(None,"http://testpangya.ddns.net/toto.txt")
Run Code Online (Sandbox Code Playgroud)
然后它工作oO我得到这个输出:
checksum_local : f71dbe52628a3f83a77ab494817525c6
checksum_remote : f71dbe52628a3f83a77ab494817525c6
Run Code Online (Sandbox Code Playgroud)
我是比较 MD5 哈希的新手,所以请善待 ^^' 我可能犯了一些大错误,我不明白为什么它不能处理大文件,如果有人能给我一个提示,那就太好了!
不过感谢您的阅读和帮助!
所以感谢帮助者,这是最终的代码工作:
#-*- coding: utf-8 -*-
import hashlib
import requests
def md5Checksum(filePath,url):
m = hashlib.md5()
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)
for data in r.iter_content(8192):
m.update(data)
return m.hexdigest()
print "checksum_local :",md5Checksum("projectg715gb.pak",None)
print "checksum_remote :",md5Checksum(None,"http://testpangya.ddns.net/projectg715gb.pak")
Run Code Online (Sandbox Code Playgroud)