从 BIP39(助记符)到 BIP32(public/private 键)
Going from BIP39 (mnemonic) to BIP32 (public/private keys)
我正在寻找开发一些代码,从助记符创建比特币私钥和 public 密钥。我目前对这个过程的理解是:
entropy > nmemonic > seed > public/private keys > public address
我在我的代码中使用 Trezor's nmemonic library and moneywagon。
import string
from random import SystemRandom, randrange
from binascii import hexlify, unhexlify
from moneywagon import generate_keypair
from mnemonic import mnemonic
def gen_rand():
foo = SystemRandom()
length = 32
chars = string.hexdigits
return ''.join(foo.choice(chars) for _ in range(length))
mnemo = mnemonic.Mnemonic('english')
entropy = gen_rand()
# entropy = '00000000000000000000000000000000'
words = mnemo.to_mnemonic(unhexlify(entropy))
seed = hexlify(mnemo.to_seed(words, passphrase='apassphrase'))
address = generate_keypair('btc', seed)
print(words)
print(seed)
print(address['public']['address'])
print(address['private']['hex'])
如果注释掉上面的熵线和 运行 代码,您将得到:
abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
b'05de15fb96dc0ab9f03c9d411bf84c586c72e7c30bddd413a304896f9f994ea65e7fcafd2c6b796141e310850e5f30b6abc2e6aec79a8ff81f4ba38fde81c403'
15GyM1xxxxxxxxxxxxxxxxxxxxxxTXrrvG
8ede10xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcae501
我的问题是 none 这反映在 iancoleman.io/bip39 or bip32jp.github.io 用于生成助记符代码和 public/private 键。
我哪里错了?
根据您的助记符,这两个站点都会生成与您相同的种子:
abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
另外https://bip32jp.github.io/english/给出这个特定的助记符,因为你的强制熵
entropy = '00000000000000000000000000000000'
(您必须选择 base 16 编码,因为您对 unhexlify
的调用会这样解释此字符串)
第一个站点 https://iancoleman.io/bip39/#english 似乎启发式地确定熵的字符串编码并将其识别为二进制。这会产生另一个结果。
的值
address['public']['address']
address['private']['hex']
这两个页面都与您的不同,因为这些页面使用与 moneywagon 不同的推导算法。 Moneywagon 使用 BIP38 一种不受欢迎的算法。我认为这就是两个网站都不提供它的原因。
我正在寻找开发一些代码,从助记符创建比特币私钥和 public 密钥。我目前对这个过程的理解是:
entropy > nmemonic > seed > public/private keys > public address
我在我的代码中使用 Trezor's nmemonic library and moneywagon。
import string
from random import SystemRandom, randrange
from binascii import hexlify, unhexlify
from moneywagon import generate_keypair
from mnemonic import mnemonic
def gen_rand():
foo = SystemRandom()
length = 32
chars = string.hexdigits
return ''.join(foo.choice(chars) for _ in range(length))
mnemo = mnemonic.Mnemonic('english')
entropy = gen_rand()
# entropy = '00000000000000000000000000000000'
words = mnemo.to_mnemonic(unhexlify(entropy))
seed = hexlify(mnemo.to_seed(words, passphrase='apassphrase'))
address = generate_keypair('btc', seed)
print(words)
print(seed)
print(address['public']['address'])
print(address['private']['hex'])
如果注释掉上面的熵线和 运行 代码,您将得到:
abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
b'05de15fb96dc0ab9f03c9d411bf84c586c72e7c30bddd413a304896f9f994ea65e7fcafd2c6b796141e310850e5f30b6abc2e6aec79a8ff81f4ba38fde81c403'
15GyM1xxxxxxxxxxxxxxxxxxxxxxTXrrvG
8ede10xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcae501
我的问题是 none 这反映在 iancoleman.io/bip39 or bip32jp.github.io 用于生成助记符代码和 public/private 键。
我哪里错了?
根据您的助记符,这两个站点都会生成与您相同的种子:
abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
另外https://bip32jp.github.io/english/给出这个特定的助记符,因为你的强制熵
entropy = '00000000000000000000000000000000'
(您必须选择 base 16 编码,因为您对 unhexlify
的调用会这样解释此字符串)
第一个站点 https://iancoleman.io/bip39/#english 似乎启发式地确定熵的字符串编码并将其识别为二进制。这会产生另一个结果。
的值address['public']['address']
address['private']['hex']
这两个页面都与您的不同,因为这些页面使用与 moneywagon 不同的推导算法。 Moneywagon 使用 BIP38 一种不受欢迎的算法。我认为这就是两个网站都不提供它的原因。