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

如何在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校验和”一文 。它详细说明了几种方法可以有效地实现它。

祝你好运。



 类似资料:
  • 我正在使用iTextSharp从PDF文件中读取文本。然而,有些时候我不能提取文本,因为PDF文件只包含图像。我每天下载同样的PDF文件,我想看看PDF是否被修改过。如果无法获得文本和修改日期,那么MD5校验和是判断文件是否已更改的最可靠方法吗? 如果是的话,一些代码示例将会很感激,因为我对密码学没有太多的经验。

  • 问题内容: 我正在为大型视频文件创建MD5校验和。我当前正在使用代码: 但这会创建一个内存缓冲区,并且对于大型视频文件而言并不理想。Swift中是否有一种方法可以计算读取文件流的MD5校验和,从而使内存占用量最小? 问题答案: 您可以分块计算MD5校验和,例如在?中有没有一个MD5库不需要同时输入全部内容?。 这是使用Swift的可能实现(现已针对Swift 5更新) 需要自动释放池来释放所返回的

  • 接口说明 校验要上传的文件的每一个文件分片 API地址 POST /api/upload/1.0.0/md5 是否需要登录 否 请求字段说明 参数 类型 请求类型 是否必须 说明 fileName string form 是 数据标识 menuId string form 是 权限id,值为31 响应字段说明 参数 类型 说明 guid String 文件id md5_arr String 逗号分

  • 我在执行一个为给定文件计算MD5和SHA1校验和的方法时遇到一个问题。我的方法如下所示: SHA1: MD5: 在执行其中一个方法时,我得到一个IOException:进程无法访问文件“(PATHTOFILE),因为另一个进程正在使用它。 这是一个持续存在的问题,我无法计算PC上任何文件的校验和。我以本地管理员身份登录,而VS以管理员身份打开。这对于我尝试过的任何目录都是持久的,例如:C:\tem

  • 问题内容: 我正在寻找使用Java获取文件的MD5校验和。我真的很惊讶,但是我找不到任何能显示如何获取文件的MD5校验和的东西。 怎么做? 问题答案: 有一个输入流装饰器,因此你可以像往常一样在使用输入流的同时计算摘要,而不必对数据进行额外的传递。

  • 我想创建一个Ruby程序,它可以尽可能快地将文件从SD卡复制到硬盘上,但也可以创建源文件和目标文件的md5校验和,以确保数据的完整性。 我相信以块的形式读取文件并创建校验和会比

  • 我正在努力将现有的应用程序与File Picker集成。在我们现有的设置中,我们依赖md5校验和来确保数据完整性。据我所知,文件选择器在响应REST API的上传时没有提供任何md5(也没有使用JavaScript客户端)。 我们使用 S3 进行存储,据我所知,您可以在存储文件时向 S3 提供 md5 校验和,以便在数据似乎错误时 Amazon 可以验证并拒绝存储请求。 为了确保数据不会在网络中损

  • plz请参阅本页以查看Boost::CRC示例代码:http://www.boost.org/doc/libs/1_37_0/libs/crc/crc_example.cpp