Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币地址生成过程

zmhg799417
268 0 0
1 比特币地址生成过程
$ B- U3 B; R$ s3 q8 v+ H9 w3 F一个比特币地址的生成过程如下图所示:
! H) u2 U& i  F$ _, Y6 T8 y/ X6 K
& D3 |" f9 u% w1 M- i如上图所示,比特币的生成过程分为以下几步:
! u  k+ m7 [* ~3 Ra. 产生一个随机数,作为私钥;
* f  H8 h' [$ v2 sb. 由私钥生成公钥;; r+ T" J5 N, C1 D- {
c. 将生成的公钥进行SHA256运算;* V$ @6 E* N# L9 U0 {4 M! g5 T
d. 将生成的256位哈希值进行RIPEMD160运算;- i" e1 n0 \7 p2 [
e. 将版本号和公钥哈希值进行双SHA256运算得到校验码;, Y) |  i, D+ w2 a- ~
f. 将版本号、公钥哈希和校验码连接并进行Base58转换。0 o7 T" V& P# h' g, T
2 地址实例0 ]6 A# [1 d' A' L* v# g# M: O
2.1 主网地址实例" t( K3 J- H) j1 O0 E3 h
比特币私钥本质上是一个256位的0和1随机序列。从一个私钥生成比特币地址的过程从上图中已经清楚的知道了,接下来将从一个真实的例子说明整个过程。在此,需要使用比特币命令行工具Libbitcoin Explorer,这是一个功能强大的比特币命令行工具。. q* i' Z  T( N* [
a. 产生一个随机数,作为私钥
& ?/ y$ b' K# d5 T$ bx seed
; M/ E( G4 F* z8 l. O1 k0 We0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75   #随机种子
5 F( {; T* E  J' P6 V7 M$ a' j8 g3 H$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa751 k4 i  Z$ _8 a* Z; D( d
6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0   #私钥
( O8 J+ x: `2 n- \4 ?b. 由私钥生成公钥- S. M% N6 J# L* v
$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d04 _( A: J. n# v% U  e+ E( A
02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3   #压缩格式公钥
( T7 B3 u$ D9 x5 u' f" q3 g# I生成的公钥是压缩格式公钥,因此长度是33字节。首字节 02 表示该公钥是压缩格式,其Y坐标是偶数值。如果首字节为 03,则该公钥也是压缩格式,其Y坐标是奇数值。. d: `% E, N# H
这个公钥的非压缩格式值为 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c。首字节 04 表示该公钥为非压缩格式。
, }( k* _$ [: u8 w( D$ `c. 将生成的公钥进行SHA256运算
7 f" @& O8 O) M7 h( g3 S7 t( v1 R$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
' p, w- U, L! q52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93   #公钥的SHA256哈希值
/ w' e/ L, ^% n4 xd. 将生成的256位哈希值进行RIPEMD160运算  I4 P! }9 T- F( r% T
$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93
3 s, v) j0 R; G) Z2 g34c18387ebedacab545ced2027c461ce05077468   #RIPEMD160哈希值
' A* r5 W8 _! D3 Q% L* l+ h( Re. 版本号和公钥哈希值进行双SHA256运算得到校验码
2 w0 [% W" K; p6 D: h比特币主网的地址版本号为00,加到上一步得到的哈希值前,然后计算双SHA256哈希值。
6 E6 f) `& M  {/ X7 q" b: O( Z$ bx sha256 0034c18387ebedacab545ced2027c461ce05077468   #首字节为主网版本号00
9 C: l0 `+ p. _& Y$ O+ [dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851& W# j% t  O; c# H( _
$ bx sha256 dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851
& G, }/ _2 G% u" }c6754cbc7fee2f70418f6815aab85008811a93c73546c5d4d4240b755d12a313   #双哈希结果
$ ]6 d* ]2 W3 x* B5 \/ S8 Y最后取双哈希值的前4个字节 c6754cbc 作为比特币地址的校验码。
$ C7 f5 P0 W+ C3 [+ ]5 i- Rf. 将版本号、公钥哈希和校验码连接并进行Base58转换
( i( b4 ~5 m0 K8 {5 c" `0 I$ bx base58-encode 0034c18387ebedacab545ced2027c461ce05077468c6754cbc
5 m# K+ u' y; c1 F15owxYraAxdfneQETbovBVigZg8a5Cv5Ns   #最终地址
( w3 q! K+ W2 l. m" V: v% O' B将版本号 00、公钥哈希 34c18387ebedacab545ced2027c461ce05077468 和校验码 c6754cbc 依次连接得到 0034c18387ebedacab545ced2027c461ce05077468c6754cbc ,并进行Base58转换,得到最终的压缩格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns。
' d6 F  @( j1 w- p* D, M/ G- p因为Base58转换可逆,可以从地址转化为16进制字符串:
: }% _$ i$ h1 N* |/ l$ bx base58-decode 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns
/ v2 ^: E: a3 {  l0034c18387ebedacab545ced2027c461ce05077468c6754cbc, q" b6 ]4 a  O7 V& Y
前面提到,公钥格式表示可以压缩格式表示,也可以非压缩格式表示,那么本例中,非压缩格式公钥地址是什么呢?! Z- Q) K2 h; q6 j! a/ X
$ bx ec-to-address 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c
$ C+ O& I* N3 o+ w16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5   #非压缩格式公钥地址& }. m9 ]9 a# n4 }0 x1 j
比特币非压缩格式公钥地址为 16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5。该地址与压缩公钥格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns 等价,都可以被同一个私钥验证。' t0 Q& i6 b* C& w( k
懒得敲代码的同学可以直接在https://www.bitaddress.org/网站上导入本实例的私钥 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0 进行验证。
0 }! x% l) m. c) e6 f$ M. |6 \/ i4 \- f2.2 测试网地址实例
+ s2 m$ S% W# }7 w/ o* I+ ^+ e& ?测试网地址生成过程与主网的地址生成过程相同,唯一不同的是采用的版本号,测试网的版本号为0x6f,主网的版本号为0x00。因此,生成比特币测试网地址的过程如下:# t" _  c5 h7 |7 i) T5 T+ Z- o3 C
a. 产生一个随机数,作为私钥; @& s# G' P2 p" L/ Y- n
$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75- y, |* P% f, O% }) }
6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0
1 C4 K) y- n- s& @0 i4 T( Ib. 由私钥生成公钥
+ N7 B. t2 f6 K& Z  [$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0- J. H- i6 q  x8 F! C( D& ]
02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
: ]- P# F0 y9 s5 l# V8 C$ L. G% Cc.将生成的公钥进行SHA256运算. f& Q, W, ^* P- d6 z; T: M3 n
$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3) Z0 q) i4 Q3 C, t$ Y. d5 {
52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93
' f" g1 v6 Q! z) z) w5 rd. 将生成的256位哈希值进行RIPEMD160运算' F4 J* W' P( A, D1 p
$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd939 v8 [" l. J0 `! x% Z8 g* v
34c18387ebedacab545ced2027c461ce05077468
" z% h  y# k% Z# S1 ne. 版本号和公钥哈希值进行双SHA256运算得到校验码4 e/ [! u1 w# ]% e. Z, s) W( l+ g
注意,此时的版本号为0x6f,表示的是测试网的版本号。
( V: {# m. z( M1 |; A$ bx sha256 6f34c18387ebedacab545ced2027c461ce05077468
9 G+ N7 p2 {/ q: c+ P/ f  Y) O3 \4 B& F5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d42 H! w% n( {+ p* s. f  |
$ bx sha256 5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d4" e, G/ B. X2 l' \& V6 E! d& P! U% Z
0e5c8446d3f7f85168beb2001060bb2f3315e1b7f718ceda4a8fed264e422ac3
4 H' Z8 K' d4 N& Zf. 将版本号、公钥哈希和校验码连接并进行Base58转换7 \: X: n& F3 |. a( v7 p# H
$ bx base58-encode 6f34c18387ebedacab545ced2027c461ce050774680e5c8446
. _# t3 v+ G/ M: {8 H9 _. _' UmkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ
! y3 t9 Z% I% ~或者直接指定特定公钥生成测试网的地址:
& G' l" @8 I7 X' Z4 N$ bx ec-to-address 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3 -c .bx-testnet.cfg7 _/ J" t$ C6 |: p3 c; ]
mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ$ g' k9 o9 w$ q6 ?3 ?& n$ u: n
最终得到比特币测试网的地址mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ。7 f( o" _4 d9 P" ?) g
3 参考资料' R1 i2 \  t0 w. x: S* y. G
List of address prefixes:列举了不同前缀码生成不同的比特币地址。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16