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

Атрибуты и методы хеш-объекта hashlib в Python

Атрибуты и методы возвращаемого хеш-объекта

В разделе рассмотрены константы, атрибуты и методы хеш-объекта, возвращаемого конструкторами функций алгоритмов хеширования и общим конструктором хеширования.

Содержание:

  • Размер хеша в байтах hash.digest_size,
  • Размер блока алгоритма хеширования hash.block_size,
  • Имя алгоритма хеширования hash.name,
  • Обновляет хеш-объект hash.update(),
  • Безопасный хеш в байтах hash.digest(),
  • Безопасный хеш как строка hash.hexdigest(),
  • Копия "клон" хеш-объекта hash.copy().
  • Методы хеш-объектов переменной длины алгоритмов shake_*:

Константы хеш-объектов.

hash.digest_size:

Константа hash.digest_size возвращает размер результирующего хеша в байтах.

>>> import hashlib
>>> bytes_str = 'test string'.encode()
>>> hashlib.sha224(bytes_str).digest_size
# 28

hash.block_size:

Константа hash.block_size возвращает размер внутреннего блока алгоритма хеширования в байтах.

>>> import hashlib
>>> bytes_str = 'test string'.encode()
>>> hashlib.sha224(bytes_str).block_size
# 64

Атрибуты хеш-объектов.

hash.name:

Атрибут hash.name каноническое имя алгоритма хеширования, возвращается в нижнем регистре и всегда подходит в качестве параметра имени алгоритма для передачи в конструктор hashlib.new() для создания другого хеша этого типа.

>>> import hashlib
>>> bytes_str = 'test string'.encode()
>>> hashlib.sha224(bytes_str).name
# 'sha224'

Методы хеш-объектов.

hash.update(data):

Метод hash.update() обновляет хеш-объект hash с помощью байтоподобного объекта data. Повторные вызовы hash.update(a), hash.update(b) эквивалентны одному вызову с объединением всех аргументов: hash.update(a+b).

Когда происходят хеш-обновления данных data размером более 2047 байт, при использовании хеш-алгоритмов, предоставляемых OpenSSL запускается Python GIL.

>>> import hashlib
>>> bytes_str1 = 'test'.encode()
>>> bytes_str2 = ' string'.encode()
>>> hsh = hashlib.sha1()
>>> hsh.update(bytes_str1)
>>> hsh.update(bytes_str2)
>>> hsh.hexdigest()
'661295c9cbf9d6b2f6428414504a8deed3020641'

hash.digest():

Метод hash.digest() возвращает безопасный хеш(дайджест) данных, переданных методу hash.update(). Это байтовый объект размером digest_size, который может содержать байты во всем диапазоне от 0 до 255.

>>> import hashlib
>>> bytes_str = 'test string'.encode()
>>> hashlib.sha1(bytes_str).digest()
b'f\x12\x95\xc9\xcb\xf9\xd6\xb2\xf6B\x84\x14PJ\x8d\xee\xd3\x02\x06A'

hash.hexdigest():

Метод hash.hexdigest() аналогичен методу hash.digest(), за исключением того, что безопасный хеш(дайджест) возвращается как строковый объект двойной длины, содержащий только шестнадцатеричные цифры.

Это может использоваться для безопасного обмена значениями в электронной почте или других недвоичных средах.

>>> import hashlib
>>> bytes_str = 'test string'.encode()
>>> hashlib.sha1(bytes_str).hexdigest()
'661295c9cbf9d6b2f6428414504a8deed3020641'

hash.copy():

Метод hash.copy() возвращает копию "клон" хеш-объекта, что может использоваться для эффективного вычисления хешей(дайджестов) данных, разделяющих общую начальную подстроку.

Методы хеш-объектов переменной длины алгоритмов shake_*.

Алгоритмы hashlib.shake_128() и hashlib.shake_256() предоставляют хеши(дайджесты) переменной длины безопасности с length_in_bits//2 до 128 или 256 бит. Таким образом, их методы хеша(дайджеста) требуют аргумент длины length.

Максимальная длина не ограничена алгоритмом SHAKE.

shake.digest(length):

Метод shake.digest() возвращает безопасный хеш(дайджест) данных, переданных методу hash.update(). Это байтовый объект размером length - целое число, который может содержать байты во всем диапазоне от 0 до 255.

>>> import hashlib
>>> bytes_str = 'test string'.encode()
>>> hashlib.shake_256(bytes_str).digest(15)
# b"\x98\x01b'\x0e\xe0\xcfi\xc2\xe3\xa0\xa0\xa8}\xd9"
>>> hashlib.shake_256(bytes_str).digest(20)
# b"\x98\x01b'\x0e\xe0\xcfi\xc2\xe3\xa0\xa0\xa8}\xd9=\xe6$^F"
>>> hashlib.shake_256(bytes_str).digest(25)
# b"\x98\x01b'\x0e\xe0\xcfi\xc2\xe3\xa0\xa0\xa8}\xd9=\xe6$^F\x99(?cJ"

shake.hexdigest(length):

Метод shake.hexdigest() аналогичен методу shake.digest(), за исключением того, что безопасный хеш(дайджест) возвращается как строковый объект двойной длины, содержащий только шестнадцатеричные цифры.

Это может использоваться для безопасного обмена значениями в электронной почте или других недвоичных средах.

>>> import hashlib
>>> bytes_str = 'test string'.encode()
>>> hashlib.shake_256(bytes_str).hexdigest(15)
# '980162270ee0cf69c2e3a0a0a87dd9'
>>> hashlib.shake_256(bytes_str).hexdigest(20)
# '980162270ee0cf69c2e3a0a0a87dd93de6245e46'
>>> hashlib.shake_256(bytes_str).hexdigest(25)
# '980162270ee0cf69c2e3a0a0a87dd93de6245e4699283f634a'