Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币地址生成过程

zmhg799417
263 0 0
1 比特币地址生成过程3 b6 G9 \( ~& P$ i, c
一个比特币地址的生成过程如下图所示:& z+ D" j" p6 o5 z0 y3 W

' h1 E  \8 ~5 J. x! I如上图所示,比特币的生成过程分为以下几步:
* }, O; J; m: b8 |& K/ \a. 产生一个随机数,作为私钥;% d" O9 n8 p" D& Q. W
b. 由私钥生成公钥;
' k; w7 `! W0 C- G0 t! q6 ac. 将生成的公钥进行SHA256运算;
, L4 r7 _1 f) P& ud. 将生成的256位哈希值进行RIPEMD160运算;
  _, L4 u( H2 i# `9 se. 将版本号和公钥哈希值进行双SHA256运算得到校验码;$ `: Z/ `& s8 B, T
f. 将版本号、公钥哈希和校验码连接并进行Base58转换。' G$ {* x; A, X( g! r
2 地址实例
% E' J2 T; S8 B1 i0 {3 {$ B$ R2.1 主网地址实例1 u$ l9 K' ^0 q" a
比特币私钥本质上是一个256位的0和1随机序列。从一个私钥生成比特币地址的过程从上图中已经清楚的知道了,接下来将从一个真实的例子说明整个过程。在此,需要使用比特币命令行工具Libbitcoin Explorer,这是一个功能强大的比特币命令行工具。2 ^+ r6 Q: l2 L0 B2 C
a. 产生一个随机数,作为私钥
7 m# X0 k& J/ J9 _4 Y! M! ^$ q$ bx seed
, `1 b9 d/ d4 re0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75   #随机种子) K: Q' D. C" n0 D7 f+ E/ C
$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75
3 v. M0 n0 f  C2 }: I6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0   #私钥7 o: a0 r' N* k0 P
b. 由私钥生成公钥- w2 _- Z* w% p; b/ q3 F
$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0
; z. B7 m/ m( ]$ T02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3   #压缩格式公钥
/ U0 q# a; c( w; \- P' [  m生成的公钥是压缩格式公钥,因此长度是33字节。首字节 02 表示该公钥是压缩格式,其Y坐标是偶数值。如果首字节为 03,则该公钥也是压缩格式,其Y坐标是奇数值。5 r. q" _6 w" U, [- U3 u0 E
这个公钥的非压缩格式值为 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c。首字节 04 表示该公钥为非压缩格式。6 L* U+ w2 j* U) |3 \6 ~) C
c. 将生成的公钥进行SHA256运算
2 ~, m% i6 _& R% ?$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3- f7 l! W; x8 w4 J
52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93   #公钥的SHA256哈希值
1 @1 x& k0 l% Hd. 将生成的256位哈希值进行RIPEMD160运算& J3 f) l" R0 w, Q5 Q
$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd937 g5 l) _# g9 b
34c18387ebedacab545ced2027c461ce05077468   #RIPEMD160哈希值
0 Z. @& ]# r* y) j1 t8 {e. 版本号和公钥哈希值进行双SHA256运算得到校验码0 B+ b2 p, p; ^6 V+ g. b/ I# h
比特币主网的地址版本号为00,加到上一步得到的哈希值前,然后计算双SHA256哈希值。
" X2 c9 X# J- y, @' p$ bx sha256 0034c18387ebedacab545ced2027c461ce05077468   #首字节为主网版本号00- ?  d8 X! A9 q- f) D# B
dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851
2 |( A/ n) X' y& p( ?1 @1 s$ bx sha256 dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851/ {/ I# a) T( z% x' K
c6754cbc7fee2f70418f6815aab85008811a93c73546c5d4d4240b755d12a313   #双哈希结果0 i3 ~* b5 h, w. E' y6 a
最后取双哈希值的前4个字节 c6754cbc 作为比特币地址的校验码。
9 ?! r9 ^7 k% r; U* f5 x% w8 Jf. 将版本号、公钥哈希和校验码连接并进行Base58转换9 i9 z9 s8 i* m5 H
$ bx base58-encode 0034c18387ebedacab545ced2027c461ce05077468c6754cbc
" t& F7 R; r$ x# R3 T15owxYraAxdfneQETbovBVigZg8a5Cv5Ns   #最终地址& w8 b- g: P3 l6 l9 }4 t
将版本号 00、公钥哈希 34c18387ebedacab545ced2027c461ce05077468 和校验码 c6754cbc 依次连接得到 0034c18387ebedacab545ced2027c461ce05077468c6754cbc ,并进行Base58转换,得到最终的压缩格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns。3 X5 b1 Q' a* F& R7 f0 y2 }* n/ P
因为Base58转换可逆,可以从地址转化为16进制字符串:$ }6 R/ j* w" Q: x7 L! Q
$ bx base58-decode 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns
- s% v6 |9 f, F) ^8 K4 t( _0034c18387ebedacab545ced2027c461ce05077468c6754cbc+ E$ ~7 d; f2 r( `( r% c. ]! D
前面提到,公钥格式表示可以压缩格式表示,也可以非压缩格式表示,那么本例中,非压缩格式公钥地址是什么呢?
' W: L  @0 x1 f: P9 v" g, }5 y$ bx ec-to-address 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c- U* s8 U7 Q3 N; y* `3 Y  X" |
16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5   #非压缩格式公钥地址$ N. Y" R  E9 M& T( U$ j% H. q
比特币非压缩格式公钥地址为 16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5。该地址与压缩公钥格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns 等价,都可以被同一个私钥验证。+ g- X  E& }2 g6 L  K# t7 |- Y
懒得敲代码的同学可以直接在https://www.bitaddress.org/网站上导入本实例的私钥 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0 进行验证。
7 S. K" ?  r+ P2.2 测试网地址实例
( A- S4 N, e1 l7 H' O* O测试网地址生成过程与主网的地址生成过程相同,唯一不同的是采用的版本号,测试网的版本号为0x6f,主网的版本号为0x00。因此,生成比特币测试网地址的过程如下:* N+ S; R* W4 U" w* w3 r3 G  [) m
a. 产生一个随机数,作为私钥
! k! ?* s- o0 z4 X$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75
! t) K  m- a  ^: G+ x, `/ z# T6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0( u' ?$ U5 o  ~2 ]* R, f, ]
b. 由私钥生成公钥+ m9 k+ a. ~. z6 ^' y" {7 I
$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0
* [: i, b# l8 f7 X  ]02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
  T3 N3 a. p. `& Nc.将生成的公钥进行SHA256运算: i/ G5 ~" d* E) g- Y9 g- L
