本文简单描述了BTC协议中,从私钥到钱包地址的生成过程。
1、3935a3e3751b68e04(自己随机产生一个数)
2、填充,得到256bit的私钥(private_key):
000000000000000000000000000000000000000000000003935a3e3751b68e04
3、对私钥进行椭圆曲线算法加密(SECP256k1),得到64字节的公钥(public_key):
e8977d298d194929e92b1a87a37f232f8838aaa3e14746217c46def324d7577ca273075eb4edb98c18a6e27c4549aca44620aef4567bfb35d942e7ba0edce75f
4、添加0x04头(以0x04开头的公钥标记这是没有经过压缩的公钥),长度变为65字节:
04e8977d298d194929e92b1a87a37f232f8838aaa3e14746217c46def324d7577ca273075eb4edb98c18a6e27c4549aca44620aef4567bfb35d942e7ba0edce75f
5、对步骤4的公钥作sha256哈希加密,得到如下摘要(长度为32字节):
ac40cc78422db4050f1a99c2e539a68eca62b8c8c3496c330d588d2ed794e140
6、对步骤5的数据作ripemd160哈希加密,得到公钥hash(长度20字节):
e2d12b1c117fe64cb868a81ee3a61c74b64c59ed
以下步骤展示公钥hash生成钱包地址的过程:
7.1、假设 tem_hash = SHA256( SHA256(0x00+公钥hash) ), 取tem_hash前4个字节:f3891721
7.2、 checksum = f3891721
7.3、 0x00 + 公钥hash + checksum:
00c8db639c24f6dc026378225e40459ba8a9e54d1af3891721
7.4、将7.3中的字节流进行base58的转换,得到钱包地址:
1MgJHdTuHkyZ6gzzMQGkZHd4CPn6joU5GL
注:钱包地址与公钥hash从转换来看,完全可以互逆,所以大部分情形下二者是等价的,只是表现形式不一样而已。
值得注意的是,在使用P2PKH交易标准时,输出的目标地址,实际上就是使用的公钥哈希,也即是得到对方的钱包地址后,需要在交易中转成公钥哈希。
如果你觉得这篇文档对你有帮助,别忘了打赏:
1HKQyLvLL4zCsbewjxdbV9WsCmqyaZYUUT