Альтернатива функции CryptoJS.enc.Hex.parse для Python? Здраствуйте.
Имеется код на JS (с библиотекой crypto-js):let binPubKey = CryptoJS.enc.Hex.parse(publicKey);

let hash = CryptoJS.SHA3(binPubKey, {
outputLength: 256
});
console.log(hash.toString());
Соответственно, в конце я получаю дайджест SHA3-256.
Попытка повторить аналогичную функцию на Пайтон - приводит к тому что я получаю совсем другой хеш.sha3_hash = hashlib.sha3_256()
sha3_hash.update(binascii.unhexlify(pubkey))
print(sha3_hash.hexdigest())
Входящая строка: 48656c6c6f20576f726c6421
И вот результат:python: d0e47486bbf4c16acac26f8b653592973c1362909f90262877089f9c8a4536af
js: 3ea2f1d0abf3fc66cf29eebb70cbd4e7fe762ef8a09bcc06c8edf641230afec0
Я так понимаю, вся магия в CryptoJS.enc.Hex.parse(publicKey)?
Или может кто-то знает как правильно использовать аналог для Пайтона?

21 Авг 2019 в 07:11
244 +1
0
Ответы
1

Для того чтобы получить аналогичный результат на Python, вам нужно использовать библиотеку pycryptodome. Вот как вы можете изменить ваш код:

from Crypto.Hash import keccak
pubkey = "48656c6c6f20576f726c6421"
bin_pubkey = bytes.fromhex(pubkey)
keccak_hash = keccak.new(digest_bits=256)
keccak_hash.update(bin_pubkey)
print(keccak_hash.hexdigest())

Этот код должен дать вам правильный хеш, аналогичный результату на JavaScript. Обратите внимание, что мы используем keccak вместо sha3 на Python, потому что это более правильный способ вычисления SHA3-256.

20 Апр 2024 в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир