Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中读取文件并透明地检查其哈希值?_Python_Hash_Io_Sha256 - Fatal编程技术网

如何在Python中读取文件并透明地检查其哈希值?

如何在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

我需要从文件中读取内容。sha256摘要是先前计算的。为了确保文件不变,我想在读取时再次计算它的sha256摘要,并对照以前计算的值进行检查。如果值不匹配,则应通知我

蟒蛇式的方法是什么?我在下面发布了工作代码,但可能有更好的方法或现有的库可以做到这一点

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)