Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币地址生成过程

zmhg799417
273 0 0
1 比特币地址生成过程
+ Y- |/ l0 t1 I一个比特币地址的生成过程如下图所示:
( g, e3 D9 R7 q5 j% {& H; D. s( ?; k
5 ?6 u& J8 p/ `如上图所示,比特币的生成过程分为以下几步:! I& e1 X) |. _
a. 产生一个随机数,作为私钥;
% {" F7 ?+ j: Y7 E: ib. 由私钥生成公钥;
. B: T7 _8 d! o+ _: R0 m: v0 Mc. 将生成的公钥进行SHA256运算;  Y* E8 l9 ~4 ~. P  Y
d. 将生成的256位哈希值进行RIPEMD160运算;# I3 D' l' W3 d# I- d/ E0 a9 G8 B- A
e. 将版本号和公钥哈希值进行双SHA256运算得到校验码;
$ W! R( h3 V7 Y7 M  if. 将版本号、公钥哈希和校验码连接并进行Base58转换。. v) |8 N) n% |3 b! r& d) K
2 地址实例
5 s+ ^* D& O* x: W6 {8 m8 t/ I2.1 主网地址实例6 R9 I6 B8 `. }* d) X
比特币私钥本质上是一个256位的0和1随机序列。从一个私钥生成比特币地址的过程从上图中已经清楚的知道了,接下来将从一个真实的例子说明整个过程。在此,需要使用比特币命令行工具Libbitcoin Explorer,这是一个功能强大的比特币命令行工具。  W& y+ }5 m' w% D. w  T
a. 产生一个随机数,作为私钥
! S$ }/ _1 C# M! }1 @$ bx seed
: \) Q' Z4 G0 b4 be0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75   #随机种子0 M! Y$ s# z* y, ?: n0 r6 ^+ k1 z
$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75, \: I% |& [7 L2 H; ]) e
6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0   #私钥
0 b( I% l' e3 g  t& j4 g9 }b. 由私钥生成公钥: ^# B* I8 P7 v! g& ~7 Q# Y
$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0
& I" E( M' ~/ `8 j) u4 m4 l4 |02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3   #压缩格式公钥
& H, d. u5 ?* H. a  g2 Z生成的公钥是压缩格式公钥,因此长度是33字节。首字节 02 表示该公钥是压缩格式,其Y坐标是偶数值。如果首字节为 03,则该公钥也是压缩格式,其Y坐标是奇数值。7 s( b# v4 D) u2 ]0 x3 i
这个公钥的非压缩格式值为 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c。首字节 04 表示该公钥为非压缩格式。
- U+ n7 p6 x% E3 M3 x8 vc. 将生成的公钥进行SHA256运算
, i; h/ [3 v. ~$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a32 T* @# n5 q* Z+ O8 e: U; m# |$ R
52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93   #公钥的SHA256哈希值
8 z+ V# K  w5 A5 D. Kd. 将生成的256位哈希值进行RIPEMD160运算
/ i; r! w3 i( `, b& x( h* r3 U; g7 l1 m$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd930 ~  u1 D$ w) l, K* k2 ]
34c18387ebedacab545ced2027c461ce05077468   #RIPEMD160哈希值# `7 E4 W# O% t" z, }
e. 版本号和公钥哈希值进行双SHA256运算得到校验码0 h8 H! j: |- L, u, }, X
比特币主网的地址版本号为00,加到上一步得到的哈希值前,然后计算双SHA256哈希值。
. k5 c+ V  ]4 |$ bx sha256 0034c18387ebedacab545ced2027c461ce05077468   #首字节为主网版本号00: B/ k; L3 p6 d* [: F& i2 e
dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851
& ^' N8 I$ K  F: ?$ X$ ^, n3 q$ bx sha256 dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851/ M7 N! [7 A7 [2 f
c6754cbc7fee2f70418f6815aab85008811a93c73546c5d4d4240b755d12a313   #双哈希结果
% {0 V$ L" `# e! e/ z( h5 Q8 |/ d$ y" h, Z最后取双哈希值的前4个字节 c6754cbc 作为比特币地址的校验码。# j% c) P1 C+ [! l4 B
f. 将版本号、公钥哈希和校验码连接并进行Base58转换8 P- _: c" ]6 r0 _! h5 o4 T  m! |
$ bx base58-encode 0034c18387ebedacab545ced2027c461ce05077468c6754cbc5 B* v% u6 n4 A3 J7 G: `
15owxYraAxdfneQETbovBVigZg8a5Cv5Ns   #最终地址9 T4 n/ U5 ?8 B  N& C+ r- n8 Y
将版本号 00、公钥哈希 34c18387ebedacab545ced2027c461ce05077468 和校验码 c6754cbc 依次连接得到 0034c18387ebedacab545ced2027c461ce05077468c6754cbc ,并进行Base58转换,得到最终的压缩格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns。
  i+ `1 I0 \7 P1 f因为Base58转换可逆,可以从地址转化为16进制字符串:' ]$ H6 b- R* `. X; k, x( Y
$ bx base58-decode 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns) v# Q: V" G4 _& i! ?' F: K% ~, @
0034c18387ebedacab545ced2027c461ce05077468c6754cbc
9 N9 S4 ~" Q' M) I0 Z/ C% {4 X, {前面提到,公钥格式表示可以压缩格式表示,也可以非压缩格式表示,那么本例中,非压缩格式公钥地址是什么呢?5 B% ~& W4 @8 ~/ y" u6 V9 B" o3 Z
$ bx ec-to-address 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c, r/ L6 S9 P5 `
16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5   #非压缩格式公钥地址
  G0 f" g  X1 t3 T( J1 V比特币非压缩格式公钥地址为 16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5。该地址与压缩公钥格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns 等价,都可以被同一个私钥验证。! j1 O2 l/ _0 o. M
懒得敲代码的同学可以直接在https://www.bitaddress.org/网站上导入本实例的私钥 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0 进行验证。- T- e( J( A* N/ D1 I7 d
2.2 测试网地址实例
$ V3 ^/ c% n' {: W, K/ q8 M测试网地址生成过程与主网的地址生成过程相同,唯一不同的是采用的版本号,测试网的版本号为0x6f,主网的版本号为0x00。因此,生成比特币测试网地址的过程如下:6 d7 }8 A! f5 j  R/ s- C# Q" m
a. 产生一个随机数,作为私钥
3 G3 x. E2 z! D5 k9 t% R* x2 c$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75& m" Q7 M& L0 R; K% {
6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0
; e: L8 `( [: c2 P! n7 lb. 由私钥生成公钥
5 R6 Q) J6 h9 _8 B- U$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d06 v  ^/ P4 e2 Q! c" Y/ ~! U
02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
+ G$ \& W5 e0 V6 m6 Zc.将生成的公钥进行SHA256运算( t4 d4 ]5 }: D! a: J
$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a32 W7 t, T2 w& X+ ]  ?3 y
52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd931 u: u" q+ _, v4 N9 V) n# H
d. 将生成的256位哈希值进行RIPEMD160运算
0 x: ?; b' p$ l$ K6 C! X$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93
* j$ ~$ ?, w4 |# P34c18387ebedacab545ced2027c461ce05077468
) H0 o7 E- H: {: ?1 y" ]4 B; c  c2 m- ^e. 版本号和公钥哈希值进行双SHA256运算得到校验码0 c! K6 g. G9 {; e0 m; Z" \
注意,此时的版本号为0x6f,表示的是测试网的版本号。2 o6 ]  w' [  E9 K5 `; a
$ bx sha256 6f34c18387ebedacab545ced2027c461ce05077468
" C/ B, ~, X! v% q5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d4
& D, y/ B5 g. H5 q$ bx sha256 5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d4! b$ @: [7 W( @2 ]% O3 d, Y2 a
0e5c8446d3f7f85168beb2001060bb2f3315e1b7f718ceda4a8fed264e422ac3, ^, `3 Q" c) q, V. O7 q& l
f. 将版本号、公钥哈希和校验码连接并进行Base58转换
& S  Y; W- Z: `/ T2 o! B$ bx base58-encode 6f34c18387ebedacab545ced2027c461ce050774680e5c8446
& v! g; p6 m! c8 P; o  u6 L# D/ v# AmkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ( L# v. s3 n' b
或者直接指定特定公钥生成测试网的地址:
9 U- W5 V& O# b; ~8 E# ]* g$ bx ec-to-address 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3 -c .bx-testnet.cfg
0 W& k, Z" \1 |mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ% R  @# i+ E) Q
最终得到比特币测试网的地址mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ。
7 q+ l6 ^8 m/ i. H3 参考资料( S- I" l$ p; e* p3 ^% F+ g4 ?
List of address prefixes:列举了不同前缀码生成不同的比特币地址。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16