Python提供了错误的md5校验和

时间:2013-02-22 08:44:03

标签: python md5 hashlib

我正在使用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

请帮助:/

1 个答案:

答案 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]不是获取当前目录的正确方法。