Python hashlib: вычислить SHA-256 большого файла

Категория: Python · Язык: Python · Обновлено:

Чтобы получить SHA-256 большого файла, читайте его блоками и обновляйте hashlib.sha256. Такой способ не загружает весь файл в память и подходит для сверки контрольных сумм архивов. ????? ??????????? ?????????? ???????? ?????? ??????? ? ????????? ?????? ? ??????? ?????.

Рабочий пример

Python
import hashlib
from pathlib import Path
data128 = b"archive data"
path128 = Path("/tmp/checksum-demo.bin")
path128.write_bytes(data128)
digest128 = hashlib.sha256()
with path128.open("rb") as source:
    for chunk128 in iter(lambda: source.read(64 * 1024), b""):
        digest128.update(chunk128)
print(digest128.hexdigest())  # 5d7b5313d81195e4caf90aa52719f240eb93d50d2b38288a85ef6724af80c97a

Хеш вычисляется по исходным байтам, поэтому файл открывают в бинарном режиме. Размер блока влияет только на I/O и память, но не на результат digest.

Частый вопрос

Как проверить SHA-256 в Linux?

Используйте sha256sum файл и сравните полный hexadecimal digest с результатом hashlib. Не сравнивайте только начало строки.