gpt4 book ai didi

python 3.7 : Hashing a binary file

转载 作者:太空宇宙 更新时间:2023-11-04 04:15:02 25 4
gpt4 key购买 nike

我正在尝试为给定文件生成哈希,在这种情况下,哈希函数进入二进制文件(.tgz 文件),然后生成错误。有什么方法可以读取二进制文件并生成它的 md5 哈希值吗?

我收到的错误是:

buffer = buffer.decode('UTF-8') UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbc in position 10: invalid start byte

源代码是:

import hashlib

def HashFile(filename, readBlockSize = 4096):
hash = hashlib.md5()

with open(filename, 'rb') as fileHandle:

while True:
buffer = fileHandle.read(readBlockSize)

if not buffer:
break

buffer = buffer.decode('UTF-8')
hash.update(hashlib.md5(buffer).hexdigest())

return

我在 Linux 上使用 Python 3.7。

最佳答案

您可以在此处进行一些调整。

您不需要对 .read() 返回的字节进行解码,因为 md5() 在第一行中需要 bytes放置,而不是 str:

>>> import hashlib
>>> h = hashlib.md5(open('dump.rdb', 'rb').read()).hexdigest()
>>> h
'9a7bf9d3fd725e8b26eee3c31025b18e'

这意味着您可以从函数中删除行 buffer = buffer.decode('UTF-8')

如果您想使用该函数的结果,您还需要返回哈希

最后,您需要将原始字节 block 传递给 .update(),而不是它的十六进制摘要(它是一个 str);查看文档的 example .

综合起来:

def hash_file(filename: str, blocksize: int = 4096) -> str:
hsh = hashlib.md5()
with open(filename, "rb") as f:
while True:
buf = f.read(blocksize)
if not buf:
break
hsh.update(buf)
return hsh.hexdigest()

(以上是使用 Redis .rdb 转储二进制文件的示例。)

关于 python 3.7 : Hashing a binary file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55614741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com