Python给出错误的md5校验和

1 投票
1 回答
2669 浏览
提问于 2025-04-17 16:44

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

撰写回答