Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币地址生成过程

zmhg799417
174 0 0
1 比特币地址生成过程% Q" A2 Z0 b: L/ w7 y6 |
一个比特币地址的生成过程如下图所示:4 }$ M- R. k$ [
4 t8 O+ K6 ~* D0 x8 N( S/ c, D
如上图所示,比特币的生成过程分为以下几步:
& R; q3 n: w: e; ga. 产生一个随机数,作为私钥;9 ]$ V/ ~2 ?+ h- l8 d, _2 S
b. 由私钥生成公钥;
, J# s/ [0 v/ G( b% \c. 将生成的公钥进行SHA256运算;
- t1 O5 O% ^! Y" _& T. S% Ud. 将生成的256位哈希值进行RIPEMD160运算;
- o; [1 M; S9 ?/ _6 Ie. 将版本号和公钥哈希值进行双SHA256运算得到校验码;
! a) e; z- a2 t1 C5 `% ef. 将版本号、公钥哈希和校验码连接并进行Base58转换。% Q5 f5 x& v2 P+ @- k  D* C& q
2 地址实例' M5 ^: u& p) A- g! N; `4 d( t
2.1 主网地址实例
* o; t5 s. C5 e! G) p比特币私钥本质上是一个256位的0和1随机序列。从一个私钥生成比特币地址的过程从上图中已经清楚的知道了,接下来将从一个真实的例子说明整个过程。在此,需要使用比特币命令行工具Libbitcoin Explorer,这是一个功能强大的比特币命令行工具。
, ]. ?3 g; m: M) p  e* G6 Ea. 产生一个随机数,作为私钥0 m& A0 K3 A" B$ h4 s" S
$ bx seed
9 p4 M. C; w! M' P2 N6 Z$ Re0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75   #随机种子" F0 D. _( C; I$ }  ~& ~5 ^
$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75
. p$ }2 a/ H) ?# j6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0   #私钥
' d7 X) m1 {& V: Gb. 由私钥生成公钥
# d* [0 e" v) V  ^1 w$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0  y( I, l# f3 c+ O% @
02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3   #压缩格式公钥
2 P  [5 i- h+ [: S& i( w# R生成的公钥是压缩格式公钥,因此长度是33字节。首字节 02 表示该公钥是压缩格式,其Y坐标是偶数值。如果首字节为 03,则该公钥也是压缩格式,其Y坐标是奇数值。/ i+ j7 A) `& h/ u
这个公钥的非压缩格式值为 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c。首字节 04 表示该公钥为非压缩格式。' [& A* U( q" {$ a4 q- r
c. 将生成的公钥进行SHA256运算; z* v" n5 n7 ?3 U& {
$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3, _+ u9 g+ c+ `2 e
52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93   #公钥的SHA256哈希值' m2 q$ ^7 O5 }
d. 将生成的256位哈希值进行RIPEMD160运算
6 F1 a# s5 P0 ?, K5 U$ R* M8 v$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93
8 ?) @. {2 U$ D% _' z3 i34c18387ebedacab545ced2027c461ce05077468   #RIPEMD160哈希值7 g  t' f+ @) X$ o7 l
e. 版本号和公钥哈希值进行双SHA256运算得到校验码$ H% q" X: G, k2 ~3 X
比特币主网的地址版本号为00,加到上一步得到的哈希值前,然后计算双SHA256哈希值。
8 D# W4 b* t) i' C# g$ bx sha256 0034c18387ebedacab545ced2027c461ce05077468   #首字节为主网版本号00
6 N3 R2 C& `1 zdfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851
$ X/ B- A$ s/ n3 `. r5 n  _$ bx sha256 dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851
& i, {. \3 o% N! uc6754cbc7fee2f70418f6815aab85008811a93c73546c5d4d4240b755d12a313   #双哈希结果/ l0 x0 k: c2 e  W; ]8 o) h$ z# w
最后取双哈希值的前4个字节 c6754cbc 作为比特币地址的校验码。
8 o! l. U5 z- h1 m- af. 将版本号、公钥哈希和校验码连接并进行Base58转换
6 I" U; T) ~6 u: i# V9 U$ bx base58-encode 0034c18387ebedacab545ced2027c461ce05077468c6754cbc5 _6 U% w* K2 {' n
15owxYraAxdfneQETbovBVigZg8a5Cv5Ns   #最终地址
# w7 T2 ^* S% ~$ y* s将版本号 00、公钥哈希 34c18387ebedacab545ced2027c461ce05077468 和校验码 c6754cbc 依次连接得到 0034c18387ebedacab545ced2027c461ce05077468c6754cbc ,并进行Base58转换,得到最终的压缩格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns。( D, m7 N# \* I
因为Base58转换可逆,可以从地址转化为16进制字符串:
0 g6 p/ m! |. z1 @$ bx base58-decode 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns9 N+ }& p7 z, ]6 F4 d) V
0034c18387ebedacab545ced2027c461ce05077468c6754cbc
- f( K7 H+ h: k4 _3 W" H前面提到,公钥格式表示可以压缩格式表示,也可以非压缩格式表示,那么本例中,非压缩格式公钥地址是什么呢?& E: G; m7 |% s( d! @  d3 `) ?
$ bx ec-to-address 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c. q8 ^* o4 |  `8 N, K/ a- j) T/ ^
16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5   #非压缩格式公钥地址0 @* Q. E% \. k6 ]; e
比特币非压缩格式公钥地址为 16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5。该地址与压缩公钥格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns 等价,都可以被同一个私钥验证。
, g  s* q6 m8 F/ A0 `7 ^# Q; _懒得敲代码的同学可以直接在https://www.bitaddress.org/网站上导入本实例的私钥 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0 进行验证。
* k( V, w4 O* W% K0 C' ^2 J; W2.2 测试网地址实例  Z' D; L: x& \; D- Q* j/ ^
测试网地址生成过程与主网的地址生成过程相同,唯一不同的是采用的版本号,测试网的版本号为0x6f,主网的版本号为0x00。因此,生成比特币测试网地址的过程如下:
; W9 f9 ]  i5 [- I5 ~a. 产生一个随机数,作为私钥
" b+ s: h  c0 ]3 D: T* D$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75
9 n4 Q1 U8 ~/ Q1 q. B: T+ R6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0" P# {& P6 ]  [4 l8 r/ e
b. 由私钥生成公钥$ j+ S' Y- l" b+ i+ O, q/ U
$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0! Z) l! Y0 ?# V
02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
7 z( G( c; a+ Cc.将生成的公钥进行SHA256运算& O# l- B* R# F& I- l
$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
, w$ }9 K0 K  M$ U6 w2 c6 j2 l52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93
% F; i: M! Y6 {1 ]' |# d) w6 ld. 将生成的256位哈希值进行RIPEMD160运算
5 c) k" c. j( i$ N. g% {$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93  C4 }9 P& Z9 p# A0 O
34c18387ebedacab545ced2027c461ce05077468
: Z/ ^; H( f) D; R/ ve. 版本号和公钥哈希值进行双SHA256运算得到校验码
, p6 k; r% R# A4 J! _8 ?注意,此时的版本号为0x6f,表示的是测试网的版本号。6 Y. w, P5 Y( L/ l0 t
$ bx sha256 6f34c18387ebedacab545ced2027c461ce05077468
/ T% C0 g" }# D5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d47 t1 a9 t  u* t/ e  T7 P) h+ w
$ bx sha256 5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d4% f' g7 m# A% m
0e5c8446d3f7f85168beb2001060bb2f3315e1b7f718ceda4a8fed264e422ac3
, C) y" U2 f. E, m+ c/ p; r4 w$ Mf. 将版本号、公钥哈希和校验码连接并进行Base58转换+ o$ n% w* W/ p  ~* u2 T
$ bx base58-encode 6f34c18387ebedacab545ced2027c461ce050774680e5c8446( K  @* w. q7 N! D- g% |
mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ2 k; K; A' H1 z) X; Z
或者直接指定特定公钥生成测试网的地址:
4 c6 g. Y, [+ m1 E$ bx ec-to-address 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3 -c .bx-testnet.cfg; h" Z4 ~7 y: F: A3 t
mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ
+ `$ q0 r2 c0 v4 A0 C- \最终得到比特币测试网的地址mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ。& a3 h+ g! f+ L  ?# M- {
3 参考资料: w# R1 M  U) Z# m* Y3 g" d: N( ^5 C
List of address prefixes:列举了不同前缀码生成不同的比特币地址。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16