Я понимаю, что у вас есть шестнадцатеричная строка, и вы дважды выполняете SHA256, а затем меняете местами байты в последней шестнадцатеричной строке. Цель этого кода — найти корень Меркла путем объединения двух транзакций. Я хотел бы немного больше понять, что происходит на заднем плане. Что именно вы декодируете и кодируете?
импортировать хеш-библиотеку
transaction_hex = "93a05cac6ae03dd55172534c53be0738a50257bb3be69fff2c7595d677ad53666e344634584d07b8d8bc017680f342bc6aad523da31bc2b19e1ec0921078e872"
transaction_bin = transaction_hex.decode('hex')
хеш = hashlib.sha256(hashlib.sha256(transaction_bin).дайджест()).дайджест()
hash.encode('hex_codec') '38805219c8ac7e9a96416d706dc1d8f638b12f46b94dfd1362b5d16cf62e68ff'
hash[::-1].encode('hex_codec') 'ff682ef66cd1b56213fd4db9462fb138f6d8c16d706d41969a7eacc819528038'
.digest()
, и это действительно выводит двоичную строку,encode('hex_codec')
делает ее строкой ASCII (для потребления человеком). 14.07.2018bin
, которая работает с целыми числами (а байт — это просто небольшое целое число). 14.07.2018[bin(i) for i in hash]
, если вы хотите видеть все байты в виде битовых строк (снова в печатной форме). 14.07.2018