关于您的错误以及代码中缺少的内容。 m是未为getmd5()函数定义的名称。 不冒犯,我知道您是一个初学者,但是您的代码无处不在。 让我们一个个地看一下您的问题:)首先,您没有正确使用hashlib.md5.hexdigest()方法。 请找到有关hashlib函数Python Doc Library的说明。 为提供的字符串返回MD5的正确方法是执行以下操作:
>>> import hashlib
>>> hashlib.md5("filename.exe").hexdigest()
'2a53375ff139d9837e93a38a279d63e5'
但是,您这里有一个更大的问题。 您正在根据文件名字符串计算MD5,实际上MD5是根据文件内容计算的。 您将需要基本读取文件内容并将其通过MD5传输。 我的下一个示例效率不是很高,但类似这样:
>>> import hashlib
>>> hashlib.md5(open('filename.exe','rb').read()).hexdigest()
'd41d8cd98f00b204e9800998ecf8427e'
如您所见,第二个MD5哈希与第一个完全不同。 这样做的原因是我们要推送文件的内容,而不仅仅是文件名。 一个简单的解决方案可能是这样的:
# Import hashlib library (md5 method is part of it)
import hashlib
# File to check
file_name = 'filename.exe'
# Correct original md5 goes here
original_md5 = '5d41402abc4b2a76b9719d911017c592'
# Open,close, read file and calculate MD5 on its contents
with open(file_name) as file_to_check:
# read contents of the file
data = file_to_check.read()
# pipe contents of the file through
md5_returned = hashlib.md5(data).hexdigest()
# Finally compare original MD5 with freshly calculated
if original_md5 == md5_returned:
print "MD5 verified."
else:
print "MD5 verification failed!."
请查看“ Python:生成文件的MD5校验和”一文,其中详细说明了如何有效实现该文件的几种方法。
祝你好运。