我知道您有一个十六进制字符串,并对它执行两次SHA256,然后字节交换最终的十六进制字符串。此代码的目标是通过串联两个事务来查找Merkle根。我想进一步了解后台发生的事情。您到底要解码和编码什么?
导入hashlib
transaction_hex =“ 93a05cac6ae03dd55172534c53be0738a50257bb3be69fff2c7595d677ad53666e344634584d07b8d8bc017680f342bc6aad523da31bc2b19e1ec0921078e872”
transaction_bin = transaction_hex.decode('hex')
hash = hashlib.sha256(hashlib.sha256(transaction_bin).digest())。digest()
hash.encode('hex_codec') '38805219c8ac7e9a96416d706dc1d8f638b12f46b94dfd1362b5d16cf62e68ff'
hash [::-1] .encode('hex_codec') 'ff682ef66cd1b56213fd4db9462fb138f6d8c16d706d41969a7eacc819528038'
答案 0 :(得分:0)
header_hex
是小写ASCII字符的常规字符串,带有decode()
参数的'hex'
方法将其更改为(二进制)字符串(或Python中的bytes
对象) 3)带有字节0x93 0xa0
等。在C中,在这种情况下,它将是长度为64的无符号字符数组。
然后将长度为64的此数组/字节字符串用SHA256进行哈希处理,并再次对其结果(大小为32的另一个二进制字符串)进行哈希处理。因此hash
是一个长度为32的字符串,或者是Python 3中该长度的字节对象。然后encode('hex_codec')
是encode('hex')
的同义词(在Python 2中);在Python 3中,它取代了它(因此,这段代码可能在两种版本中都可以使用)。它再次输出一个ASCII(低十六进制)字符串,用两个字符串(其十六进制表示形式)替换每个原始字节(只是一个小整数)。因此,最后一位反转双哈希并将其输出为十六进制,以一种我通常称为“小写十六进制ASCII”的形式。