В разделе рассмотрены константы, атрибуты и методы хеш-объекта, возвращаемого конструкторами функций алгоритмов хеширования и общим конструктором хеширования.
hash.digest_size
,hash.block_size
,hash.name
,hash.update()
,hash.digest()
,hash.hexdigest()
,hash.copy()
.shake_*
:hash.digest()
,hash.hexdigest()
.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'