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

在Python中获取大文件的MD5哈希

窦成荫
2023-03-14
问题内容

我使用了hashlib(在Python 2.6 /
3.0中代替了md5),如果我打开一个文件并将其内容放入hashlib.md5()函数中,它就可以正常工作。

问题在于非常大的文件,其大小可能超过RAM大小。

如何在不将整个文件加载到内存的情况下获取文件的MD5哈希?


问题答案:

将文件拆分为8192字节的块(或128字节的其他倍数),然后使用连续将其送入MD5 update()

这利用了MD5具有128字节摘要块(8192为128×64)这一事实。由于您没有将整个文件读入内存,因此占用的内存不会超过8192字节。

在Python 3.8+中,您可以执行

import hashlib
with open("your_filename.txt", "rb") as f:
    file_hash = hashlib.md5()
    while chunk := f.read(8192):
        file_hash.update(chunk)
print(file_hash.digest())
print(file_hash.hexdigest())  # to get a printable str instead of bytes


 类似资料:
  • 2)获取第一部分的输出散列,将其与第二部分一起输入,并计算第二部分的散列 3)获得2)点的输出散列,将其与第三部分一起输入,并计算第三部分的散列 4)获得3)点的输出哈希值,将其与第四部分一起输入,并计算整个文件的哈希值。 我在google上搜索了很多,但没有找到类似的东西。我在MessageDigest中读到,通过使用方法update,我可以读取文件块,直到整个文件加载完毕,然后计算哈希值,但我

  • 问题内容: 如何编写此代码?我已经拥有了,我需要通过单击按钮将相应的md5哈希发送到服务器。 问题答案: 您可以使用crypto-js。 我也建议使用SHA256,而不是MD5。 要通过NPM安装crypto-js: 或者,您可以使用CDN并引用JS文件。 然后,要显示MD5和SHA256哈希,可以执行以下操作: 此处的工作示例JSFiddle 还有其他一些JS函数会生成哈希,如下所述。 http

  • 问题内容: 我试图在Go中获取文件的md5哈希,如下所示: 但是当我尝试通过以下方式获取哈希的’sum’(http://golang.org/pkg/hash/)的字符串时 当哈希应该是。当我尝试逐字节转换时,我得到的都是废话,只是字符不同。 我该如何获取哈希的字符串? 问题答案: 基本上,您已经获得了二进制数据,但是看起来您正在期待十六进制。看一下转换例程的hex包,尤其是。我不是一个程序员去,

  • 问题内容: 我正在从Web服务器下载整个目录。它可以正常工作,但是我无法弄清楚如何在下载之前获取文件大小以进行比较(如果服务器上是否已更新)。可以像从FTP服务器下载文件一样完成此操作吗? @Jon:感谢您的快速回答。它可以工作,但是Web服务器上的文件大小略小于下载文件的文件大小。 例子: 与CR / LF转换有关系吗? 问题答案: 我转载了您所看到的: 输出此: 我在这里做错了什么?os.st

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

  • 问题内容: 我尝试了几种方法来获取文件大小,但始终为零。 我在日志中: 问题答案: 使用而不是 +调用attr上的.fileSize()。 在Swift 2.0中,我们使用do try catch模式,如下所示: 在Swift 3.x / 4.0中: