我不想重新发明可能已经存在的模块。但是programiz上有一个很好的示例,它解释了如何获取SHA-1消息摘要

# Python rogram to find the SHA-1 message digest of a file

# import hashlib module
import hashlib

def hash_file(filename):
   """"This function returns the SHA-1 hash
   of the file passed into it"""

   # make a hash object
   h = hashlib.sha1()

   # open file for reading in binary mode
   with open(filename,'rb') as file:

       # loop till the end of the file
       chunk = 0
       while chunk != b'':
           # read only 1024 bytes at a time
           chunk = file.read(1024)
           h.update(chunk)

   # return the hex representation of digest
   return h.hexdigest()

message = hash_file("track1.mp3")
print(message)


现在,我刚刚创建了一个导入的.py,但是想知道hashlib模块或另一个维护良好的模块中是否已经存在这种方法?

所以我可以去

import some_hashlib_module
print some_hashlib_module.get_binary_SH1_digest("File of interest")

最佳答案

不,标准库中的任何地方都没有现成的函数来计算文件对象的摘要。您显示的代码是使用Python做到这一点的最佳方法。

计算文件哈希值并不是一项经常要花很多功夫才能完成的任务。另外,您还可以在许多不同类型的流中对数据进行稍微不同的处理。例如,当从URL下载数据时,您可能希望将计算散列与同时将数据写入文件结合起来。因此,当前用于处理哈希值的API与其通用。设置哈希对象,重复输入数据,提取哈希。

您使用的函数可以编写得更紧凑一些,并支持多种哈希算法:

import hashlib

def file_hash_hexhdigest(fname, hash='sha1', buffer=4096):
    hash = hashlib.new(hash)
    with open(fname, "rb") as f:
        for chunk in iter(lambda: f.read(buffer), b""):
            hash.update(chunk)
    return hash.hexdigest()


上面的代码与Python 2和Python 3兼容。

关于python - 带有一种获取二进制摘要 key 的方法的Python哈希模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32985546/

10-16 14:33