Альтернатива функции 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)? Или может кто-то знает как правильно использовать аналог для Пайтона?
Этот код должен дать вам правильный хеш, аналогичный результату на JavaScript. Обратите внимание, что мы используем keccak вместо sha3 на Python, потому что это более правильный способ вычисления SHA3-256.
Для того чтобы получить аналогичный результат на Python, вам нужно использовать библиотеку pycryptodome. Вот как вы можете изменить ваш код:
from Crypto.Hash import keccakpubkey = "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.