Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币地址生成过程

zmhg799417
173 0 0
1 比特币地址生成过程
4 |8 Z& f' P; o$ c7 d一个比特币地址的生成过程如下图所示:# M8 E  I6 ^7 z

% [- _  o6 O* Z! O5 {如上图所示,比特币的生成过程分为以下几步:6 l" ?. }) |8 c: R2 T; w' s- }
a. 产生一个随机数,作为私钥;- P) g, K7 w5 [7 t. F# o
b. 由私钥生成公钥;& _, w" {) u! S( x) I9 c
c. 将生成的公钥进行SHA256运算;& \( ]; r$ ^# t# {
d. 将生成的256位哈希值进行RIPEMD160运算;4 P3 S2 d  j$ n
e. 将版本号和公钥哈希值进行双SHA256运算得到校验码;& D/ h2 ~9 H! J; c+ t+ r+ P+ O
f. 将版本号、公钥哈希和校验码连接并进行Base58转换。. _' ^9 Q4 x9 V) Z: u
2 地址实例
, x( s/ G8 t5 U- ]9 s2.1 主网地址实例; H8 X  m' `4 G$ W6 G
比特币私钥本质上是一个256位的0和1随机序列。从一个私钥生成比特币地址的过程从上图中已经清楚的知道了,接下来将从一个真实的例子说明整个过程。在此,需要使用比特币命令行工具Libbitcoin Explorer,这是一个功能强大的比特币命令行工具。6 l. i& H/ n" H: j* Y
a. 产生一个随机数,作为私钥3 b( T1 x" N5 z9 v% T
$ bx seed
, x! z% q* e% {9 W- \: V8 ce0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75   #随机种子
# y) N  j+ p/ f7 `3 C$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75* j$ @) y: t3 D  u
6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0   #私钥( @! [! t& R* Q( w
b. 由私钥生成公钥# p$ W# D, m# L6 H1 H% O' m* O
$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d00 }+ @8 V0 n( q, _& }0 X. J% u0 y
02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3   #压缩格式公钥* ~3 S3 |" G" ?5 U, {7 I: X
生成的公钥是压缩格式公钥,因此长度是33字节。首字节 02 表示该公钥是压缩格式,其Y坐标是偶数值。如果首字节为 03,则该公钥也是压缩格式,其Y坐标是奇数值。
. ]; M" j+ S; h' d* l! h" V# F这个公钥的非压缩格式值为 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c。首字节 04 表示该公钥为非压缩格式。% |% P  l' i3 I% O
c. 将生成的公钥进行SHA256运算
+ r5 t) a( Y' S  q$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3" O0 R& B5 C. F+ E- e
52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93   #公钥的SHA256哈希值6 }; e$ s: J  d  }* @  N. L
d. 将生成的256位哈希值进行RIPEMD160运算
1 r" [9 r, O1 i0 ]- d$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93
+ c5 a+ x& w' h8 ?- o34c18387ebedacab545ced2027c461ce05077468   #RIPEMD160哈希值! ^: T+ Q5 R9 x, ~. d% t1 }7 ~
e. 版本号和公钥哈希值进行双SHA256运算得到校验码
4 V, k' R$ V: h8 Y0 [比特币主网的地址版本号为00,加到上一步得到的哈希值前,然后计算双SHA256哈希值。
) |3 d: @9 H9 X/ J0 T6 ?$ bx sha256 0034c18387ebedacab545ced2027c461ce05077468   #首字节为主网版本号00; ^; S' X" [4 W" C, ^
dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851% s1 G* `0 |( V2 S9 d5 B/ l
$ bx sha256 dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851- G( s' x( [  d% f2 k5 L. b
c6754cbc7fee2f70418f6815aab85008811a93c73546c5d4d4240b755d12a313   #双哈希结果
0 c" M4 ?5 Z2 Q- E最后取双哈希值的前4个字节 c6754cbc 作为比特币地址的校验码。
3 x" x! |% E5 W7 }# yf. 将版本号、公钥哈希和校验码连接并进行Base58转换" h. j4 C/ F. E/ t$ C7 X
$ bx base58-encode 0034c18387ebedacab545ced2027c461ce05077468c6754cbc1 b7 ]8 N. w% l) C4 ~: b
15owxYraAxdfneQETbovBVigZg8a5Cv5Ns   #最终地址+ Y) r9 P  j1 ]& {' W7 ]3 Q5 t" x
将版本号 00、公钥哈希 34c18387ebedacab545ced2027c461ce05077468 和校验码 c6754cbc 依次连接得到 0034c18387ebedacab545ced2027c461ce05077468c6754cbc ,并进行Base58转换,得到最终的压缩格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns。+ y9 }$ i! t' G1 {; h, v
因为Base58转换可逆,可以从地址转化为16进制字符串:
0 I% n0 m: V7 t4 e$ bx base58-decode 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns! g) O. n" A8 I& T- S
0034c18387ebedacab545ced2027c461ce05077468c6754cbc) v$ O( k9 ?9 ~
前面提到,公钥格式表示可以压缩格式表示,也可以非压缩格式表示,那么本例中,非压缩格式公钥地址是什么呢?- {# F0 |# v% w& I
$ bx ec-to-address 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c
  |% r8 O( m9 }3 h- f, Y9 `16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5   #非压缩格式公钥地址
+ p5 b0 s" j( f  F9 I/ s, z比特币非压缩格式公钥地址为 16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5。该地址与压缩公钥格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns 等价,都可以被同一个私钥验证。' v- S  a& I, o: R! S( a& z5 W- m
懒得敲代码的同学可以直接在https://www.bitaddress.org/网站上导入本实例的私钥 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0 进行验证。/ e% g/ ~: f& O& ?  N$ d) y7 z& l* I
2.2 测试网地址实例5 s* Z& F3 A+ T: O/ E
测试网地址生成过程与主网的地址生成过程相同,唯一不同的是采用的版本号,测试网的版本号为0x6f,主网的版本号为0x00。因此,生成比特币测试网地址的过程如下:
, M: V4 g" Q7 q4 W0 ga. 产生一个随机数,作为私钥* @4 R( S* X; o
$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75
! g$ a) W0 K; p( v2 C- {- N6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0
# H! Q2 w# r/ L1 X, H( p. |, c- F5 bb. 由私钥生成公钥9 V3 W7 n$ u: n) O" a+ j6 l5 A& z
$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d08 G( O+ _: _6 q* {
02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a32 M/ E9 r/ R2 W6 ]- Y
c.将生成的公钥进行SHA256运算
! X3 U! b% q2 _6 v- }1 n$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
# L# k/ e! r$ x0 {52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd936 J3 t( s, `7 l4 S1 X1 _2 Q8 f- i
d. 将生成的256位哈希值进行RIPEMD160运算' ]' n& x7 ]6 ^  a
$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd938 m1 S5 e1 c. M/ e2 Z3 j# \
34c18387ebedacab545ced2027c461ce05077468& i: H+ Q4 ?2 X! l* G9 c
e. 版本号和公钥哈希值进行双SHA256运算得到校验码# M4 H) M6 L: L8 a  r0 Z( i$ w
注意,此时的版本号为0x6f,表示的是测试网的版本号。
& |  f1 X, X' }" N  x$ bx sha256 6f34c18387ebedacab545ced2027c461ce05077468
" C6 k& N/ _9 b% B# m0 Y8 S; p& [0 F5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d4
; L( h/ a' }" v1 y$ bx sha256 5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d48 V7 F4 c" D3 z4 @/ a9 s
0e5c8446d3f7f85168beb2001060bb2f3315e1b7f718ceda4a8fed264e422ac3
( Y7 ]: B: w0 q8 h& x$ sf. 将版本号、公钥哈希和校验码连接并进行Base58转换& k% x# k. G8 z
$ bx base58-encode 6f34c18387ebedacab545ced2027c461ce050774680e5c84466 i% S4 k9 x0 d: [) n0 h. P
mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ* y$ Q6 w; c4 R+ F
或者直接指定特定公钥生成测试网的地址:
" H; Z/ ?% t3 B# v( r$ bx ec-to-address 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3 -c .bx-testnet.cfg6 X2 U# g- M( V  i8 ^- s$ T  Q- l+ \
mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ
& K" h$ B% a- T- D" n5 o最终得到比特币测试网的地址mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ。
$ v( n9 u5 k+ f" e2 B5 l' Q. k3 参考资料. ~$ P: K  |* m$ k/ B# }0 O
List of address prefixes:列举了不同前缀码生成不同的比特币地址。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16