$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
5 _( j+ K3 v5 S7 v: W9 c2 r52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd938 n9 H* d1 y# e& h7 Q
d. 将生成的256位哈希值进行RIPEMD160运算+ T5 u# w. U& K9 K9 e; r. [
$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd935 i  T/ P( N8 g9 z% A" J4 ^9 M
34c18387ebedacab545ced2027c461ce05077468
' L2 M: T; I3 E& w: }e. 版本号和公钥哈希值进行双SHA256运算得到校验码' s) D: X+ E+ {3 \7 x  @
注意,此时的版本号为0x6f,表示的是测试网的版本号。
( n/ w1 y5 g! o  Y$ bx sha256 6f34c18387ebedacab545ced2027c461ce05077468, y) {' B$ W2 R
5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d4
1 E7 p0 q0 s. w; Q$ bx sha256 5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d4
# _- a  q0 {, O! v" E. {+ ~0e5c8446d3f7f85168beb2001060bb2f3315e1b7f718ceda4a8fed264e422ac3
: x! x5 [/ z; x7 Vf. 将版本号、公钥哈希和校验码连接并进行Base58转换6 ^+ H* U3 z1 Q( e" i% s
$ bx base58-encode 6f34c18387ebedacab545ced2027c461ce050774680e5c8446
' o1 T3 r  I- e8 V4 E. U) I# dmkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ9 ?) \/ r  A, ?: w# d
或者直接指定特定公钥生成测试网的地址:" U& h! J1 @2 o: m2 M- B! o4 P
$ bx ec-to-address 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3 -c .bx-testnet.cfg2 @, D. E8 r$ c3 ?
mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ
& {2 [0 z& W$ G+ I+ P3 p" U% p9 k最终得到比特币测试网的地址mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ。$ g. S7 o. h+ N4 c9 s- Q' t; a8 [
3 参考资料
/ r; P0 Y* s; I2 u7 N# u8 _6 ]List of address prefixes:列举了不同前缀码生成不同的比特币地址。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16