Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币地址生成过程

zmhg799417
163 0 0
1 比特币地址生成过程& C* _$ S2 b- l3 z- F. e7 z( w7 m: p
一个比特币地址的生成过程如下图所示:4 X  L# [7 Y: z; A  z& ^9 [$ r
# b4 V( ]' }  a! {
如上图所示,比特币的生成过程分为以下几步:
* m" h8 k6 @* \% N9 xa. 产生一个随机数,作为私钥;
; Y+ `% U" @) I9 Eb. 由私钥生成公钥;
; S+ t) B3 A, Sc. 将生成的公钥进行SHA256运算;: C& N* {9 d5 Y+ m  Z; ~, T1 N
d. 将生成的256位哈希值进行RIPEMD160运算;
/ p* l) w% W" A8 f8 Ge. 将版本号和公钥哈希值进行双SHA256运算得到校验码;
( x# z% [) M; I$ Rf. 将版本号、公钥哈希和校验码连接并进行Base58转换。/ f& @0 i# a5 U* K7 W! J/ L
2 地址实例" j5 ~2 j* \  o1 n/ _
2.1 主网地址实例
3 {5 I7 n$ t4 o0 |; j1 l: `比特币私钥本质上是一个256位的0和1随机序列。从一个私钥生成比特币地址的过程从上图中已经清楚的知道了,接下来将从一个真实的例子说明整个过程。在此,需要使用比特币命令行工具Libbitcoin Explorer,这是一个功能强大的比特币命令行工具。0 P$ x% p' f9 h1 j+ l/ s' q( ^
a. 产生一个随机数,作为私钥* k& w$ C! y1 [9 H- }
$ bx seed. f7 @0 q* O) [6 C3 a( s5 m
e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75   #随机种子) c# P( f" ?, w3 J4 g" L6 |
$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa753 U. ]4 r% R& U9 ?) T9 r! Y6 Y
6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0   #私钥
0 S- ?! R% K. F2 Gb. 由私钥生成公钥  s. \+ ~- l5 T, M; ~
$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0
, Q, B6 S  i; e, [) d5 G3 d7 G- y9 N8 E02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3   #压缩格式公钥0 j$ L6 y' V3 i+ W- \" X
生成的公钥是压缩格式公钥,因此长度是33字节。首字节 02 表示该公钥是压缩格式,其Y坐标是偶数值。如果首字节为 03,则该公钥也是压缩格式,其Y坐标是奇数值。
; ]% X6 L9 {5 b% @: _这个公钥的非压缩格式值为 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c。首字节 04 表示该公钥为非压缩格式。4 _. H/ K& H+ ?! h" x7 q4 N  ?
c. 将生成的公钥进行SHA256运算
0 X) b5 q" {1 u6 w; z5 b9 s  y- a$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
8 P# W/ `/ Z7 M" u, a: a7 u52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93   #公钥的SHA256哈希值& }6 g. T3 H. }7 i
d. 将生成的256位哈希值进行RIPEMD160运算
! B' N0 o1 I3 u: M. d$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93
! x4 U1 B/ R. e34c18387ebedacab545ced2027c461ce05077468   #RIPEMD160哈希值
6 J$ x* k$ O0 p, b- A( f* Je. 版本号和公钥哈希值进行双SHA256运算得到校验码9 O0 U0 b* o7 {1 E8 u+ V
比特币主网的地址版本号为00,加到上一步得到的哈希值前,然后计算双SHA256哈希值。
3 ^4 l4 F+ Q2 t* S$ bx sha256 0034c18387ebedacab545ced2027c461ce05077468   #首字节为主网版本号00. w, s& r6 k2 Y& x, B5 P
dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851% O4 j1 G' r4 _3 |/ d7 N
$ bx sha256 dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851. e% K5 D; q3 l( `  `
c6754cbc7fee2f70418f6815aab85008811a93c73546c5d4d4240b755d12a313   #双哈希结果/ c; {7 E- J% \% w
最后取双哈希值的前4个字节 c6754cbc 作为比特币地址的校验码。7 `+ r+ }& S# n4 q6 I
f. 将版本号、公钥哈希和校验码连接并进行Base58转换
8 x9 t  Z' Y5 @4 B$ D; K! P" r$ K$ bx base58-encode 0034c18387ebedacab545ced2027c461ce05077468c6754cbc0 q* X) M/ N% N' b( P
15owxYraAxdfneQETbovBVigZg8a5Cv5Ns   #最终地址; T& b# X4 {. H7 {* o
将版本号 00、公钥哈希 34c18387ebedacab545ced2027c461ce05077468 和校验码 c6754cbc 依次连接得到 0034c18387ebedacab545ced2027c461ce05077468c6754cbc ,并进行Base58转换,得到最终的压缩格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns。
0 w1 c+ i/ |; e" Z1 y因为Base58转换可逆,可以从地址转化为16进制字符串:
: X9 l: `% I( n, k) O$ bx base58-decode 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns
2 f1 E% c/ Y7 r9 p- {" A: ]. P0034c18387ebedacab545ced2027c461ce05077468c6754cbc
2 L& C4 W8 b7 c4 \4 A; J6 }5 b前面提到,公钥格式表示可以压缩格式表示,也可以非压缩格式表示,那么本例中,非压缩格式公钥地址是什么呢?9 n, b/ |$ O+ z
$ bx ec-to-address 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c; l! B, x- h: o" }
16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5   #非压缩格式公钥地址
  k* A( R7 V1 u2 B8 N: b- T! B, B比特币非压缩格式公钥地址为 16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5。该地址与压缩公钥格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns 等价,都可以被同一个私钥验证。+ j' F8 ]/ h1 T+ n( l& S. V
懒得敲代码的同学可以直接在https://www.bitaddress.org/网站上导入本实例的私钥 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0 进行验证。* O: k8 Z; O' t% [
2.2 测试网地址实例2 K5 E3 s# z1 u$ ~2 U
测试网地址生成过程与主网的地址生成过程相同,唯一不同的是采用的版本号,测试网的版本号为0x6f,主网的版本号为0x00。因此,生成比特币测试网地址的过程如下:2 h) l! O; S$ H0 @
a. 产生一个随机数,作为私钥
! b: |$ ]5 F9 C- G6 o" o3 R$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75
: ^  m6 h, K( h1 B7 \' h6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0
) d9 ?1 O; n( M4 Z# Db. 由私钥生成公钥% V7 n/ x: n: ^$ G- A/ @
$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d07 ^3 l" m. s! Q
02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3, F5 J! n4 p( R5 o% X1 O
c.将生成的公钥进行SHA256运算
8 u$ \9 U5 v8 B0 H$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3( s2 T( R# h) }  d& a/ Y( f
52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93! `/ F* G/ f4 ~7 Y! r; j. L: G
d. 将生成的256位哈希值进行RIPEMD160运算" m" L0 i8 C3 K
$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93! t3 z6 @/ L! [; x" t
34c18387ebedacab545ced2027c461ce05077468
/ ^* _# T, F6 S7 m0 ge. 版本号和公钥哈希值进行双SHA256运算得到校验码
( D1 N& j& M. M0 {8 K; m3 L注意,此时的版本号为0x6f,表示的是测试网的版本号。
2 h0 ^* E8 I( \9 [; B1 f( v$ bx sha256 6f34c18387ebedacab545ced2027c461ce050774680 I% y5 g3 v( B# m
5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d4
) n2 _% ]' K  W( A$ bx sha256 5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d4
; E& R1 K' f" X" Y+ R& Y7 f1 e0e5c8446d3f7f85168beb2001060bb2f3315e1b7f718ceda4a8fed264e422ac3" L5 W/ Y6 y) x$ t
f. 将版本号、公钥哈希和校验码连接并进行Base58转换
# S: e" D, k$ D$ g$ bx base58-encode 6f34c18387ebedacab545ced2027c461ce050774680e5c8446
) B. e5 L/ s4 {7 s# umkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ* M4 I& e6 B; u" `, G" N# X( z
或者直接指定特定公钥生成测试网的地址:2 {& [5 O6 H- B/ G/ V  j- k$ G
$ bx ec-to-address 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3 -c .bx-testnet.cfg7 M7 J+ R  r+ B1 g: U* \3 e
mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ0 Q1 i9 s" X8 p" Z2 ?4 g, j, `6 M
最终得到比特币测试网的地址mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ。2 {4 p  B. T& r9 ?' @
3 参考资料' g4 Q+ H$ C$ I. J
List of address prefixes:列举了不同前缀码生成不同的比特币地址。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16