Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币地址生成过程

zmhg799417
171 0 0
1 比特币地址生成过程0 g2 C5 F) p# O# Y
一个比特币地址的生成过程如下图所示:
; l7 L% w& a, |: y1 q6 [0 G  o
如上图所示,比特币的生成过程分为以下几步:6 D6 ^' A" a3 P8 w# O
a. 产生一个随机数,作为私钥;' v) |7 L- d* ~+ v) @
b. 由私钥生成公钥;
" h& ^. h0 J* Z  K# L! Lc. 将生成的公钥进行SHA256运算;+ d# ?5 R& p8 ?+ o( j
d. 将生成的256位哈希值进行RIPEMD160运算;
" A+ ~: F( o% S/ d: ?; @e. 将版本号和公钥哈希值进行双SHA256运算得到校验码;- f9 N! J* q! i. u) ?6 g. E) |
f. 将版本号、公钥哈希和校验码连接并进行Base58转换。" ~/ W' c0 ]0 z7 Y4 h- `% x2 a3 G* c
2 地址实例0 j& J7 r$ o6 v6 t
2.1 主网地址实例
3 o& ^1 {: g0 q; l! \比特币私钥本质上是一个256位的0和1随机序列。从一个私钥生成比特币地址的过程从上图中已经清楚的知道了,接下来将从一个真实的例子说明整个过程。在此,需要使用比特币命令行工具Libbitcoin Explorer,这是一个功能强大的比特币命令行工具。
/ n% O  t& d, O6 Ea. 产生一个随机数,作为私钥! k- J5 _1 w$ E8 H- D
$ bx seed- u" Q2 @) V/ Z( h* }( T
e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75   #随机种子
" z: m1 v& g$ T; N, q1 z$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa753 Z5 B. M" w; o, S* [7 Q
6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0   #私钥
9 b4 O0 I: U# G: ~% `; o/ yb. 由私钥生成公钥
) R* M0 ~  H1 }2 V' g2 H$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d00 n+ ^1 }/ O& P* ~$ }+ q8 J
02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3   #压缩格式公钥
  F+ y3 F! Q+ v0 E生成的公钥是压缩格式公钥,因此长度是33字节。首字节 02 表示该公钥是压缩格式,其Y坐标是偶数值。如果首字节为 03,则该公钥也是压缩格式,其Y坐标是奇数值。7 v( V8 U7 |/ K
这个公钥的非压缩格式值为 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c。首字节 04 表示该公钥为非压缩格式。
& t+ Q4 v, G& ]; m& vc. 将生成的公钥进行SHA256运算2 X, V' T8 Z2 K3 o" Z' \. r
$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
5 T. o( f) A' I6 d; Q52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93   #公钥的SHA256哈希值
, {' {% f" d4 s& xd. 将生成的256位哈希值进行RIPEMD160运算
7 L7 U. [+ |/ T, B' V# u$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93
: K, e- b+ x  c& O+ v4 P* `34c18387ebedacab545ced2027c461ce05077468   #RIPEMD160哈希值; Y; |2 g. v  _& F8 K2 F5 u) x0 G3 J
e. 版本号和公钥哈希值进行双SHA256运算得到校验码+ B2 X/ Z7 }5 L; E/ O0 T- m
比特币主网的地址版本号为00,加到上一步得到的哈希值前,然后计算双SHA256哈希值。
7 B" G4 |1 S5 o% w' l+ o$ bx sha256 0034c18387ebedacab545ced2027c461ce05077468   #首字节为主网版本号00
" Y1 j) F2 A% F) }4 U/ A' }- K2 wdfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851
1 r6 u0 j( R, }, h) {: U$ bx sha256 dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851
5 F% x  M/ }5 r. wc6754cbc7fee2f70418f6815aab85008811a93c73546c5d4d4240b755d12a313   #双哈希结果6 G3 g0 Y9 E/ g# g# U5 u
最后取双哈希值的前4个字节 c6754cbc 作为比特币地址的校验码。$ @4 q- K- H7 w. \- W
f. 将版本号、公钥哈希和校验码连接并进行Base58转换8 P4 [+ Q  _8 t, C
$ bx base58-encode 0034c18387ebedacab545ced2027c461ce05077468c6754cbc) Q; ]9 L2 B+ J( s5 k
15owxYraAxdfneQETbovBVigZg8a5Cv5Ns   #最终地址& X. X5 p. U' Q8 j* i
将版本号 00、公钥哈希 34c18387ebedacab545ced2027c461ce05077468 和校验码 c6754cbc 依次连接得到 0034c18387ebedacab545ced2027c461ce05077468c6754cbc ,并进行Base58转换,得到最终的压缩格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns。$ t9 k& J; h6 h5 H) u  W
因为Base58转换可逆,可以从地址转化为16进制字符串:1 M/ p! V) S( S1 ?
$ bx base58-decode 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns
2 V8 |8 b( ~6 h# w2 H* _0034c18387ebedacab545ced2027c461ce05077468c6754cbc
& R" s! r. N4 s- C; h( v: j前面提到,公钥格式表示可以压缩格式表示,也可以非压缩格式表示,那么本例中,非压缩格式公钥地址是什么呢?' t0 M8 M  e3 B
$ bx ec-to-address 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c( `) ?. ~3 I$ o5 f/ H
16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5   #非压缩格式公钥地址
+ |9 X) L# t: x" f" V8 \比特币非压缩格式公钥地址为 16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5。该地址与压缩公钥格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns 等价,都可以被同一个私钥验证。: `1 x3 H  G/ u0 k( j$ G0 l, J+ r+ \
懒得敲代码的同学可以直接在https://www.bitaddress.org/网站上导入本实例的私钥 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0 进行验证。4 A. U# g7 w7 R' q& C+ Z
2.2 测试网地址实例6 [; [$ ^' M' h, V
测试网地址生成过程与主网的地址生成过程相同,唯一不同的是采用的版本号,测试网的版本号为0x6f,主网的版本号为0x00。因此,生成比特币测试网地址的过程如下:
. R# Q2 Q; R) x8 _% j  `" Ma. 产生一个随机数,作为私钥5 x" V/ c1 u; E1 k
$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa756 Z, _+ z9 c  I9 W# G- Q
6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d00 s  V8 f' e2 O: F% _
b. 由私钥生成公钥8 [2 V9 G& b* Q
$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0
1 M5 o, ^% b( M' b0 c5 q% k" I02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3, h" l5 C- O- v/ D5 e! ^
c.将生成的公钥进行SHA256运算
/ ~' {2 `5 V+ H) l' _5 L$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
: W1 Y# g2 B. E- l5 |, R52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93
- G$ j0 L. ~5 m8 ld. 将生成的256位哈希值进行RIPEMD160运算' L! Z  r4 E6 M& Y
$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93; X! o. X( T* ?" w2 F0 T
34c18387ebedacab545ced2027c461ce05077468
/ g( ~( C3 }) q9 i, U# I5 d- l7 qe. 版本号和公钥哈希值进行双SHA256运算得到校验码
3 q" x* o6 e, V. h" L; G$ B+ `# V注意,此时的版本号为0x6f,表示的是测试网的版本号。# Y8 ~+ P! ^, l, I% T
$ bx sha256 6f34c18387ebedacab545ced2027c461ce05077468
2 Q: _( H  w. B+ o5 }( Z8 i* u5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d4
$ }. \) G" {+ f4 h$ bx sha256 5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d4
- w! ?; S& y: o% |% k3 j' ^0 C0e5c8446d3f7f85168beb2001060bb2f3315e1b7f718ceda4a8fed264e422ac3" M9 o0 a5 `" W' ^0 w1 b+ d3 m$ t% _
f. 将版本号、公钥哈希和校验码连接并进行Base58转换
. L" ~+ M0 B6 Z2 r+ }/ J$ bx base58-encode 6f34c18387ebedacab545ced2027c461ce050774680e5c8446
. y: T/ ^) r5 o' t% dmkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ- n# e9 S. E9 T6 v
或者直接指定特定公钥生成测试网的地址:1 P% t" r, @3 L+ h/ o3 z
$ bx ec-to-address 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3 -c .bx-testnet.cfg9 y5 I4 |+ m3 t' {/ q+ G0 z, x% P
mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ
3 n. _, m) e; V: S/ e最终得到比特币测试网的地址mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ。  }9 n- X8 ]" q2 k8 `2 G8 W
3 参考资料* H  p' K& J. [0 [3 o
List of address prefixes:列举了不同前缀码生成不同的比特币地址。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16