构建 Bech32 地址

Constructing Bech32 addresses

我正在尝试按照此处 https://en.bitcoin.it/wiki/Bech32 的步骤生成有效的 bech32 地址。我卡在了第一步:

  1. Having a compressed public key (0x02 or 0x03 followed by 32 byte X coordinate): 0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
  2. Perform SHA-256 hashing on the public key: 0f715baf5d4c2ed329785cef29e562f73488c8a2bb9dbc5700b361d54b9b0554

这是我尝试过的方法之一:

>>> import hashlib
>>> m = hashlib.sha256()
>>> m.update('0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798')
>>> m.hexdigest()
'd13c888cfd35d6ab67dc3f67edcc401833e6ae4eec20b254b1981b187946ed91'

注:

  1. 我仅限于 python 2.7.18
  2. 我制作这些地址是为了测试目的,实际使用时不需要它们,但应该有效
  3. 如果您知道如何执行步骤 3+,请也分享它们:)
  4. 这里有一个推定的参考实现:https://github.com/fiatjaf/bech32/blob/master/bech32/__init__.py,但我无法理解它的正反面......它似乎与描述的过程完全不同。

您似乎在对二进制的字符串表示形式进行哈希处理,而不是对二进制流本身进行哈希处理。不确定在 Python 2.7 中最符合 pythonic 的方法是什么,但是您可以通过以下方式获得所需的内容:

import hashlib

str_of_key = '0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'
hashlib.new('sha256', str_of_key.decode('hex')).hexdigest()

供参考,有关.decode('hex')的相关问题: