【问题标题】:I was wondering if someone could explain to me .decode and .encode in hashlib?我想知道是否有人可以向我解释 hashlib 中的 .decode 和 .encode ?
【发布时间】:2018-12-16 04:11:41
【问题描述】:

我了解到您有一个十六进制字符串并对其执行两次 SHA256,然后对最终的十六进制字符串进行字节交换。此代码的目标是通过连接两个交易来找到 Merkle Root。我想更多地了解背景中发生的事情。你到底在解码和编码什么?

导入哈希库

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'

【问题讨论】:

  • 你想在这里描述什么协议?你所说的听起来不正常。
  • 你用的是python 2还是python 3?
  • 您将字节(整数)编码为来自[0-9a-f]的小写ASCII字符字符串
  • This answer 可能有帮助吗?
  • @BenStolman 哦,这是比特币吗?请在问题中包含该信息——现在你还没有在任何地方解释过。

标签: encoding decoding sha256 sha hashlib


【解决方案1】:

header_hex 是小写 ASCII 字符的常规字符串,带有 'hex' 参数的 decode() 方法将其更改为带有字节 0x93 0xa0 等的(二进制)字符串(或 Python 3 中的 bytes 对象) . 在 C 中,在这种情况下,它将是一个长度为 64 的 unsigned char 数组。

然后用 SHA256 对这个长度为 64 的数组/字节字符串进行哈希处理,并再次对其结果(另一个大小为 32 的二进制字符串)进行哈希处理。所以hash 是一个长度为32 的字符串,或者是Python 3 中该长度的字节对象。那么encode('hex_codec')encode('hex') 的同义词(在Python 2 中);在 Python 3 中,它取代了它(所以也许这段代码适用于两个版本)。它再次输出一个 ASCII(低位十六进制)字符串,将每个原始字节(只是一个小整数)替换为两个字符串,这是它的十六进制表示。所以最后一位反转双哈希并将其输出为十六进制,我通常称之为“小写十六进制 ASCII”。

【讨论】:

  • 我又搞糊涂了。那么 hash = hashlib.sha256(hashlib.sha256(header_bin).digest()).digest() 输出二进制字符串吗?和 hash.encode('hex_codec') 将其转换为十六进制?
  • @BenStolman 是的,你最后应用了.digest() 方法,这确实输出了一个二进制字符串,encode('hex_codec') 使它成为一个 ASCII 字符串(用于“人类消费”)。
  • 如何访问二进制级别?这只是一堆 1 和 0,是吗?
  • @BenStolman 当您有一个二进制字符串时,您已经可以访问二进制级别:每个字节只有 8 位。如果您想要单独的位,您可以使用 & 运算符等来计算它们。如果要打印一个字节,请使用bin 函数,它适用于整数(一个字节只是一个小整数)。
  • @BenStolman [bin(i) for i in hash] 如果您想将所有字节视为位字符串(再次以可打印形式)。
猜你喜欢
  • 2016-11-09
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 2011-05-08
  • 1970-01-01
相关资源
最近更新 更多