当前位置: 首页 > 面试题库 >

如何在Python中计算文件的MD5校验和?

柳涵映
2023-03-14
问题内容

我已经在Python中编写了一个代码,用于检查文件中的MD5,并确保MD5与原始文件匹配。

这是我开发的:

#Defines filename
filename = "file.exe"

#Gets MD5 from file 
def getmd5(filename):
    return m.hexdigest()

md5 = dict()

for fname in filename:
    md5[fname] = getmd5(fname)

#If statement for alerting the user whether the checksum passed or failed

if md5 == '>md5 will go here<': 
    print("MD5 Checksum passed. You may now close this window")
    input ("press enter")
else:
    print("MD5 Checksum failed. Incorrect MD5 in file 'filename'. Please download a    new copy")
    input("press enter") 
exit

但是,每当我运行代码时,都会出现以下错误:

Traceback (most recent call last):
File "C:\Users\Username\md5check.py", line 13, in <module>
 md5[fname] = getmd5(fname)
File "C:\Users\Username\md5check.py, line 9, in getmd5
  return m.hexdigest()
NameError: global name 'm' is not defined

我的代码中缺少什么吗?

谢谢。


问题答案:

关于您的错误以及代码中缺少的内容。m是未为getmd5()功能定义的名称。

不冒犯,我知道您是一个初学者,但是您的代码无处不在。让我们一一看待您的问题:)

首先,您没有hashlib.md5.hexdigest()正确使用方法。请参考Python Doc
Library中
有关hashlib函数的说明。为提供的
字符串 返回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校验和”一文 。它详细说明了几种方法可以有效地实现它。

祝你好运。



 类似资料: