使用Python 2.7,以下代码可以计算文件内容的MD5十六进制摘要。
(编辑:实际上并不是这样,正如其他答案所示,我之前的想法是错误的。)
import hashlib
def md5sum(filename):
f = open(filename, mode='rb')
d = hashlib.md5()
for buf in f.read(128):
d.update(buf)
return d.hexdigest()
如果我使用Python3运行该代码,它会引发TypeError异常:
d.update(buf)
TypeError: object supporting the buffer API required
我发现只需将代码更改为以下内容,就可以在python2和python3中运行:
def md5sum(filename):
f = open(filename, mode='r')
d = hashlib.md5()
for buf in f.read(128):
d.update(buf.encode())
return d.hexdigest()
现在我仍然想知道为什么原来的代码停止工作。似乎当使用二进制模式修饰符打开文件时,它返回整数而不是编码为字节的字符串(我这么说是因为type(buf)返回int)。这种行为有解释吗?