Создайте хеш-значение с помощью пользовательского ключа и алгоритма palemd160
Вот код, который я пробовал в Python, но я получаю AttributeError
:
>>> import hmac
>>> import hashlib
>>> h=hashlib.new('ripemd160')
>>> hmac.new("bedford","Hello",hashlib.ripemd160)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'hashlib' has no attribute 'ripemd160'
Я искал документацию по Python и множество форумов, но не нашел ничего о palemd160 и Python.
3 ответа
ripemd160
не поддерживается напрямую hashlib
модуль:
>>> hashlib.algorithms
Кортеж, содержащий имена алгоритмов хеширования, гарантированно поддерживаемых этим модулем.
Модуль поддерживает следующее: md5, sha1, sha224, sha256, sha384, sha512
Так что вам нужно использовать new
конструктор снова или передайте ссылку на тот, который вы уже создали.
Это будет работать:
hmac.new("bedford", "Hello", lambda: hashlib.new('ripemd160'))
или же
h=hashlib.new('ripemd160')
hmac.new("bedford", "Hello", lambda: h)
Во-первых, ключ должен быть двоичным (Python3) -> b"bedford"
,
Затем сообщение должно быть закодировано, если это Unicode и т. Д. (Python3) -> codecs.encode("Hello")
Наконец, используйте lambda
функции:
import codecs
import hmac
import hashlib
h=hashlib.new('ripemd160')
hmac.new(b"bedford", codecs.encode("Hello"), lambda: h)