如何在Python中读取文件并透明地检查其哈希值?
我需要从文件中读取内容。sha256摘要是先前计算的。为了确保文件不变,我想在读取时再次计算它的sha256摘要,并对照以前计算的值进行检查。如果值不匹配,则应通知我 蟒蛇式的方法是什么?我在下面发布了工作代码,但可能有更好的方法或现有的库可以做到这一点如何在Python中读取文件并透明地检查其哈希值?,python,hash,io,sha256,Python,Hash,Io,Sha256,我需要从文件中读取内容。sha256摘要是先前计算的。为了确保文件不变,我想在读取时再次计算它的sha256摘要,并对照以前计算的值进行检查。如果值不匹配,则应通知我 蟒蛇式的方法是什么?我在下面发布了工作代码,但可能有更好的方法或现有的库可以做到这一点 import hashlib import io class Sha256File: def __init__(self, fo, hashvalue): self._fo = fo self.hash
import hashlib
import io
class Sha256File:
def __init__(self, fo, hashvalue):
self._fo = fo
self.hashvalue = hashvalue
def __enter__(self):
self._m = hashlib.sha256()
return self
def read(self, size=-1):
b = self._fo.read(size)
self._m.update(b)
return b
def __iter__(self):
return self
def __next__(self):
b = self.read()
if b == b'':
raise StopIteration
return b
def __exit__(self, exc_type, exc_value, traceback):
if exc_type is None:
assert self._m.hexdigest() == self.hashvalue
self._fo.close()
hashvalue = '5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03'
with Sha256File(io.BytesIO(b'hello\n'), hashvalue) as f:
for line in f:
print(line)