Альтернатива функции 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
212 +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
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 255 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир