Сообщить об ошибке.

Функция file_digest() модуля hashlib в Python

Хеширования файла или файлового объекта в Python

Модуль hashlib предоставляет вспомогательную функцию для эффективного хеширования файла или файлового объекта.

import hashlib

# новое в Python 3.11
hashlib.file_digest(fileobj, digest, /)

Параметры:

  • fileobj - файлоподобный объект, открытый для чтения в двоичном режиме,
  • digest - имя хеш-алгоритма, хеш-конструктор или функция, которая возвращает хэш-объект.

Возвращаемое значение:

  • возвращает объект дайджеста.

Описание:

Функция file_digest() модуля hashlib возвращает объект дайджеста, который был обновлен содержимым файлового объекта.

Аргумент fileobj должен быть файлоподобным объектом, открытым для чтения в двоичном режиме. Он принимает файловые объекты из встроенной функции open(), экземпляры io.BytesIO, объекты SocketIO из Socket.makefile() и т.п.

Функция hashlib.file_digest() может обойти ввод-вывод Python и напрямую использовать файловый дескриптор из fileno(). Предполагается, что fileobj находится в неизвестном состоянии после возврата или вызова этой функции. Вызывающий должен закрыть fileobj.

Аргумент digest должен быть либо именем хеш-алгоритма в виде строки, либо хеш-конструктором, либо вызываемым, который возвращает хэш-объект.

Новое в Python 3.11.

Примеры хеширования файла.

Пример №1:

import io, hashlib, hmac

with open(hashlib.__file__, "rb") as fp:
    digest = hashlib.file_digest(fp, 'sha256')

>>> digest.hexdigest()  
# '...'

Пример №2:

>>> buf = io.BytesIO(b"somedata")
>>> mac1 = hmac.HMAC(b"key", digestmod=hashlib.sha512)
>>> digest = hashlib.file_digest(buf, lambda: mac1)
>>> digest is mac1
# True
>>> mac2 = hmac.HMAC(b"key", b"somedata", digestmod=hashlib.sha512)
>>> mac1.digest() == mac2.digest()
# True