1

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

请帮忙 :/

4

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

于 2013-02-22T08:49:35.010 回答