Есть ли способ, с помощью которого мы могли бы определить символы, из которых состоит значение хеша? - PullRequest
1 голос
/ 14 марта 2019

Например, я хочу, чтобы значение хеша, которое я получаю с помощью функции python blake2b, имело только (acdefghjklmnpqrstuvwxyz2345679)

1 Ответ

0 голосов
/ 19 марта 2019

Хеш - битовая строка. Вы можете кодировать эту битовую строку, используя определенный набор печатных символов, если хотите. Шестнадцатеричный (с использованием 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), а затем преобразовать это целое число в строку, используя выбранные вами цифры .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...