我正在使用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
md5由python给出:cb3b2227733d3344dba15e5e39d04f43
由md5验证者给出的md5:e557fa76ed485fd10e8476377ad5be95请帮助:/
答案 0 :(得分: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
是文件的路径。我想你的道路是错的。我猜测窗口sys.path[0]
不是获取当前目录的正确方法。