Хеш - битовая строка. Вы можете кодировать эту битовую строку, используя определенный набор печатных символов, если хотите. Шестнадцатеричный (с использованием 0123456789abcdef
) является наиболее распространенным способом, но если вы хотите другой набор символов, вы можете выбрать их вместо этого.
Чтобы закодировать значение хеша в шестнадцатеричном формате, предполагая, что оно есть в виде необработанной строки, такой как значение, возвращаемое методом digest
в стандартном модуле hashlib
, используйте hash.hex()
в Python 3 и hash.encode('hex')
в Python 2. Модуль hashlib
имеет метод hexdigest
, который возвращает эту кодировку напрямую.
Если вы хотите закодировать значение с использованием букв и цифр в одном регистре без риска путаницы в 0/O
и 1/I
, существует стандарт для этого, называемый Base32 . Base32 доступен на Python в модуле base64
. Стандартное кодирование использует только верхний регистр, но вы можете перевести на нижний регистр, если хотите. Подушки Base32 с =
, но вы можете удалить их для хранения.
import base64, hashlib
hash = hashlib.new('SHA256', b'input').digest()
b32_hash = base64.b32encode(hash).lower().rstrip(b'=')
Если вы действительно хотите этот конкретный набор из 30 символов, вы можете преобразовать шестнадцатеричное представление в целое число, используя int(….hexdigest(), 16)
, а затем преобразовать это целое число в строку, используя выбранные вами цифры .