Python给出错误的md5校验和
我正在用Python制作一个下载管理器,目的是自动验证文件的md5校验和……问题是,Python给出的md5值是错误的,我用一个第三方的md5验证软件对比过。
我使用的是hashlib库来检查md5……这是我用来计算md5校验和的代码。对于某些文件,它能正确计算md5,但对于其他文件,它的结果完全错误……
x= sys.path[0]
x= x + '\\' + file_name
print 'file successfully saved to path', x
file_ref=open(x,'rb').read()
hashlib.md5(file_ref).hexdigest()
print 'MD5 of file is:',hashlib.md5(file_ref).hexdigest()
网站上原始文件的md5值:e557fa76ed485fd10e8476377ad5be95
Python给出的md5值: cb3b2227733d3344dba15e5e39d04f43
md5验证软件给出的md5值: e557fa76ed485fd10e8476377ad5be95
请帮帮我 :/
1 个回答
2
看到有些文件的情况是对的,但有些文件却不对,你可以检查一下你的路径。这是我用来计算md5值的代码:
def hashsum(path, hex=True, hash_type=hashlib.md5):
hashinst = hash_type()
with open(path, 'rb') as f:
for chunk in iter(lambda: f.read(hashinst.block_size * 128), b''):
hashinst.update(chunk)
return hashinst.hexdigest() if hex else hashinst.digest()
你可以用这个来进行比较:
myhash = hashsum(cfile)
sproc = subprocess.Popen(['md5', cfile], stdout=subprocess.PIPE)
syshash = sproc.communicate()[0].split()[0]
print myhash
print syshash
print 'Hash idetntical' if myhash == syshash else 'Hash check fail'
其中 cfile
是文件的路径。我觉得你的路径可能不对。我猜你是在用Windows系统,所以 sys.path[0]
不是获取当前目录的正确方法。