比特币地址生成过程
zmhg799417
post on 2023-1-12 09:15:42
14
0
0
一个比特币地址的生成过程如下图所示:
如上图所示,比特币的生成过程分为以下几步:
a. 产生一个随机数,作为私钥;
b. 由私钥生成公钥;
c. 将生成的公钥进行SHA256运算;
d. 将生成的256位哈希值进行RIPEMD160运算;
e. 将版本号和公钥哈希值进行双SHA256运算得到校验码;
f. 将版本号、公钥哈希和校验码连接并进行Base58转换。
2 地址实例
2.1 主网地址实例
比特币私钥本质上是一个256位的0和1随机序列。从一个私钥生成比特币地址的过程从上图中已经清楚的知道了,接下来将从一个真实的例子说明整个过程。在此,需要使用比特币命令行工具Libbitcoin Explorer,这是一个功能强大的比特币命令行工具。
a. 产生一个随机数,作为私钥
$ bx seed
e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75 #随机种子
$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75
6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0 #私钥
b. 由私钥生成公钥
$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0
02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3 #压缩格式公钥
生成的公钥是压缩格式公钥,因此长度是33字节。首字节 02 表示该公钥是压缩格式,其Y坐标是偶数值。如果首字节为 03,则该公钥也是压缩格式,其Y坐标是奇数值。
这个公钥的非压缩格式值为 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c。首字节 04 表示该公钥为非压缩格式。
c. 将生成的公钥进行SHA256运算
$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93 #公钥的SHA256哈希值
d. 将生成的256位哈希值进行RIPEMD160运算
$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93
34c18387ebedacab545ced2027c461ce05077468 #RIPEMD160哈希值
e. 版本号和公钥哈希值进行双SHA256运算得到校验码
比特币主网的地址版本号为00,加到上一步得到的哈希值前,然后计算双SHA256哈希值。
$ bx sha256 0034c18387ebedacab545ced2027c461ce05077468 #首字节为主网版本号00
dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851
$ bx sha256 dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851
c6754cbc7fee2f70418f6815aab85008811a93c73546c5d4d4240b755d12a313 #双哈希结果
最后取双哈希值的前4个字节 c6754cbc 作为比特币地址的校验码。
f. 将版本号、公钥哈希和校验码连接并进行Base58转换
$ bx base58-encode 0034c18387ebedacab545ced2027c461ce05077468c6754cbc
15owxYraAxdfneQETbovBVigZg8a5Cv5Ns #最终地址
将版本号 00、公钥哈希 34c18387ebedacab545ced2027c461ce05077468 和校验码 c6754cbc 依次连接得到 0034c18387ebedacab545ced2027c461ce05077468c6754cbc ,并进行Base58转换,得到最终的压缩格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns。
因为Base58转换可逆,可以从地址转化为16进制字符串:
$ bx base58-decode 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns
0034c18387ebedacab545ced2027c461ce05077468c6754cbc
前面提到,公钥格式表示可以压缩格式表示,也可以非压缩格式表示,那么本例中,非压缩格式公钥地址是什么呢?
$ bx ec-to-address 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c
16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5 #非压缩格式公钥地址
比特币非压缩格式公钥地址为 16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5。该地址与压缩公钥格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns 等价,都可以被同一个私钥验证。
懒得敲代码的同学可以直接在https://www.bitaddress.org/网站上导入本实例的私钥 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0 进行验证。
2.2 测试网地址实例
测试网地址生成过程与主网的地址生成过程相同,唯一不同的是采用的版本号,测试网的版本号为0x6f,主网的版本号为0x00。因此,生成比特币测试网地址的过程如下:
a. 产生一个随机数,作为私钥
$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75
6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0
b. 由私钥生成公钥
$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0
02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
c.将生成的公钥进行SHA256运算
$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93
d. 将生成的256位哈希值进行RIPEMD160运算
$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93
34c18387ebedacab545ced2027c461ce05077468
e. 版本号和公钥哈希值进行双SHA256运算得到校验码
注意,此时的版本号为0x6f,表示的是测试网的版本号。
$ bx sha256 6f34c18387ebedacab545ced2027c461ce05077468
5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d4
$ bx sha256 5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d4
0e5c8446d3f7f85168beb2001060bb2f3315e1b7f718ceda4a8fed264e422ac3
f. 将版本号、公钥哈希和校验码连接并进行Base58转换
$ bx base58-encode 6f34c18387ebedacab545ced2027c461ce050774680e5c8446
mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ
或者直接指定特定公钥生成测试网的地址:
$ bx ec-to-address 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3 -c .bx-testnet.cfg
mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ
最终得到比特币测试网的地址mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ。
3 参考资料
List of address prefixes:列举了不同前缀码生成不同的比特币地址。
BitMere.com is Information release platform,just provides information storage space services.
The opinions expressed are solely those of the author,Does not constitute advice, please treat with caution.
The opinions expressed are solely those of the author,Does not constitute advice, please treat with caution.
Write the first review