Python哈希模块用一种方法获取二进制摘要密钥

时间:2015-10-07 06:52:20

标签: python hash hashlib

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

The first value we need is     :(ab+ac+bc)+d(a+b+c)= ab+ac+ad+bc+bd+cd  (Take A=ab+ac+bd)
then the second value we need is:(abc)     +d(A)    = abc+abd+acd+bcd(B=abc)
then the third value we need is : (0)      +d(B)    = abcd(Let's take 0 as C)
then the fourth value we need is:          +d(C)    = 0

现在我刚创建了一个导入的# 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

1 个答案:

答案 0 :(得分:2)

不,标准库中的任何地方都没有现成的函数来计算文件对象的摘要。您已经展示的代码是使用Python执行此操作的最佳方式。

计算文件哈希值并不是一个经常足以专门用于函数的任务。此外,还有许多不同类型的流,您希望以稍微不同的方式处理数据;例如,当您从URL下载数据时,您可能希望将计算哈希值与同时将数据写入文件进行组合。因此,用于处理哈希的当前API与其获得的通用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兼容。