Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币地址生成过程

zmhg799417
266 0 0
1 比特币地址生成过程
0 ]+ F* z4 I: \6 f5 j一个比特币地址的生成过程如下图所示:/ m9 h6 U' |0 {* N, N# w0 L
4 m$ J1 Z0 K- l
如上图所示,比特币的生成过程分为以下几步:
8 |: W+ \* u5 H# ~* C  \a. 产生一个随机数,作为私钥;) r0 Y7 P3 J5 g: b
b. 由私钥生成公钥;( m5 F+ K* R! B4 C8 V! g$ t; N- s4 W
c. 将生成的公钥进行SHA256运算;6 ^2 C1 {: o3 {1 r8 r
d. 将生成的256位哈希值进行RIPEMD160运算;2 F9 q) S9 Z1 I4 q
e. 将版本号和公钥哈希值进行双SHA256运算得到校验码;1 A& H) t# d7 P0 F3 `% x% l3 T( S, f
f. 将版本号、公钥哈希和校验码连接并进行Base58转换。+ I, m, k. x# Q1 d; C
2 地址实例
$ {! S  ?4 j, m2.1 主网地址实例
9 E' C9 I. J' K7 H7 ]' ]比特币私钥本质上是一个256位的0和1随机序列。从一个私钥生成比特币地址的过程从上图中已经清楚的知道了,接下来将从一个真实的例子说明整个过程。在此,需要使用比特币命令行工具Libbitcoin Explorer,这是一个功能强大的比特币命令行工具。
# |4 o3 X9 m3 F5 L2 |a. 产生一个随机数,作为私钥! S% j5 W+ K8 c- j. k. l, L' ^  k
$ bx seed4 |1 `& L8 A: R! G2 W8 f5 i' I8 s: u
e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75   #随机种子
$ m' T/ k- _3 V! a- a+ z# ~$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75
- F: l- a0 i: ]/ d2 \' [$ [6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0   #私钥( p8 y  V; [9 R7 E5 F
b. 由私钥生成公钥
3 E& g% e" n  }2 n$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0$ Q9 D% ^8 s6 B, n% k
02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3   #压缩格式公钥
& D" K9 J6 M( f8 Y% G9 K  C生成的公钥是压缩格式公钥,因此长度是33字节。首字节 02 表示该公钥是压缩格式,其Y坐标是偶数值。如果首字节为 03,则该公钥也是压缩格式,其Y坐标是奇数值。
' E$ R3 L$ k2 p8 \* J这个公钥的非压缩格式值为 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c。首字节 04 表示该公钥为非压缩格式。. ?4 _- b# f2 }+ u, y) j
c. 将生成的公钥进行SHA256运算
" O& j, U, N  [+ h, T$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a32 Q" n6 a) k: K% l2 R0 ?1 i( G) E
52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93   #公钥的SHA256哈希值
* t/ s! u+ D! j+ y" D% P4 jd. 将生成的256位哈希值进行RIPEMD160运算
* u" U  t. O7 Q9 g) y! z% Y$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93$ L3 G  Y" d& G
34c18387ebedacab545ced2027c461ce05077468   #RIPEMD160哈希值
, a) t1 U: v% @; Y: `e. 版本号和公钥哈希值进行双SHA256运算得到校验码
: x7 u5 V. S. E0 u6 F比特币主网的地址版本号为00,加到上一步得到的哈希值前,然后计算双SHA256哈希值。$ \& x" Y) `# b- Q
$ bx sha256 0034c18387ebedacab545ced2027c461ce05077468   #首字节为主网版本号00* A5 r: _8 n  k$ Y, V) }" A: Q
dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851
; d9 X2 v  M* |! g$ bx sha256 dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851
: h# I/ d/ P0 u1 W) B' P7 _& wc6754cbc7fee2f70418f6815aab85008811a93c73546c5d4d4240b755d12a313   #双哈希结果
9 M5 o1 U* Z! P3 {5 K最后取双哈希值的前4个字节 c6754cbc 作为比特币地址的校验码。
' k3 d$ W9 |, V( Q9 n; s; n+ Tf. 将版本号、公钥哈希和校验码连接并进行Base58转换% W/ j5 W+ d0 d8 E  M+ X8 z; S0 a1 j* F
$ bx base58-encode 0034c18387ebedacab545ced2027c461ce05077468c6754cbc- S" x! v! J+ o$ B; j: H& m/ B2 A
15owxYraAxdfneQETbovBVigZg8a5Cv5Ns   #最终地址
* ~2 M  ~, |# I2 V) H7 p. I将版本号 00、公钥哈希 34c18387ebedacab545ced2027c461ce05077468 和校验码 c6754cbc 依次连接得到 0034c18387ebedacab545ced2027c461ce05077468c6754cbc ,并进行Base58转换,得到最终的压缩格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns。
8 m8 r4 O. I" X" j8 o& m8 W因为Base58转换可逆,可以从地址转化为16进制字符串:
7 {: {' h2 v; A1 o: j2 v  W7 W$ bx base58-decode 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns$ r% W! S( F7 U7 [1 S
0034c18387ebedacab545ced2027c461ce05077468c6754cbc
% k- i( e  I- _: U1 }. B! C2 E$ n前面提到,公钥格式表示可以压缩格式表示,也可以非压缩格式表示,那么本例中,非压缩格式公钥地址是什么呢?: C" _& ^+ U/ u$ t
$ bx ec-to-address 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c
+ R4 ^1 b" _, f% ~5 F4 I4 d3 _16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5   #非压缩格式公钥地址7 i  v9 A( y' i; P" ~0 M
比特币非压缩格式公钥地址为 16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5。该地址与压缩公钥格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns 等价,都可以被同一个私钥验证。* ^5 M$ }' _2 n1 i" h, h
懒得敲代码的同学可以直接在https://www.bitaddress.org/网站上导入本实例的私钥 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0 进行验证。
8 W  N+ _+ ~7 m8 C2.2 测试网地址实例
# W8 K" X# d( i: T8 }$ y4 ]测试网地址生成过程与主网的地址生成过程相同,唯一不同的是采用的版本号,测试网的版本号为0x6f,主网的版本号为0x00。因此,生成比特币测试网地址的过程如下:
& ~- U* _+ G& Ia. 产生一个随机数,作为私钥+ h- X, n$ F' ~+ n2 V: Q8 F3 p
$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa758 _9 o1 Q* b) B, S
6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0
1 e  n' O7 e4 g1 o9 R; a% |b. 由私钥生成公钥
3 O$ m8 M/ s' G; O" R$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0
- q0 U- E: t: H* P( L+ e02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a31 p4 o6 {; G& d% Q
c.将生成的公钥进行SHA256运算
. j5 D; i. \- j3 ]& z( R3 K$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
. z( J9 @) m: i' }2 h( g  [8 q52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93; |& o5 r- _* w9 M' Z8 f; B
d. 将生成的256位哈希值进行RIPEMD160运算7 E  x0 i, Y+ x( I2 D: ^4 J6 S
$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93
" X3 C" D: q$ l, U- e34c18387ebedacab545ced2027c461ce05077468
) n$ ]& ], W2 o- Z* Q" G3 we. 版本号和公钥哈希值进行双SHA256运算得到校验码
" X9 Q# U1 K+ [# a注意,此时的版本号为0x6f,表示的是测试网的版本号。
3 D( A  I6 \2 [/ ]6 C; X+ P, Z6 {$ bx sha256 6f34c18387ebedacab545ced2027c461ce05077468
4 E0 ^0 {, v& _# z6 z7 C5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d46 f% d; s! }% O$ |* m. K( j
$ bx sha256 5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d4
! Y1 q9 t* C6 P/ o. l# s* e4 Z; n0e5c8446d3f7f85168beb2001060bb2f3315e1b7f718ceda4a8fed264e422ac3
# t' I$ w: ?( c0 e2 @1 E1 A: i/ Mf. 将版本号、公钥哈希和校验码连接并进行Base58转换( I4 ]( H& j$ p, n' `+ K7 K, Z9 N
$ bx base58-encode 6f34c18387ebedacab545ced2027c461ce050774680e5c84467 ^! H% v  j4 g
mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ3 I% V9 J) ^3 y- w
或者直接指定特定公钥生成测试网的地址:. T9 q+ y4 D. y) D! D0 v% J
$ bx ec-to-address 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3 -c .bx-testnet.cfg
% W4 a2 h* o* w  k: }4 M9 Y9 }2 ymkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ
. W- v5 g" X  `1 s' [" Z最终得到比特币测试网的地址mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ。  F; S& W$ L& T+ N3 S
3 参考资料
: G& y4 B& G# _' \" B  UList of address prefixes:列举了不同前缀码生成不同的比特币地址。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16