我不想重新发明可能已存在的模块。但是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
答案 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兼容。