Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币地址生成过程

zmhg799417
172 0 0
1 比特币地址生成过程
) Z+ d; A$ K% ~9 P# M: P一个比特币地址的生成过程如下图所示:2 _6 e$ Y! s! o& C
$ `. A8 ]* f  q9 ?4 u4 j
如上图所示,比特币的生成过程分为以下几步:9 l/ r  [" g& R
a. 产生一个随机数,作为私钥;" R+ J: G3 y" K) ?
b. 由私钥生成公钥;
% ~* [0 _% V$ I( Q7 P3 X( H  ?c. 将生成的公钥进行SHA256运算;
: @9 }2 r$ x2 `d. 将生成的256位哈希值进行RIPEMD160运算;) n4 G, d9 f  y. i8 |/ _
e. 将版本号和公钥哈希值进行双SHA256运算得到校验码;( h5 ^+ d/ `( S. w9 Z
f. 将版本号、公钥哈希和校验码连接并进行Base58转换。, g, L, t# K6 y) ?6 [; X( S
2 地址实例( J5 g% k  k- w/ w
2.1 主网地址实例
0 _( i. R! v% O; U) H比特币私钥本质上是一个256位的0和1随机序列。从一个私钥生成比特币地址的过程从上图中已经清楚的知道了,接下来将从一个真实的例子说明整个过程。在此,需要使用比特币命令行工具Libbitcoin Explorer,这是一个功能强大的比特币命令行工具。9 b1 N* u3 D. W$ G1 m* F' p
a. 产生一个随机数,作为私钥
9 ?: ]- F8 a1 P( f9 F$ bx seed
& |: ?6 n( t3 ]  qe0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75   #随机种子- p, y, r1 x, X/ `
$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75+ x* a; M1 S; A
6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0   #私钥& M% ]3 _+ \/ d1 X
b. 由私钥生成公钥. Q: E, j( u9 V: k
$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0
: ]& p$ V. V2 s8 l# Q1 P02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3   #压缩格式公钥
, d/ I5 \4 @: v3 i, M1 X生成的公钥是压缩格式公钥,因此长度是33字节。首字节 02 表示该公钥是压缩格式,其Y坐标是偶数值。如果首字节为 03,则该公钥也是压缩格式,其Y坐标是奇数值。
& L( J6 y& e& I6 |; O( t这个公钥的非压缩格式值为 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c。首字节 04 表示该公钥为非压缩格式。, ?. C+ r7 W- U* W
c. 将生成的公钥进行SHA256运算; t+ [4 `  f' v" y! V
$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3& h- p5 R: x2 X
52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93   #公钥的SHA256哈希值; Q6 q* F( {$ s& w7 q( R
d. 将生成的256位哈希值进行RIPEMD160运算
, S- P2 f* n$ ^7 D  Y. w' _! \( n$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd936 d" f2 ?, ~2 Z7 f) B6 U+ y! k$ I
34c18387ebedacab545ced2027c461ce05077468   #RIPEMD160哈希值
) D' n5 Q  S; s; ], z, |' ?# D! ^e. 版本号和公钥哈希值进行双SHA256运算得到校验码
, t8 A* F8 E+ \! ~比特币主网的地址版本号为00,加到上一步得到的哈希值前,然后计算双SHA256哈希值。6 j% \4 `8 K; \; o
$ bx sha256 0034c18387ebedacab545ced2027c461ce05077468   #首字节为主网版本号00& E2 Z6 R& U  a6 Y8 U& U* k
dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d8519 H9 U# |% S3 l
$ bx sha256 dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851
3 F  c# g8 H2 G8 e! U$ |1 Vc6754cbc7fee2f70418f6815aab85008811a93c73546c5d4d4240b755d12a313   #双哈希结果
; c! G* {% u* |' F最后取双哈希值的前4个字节 c6754cbc 作为比特币地址的校验码。' C. r1 f" N  A) V0 b% s  D2 A9 g) Q
f. 将版本号、公钥哈希和校验码连接并进行Base58转换
4 @( m5 h: u) f9 ~6 q$ bx base58-encode 0034c18387ebedacab545ced2027c461ce05077468c6754cbc
1 t3 Z, M; X- k15owxYraAxdfneQETbovBVigZg8a5Cv5Ns   #最终地址2 j  f0 B- _8 l8 R8 G# e$ ~) d4 W
将版本号 00、公钥哈希 34c18387ebedacab545ced2027c461ce05077468 和校验码 c6754cbc 依次连接得到 0034c18387ebedacab545ced2027c461ce05077468c6754cbc ,并进行Base58转换,得到最终的压缩格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns。2 f! n; N' K1 T" w+ n2 _
因为Base58转换可逆,可以从地址转化为16进制字符串:4 x9 p8 b" J2 a+ i! [
$ bx base58-decode 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns
$ w9 r5 \( U2 m% [0034c18387ebedacab545ced2027c461ce05077468c6754cbc/ {3 [, N  j( |* U
前面提到,公钥格式表示可以压缩格式表示,也可以非压缩格式表示,那么本例中,非压缩格式公钥地址是什么呢?
: Z3 N4 u; Y, D$ u+ P+ ^7 ~4 a, l5 O$ bx ec-to-address 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c
" S/ S5 F+ l! `1 o  F) I16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5   #非压缩格式公钥地址. I' B+ @5 S5 z2 \: V/ E
比特币非压缩格式公钥地址为 16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5。该地址与压缩公钥格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns 等价,都可以被同一个私钥验证。
" t9 M' m; n+ ~懒得敲代码的同学可以直接在https://www.bitaddress.org/网站上导入本实例的私钥 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0 进行验证。
7 k/ }/ U, w& V8 a2 ]. ~5 ~2.2 测试网地址实例, e5 Z) u: U" }: s( W: M, V
测试网地址生成过程与主网的地址生成过程相同,唯一不同的是采用的版本号,测试网的版本号为0x6f,主网的版本号为0x00。因此,生成比特币测试网地址的过程如下:
! [9 c' z# s2 ~3 w+ M$ j# la. 产生一个随机数,作为私钥0 a& _  k) W9 L
$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75
$ ]; i. P& ]8 u' B) X6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0+ y( v( E! d% y! Y; z' A: U
b. 由私钥生成公钥7 {( h! Q: [2 ?3 K/ x$ b
$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0
# c9 i8 {7 D+ a5 d: C  j02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
- a4 C2 }+ H6 Q* u( Lc.将生成的公钥进行SHA256运算* I& r7 S7 c1 @0 N; @) N; S
$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
& E' n0 R& C2 u% G. `0 f52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93' [! \1 G% Q) s7 w3 V; y. p+ @" x" \
d. 将生成的256位哈希值进行RIPEMD160运算
+ Z% e: H+ b# e7 B7 h; u: a$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd936 @+ `5 J* S. d/ s
34c18387ebedacab545ced2027c461ce050774687 ?) U1 v: p5 I8 I, G
e. 版本号和公钥哈希值进行双SHA256运算得到校验码
* m6 |1 S4 [- ^$ K  ~" l4 N1 |# L注意,此时的版本号为0x6f,表示的是测试网的版本号。
! J$ i( s  B* M4 u- B$ ?! Z$ bx sha256 6f34c18387ebedacab545ced2027c461ce05077468
& F! m8 E) }9 i" e3 S; J' y& \2 i5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d4/ c% u1 [; ?. ?7 C; N2 }5 K
$ bx sha256 5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d40 t& ?# ]3 Z* ]6 _
0e5c8446d3f7f85168beb2001060bb2f3315e1b7f718ceda4a8fed264e422ac30 i; V& R. }( J, G$ }- M: A3 D- {2 Y* }! A
f. 将版本号、公钥哈希和校验码连接并进行Base58转换- u4 Y, q8 m  e
$ bx base58-encode 6f34c18387ebedacab545ced2027c461ce050774680e5c8446
4 V% j! p. |& W7 ?. bmkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ
  x% W# |/ G/ N2 ?8 L$ k9 d或者直接指定特定公钥生成测试网的地址:
. f3 `7 _) C2 S+ T' `$ bx ec-to-address 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3 -c .bx-testnet.cfg" h; r: H5 X  q& Z
mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ
* g2 w8 J8 l1 }( s最终得到比特币测试网的地址mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ。
- |, ~2 W( D. s  Y3 X3 参考资料
: f" ^: N- `8 d# eList of address prefixes:列举了不同前缀码生成不同的比特币地址。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16