Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币地址生成过程

zmhg799417
267 0 0
1 比特币地址生成过程
7 D3 C: y) M7 F! Q8 ^8 [3 P一个比特币地址的生成过程如下图所示:3 x8 ^0 z* g6 O5 N/ Q

1 a- D; Z+ `# i; Z+ w6 \2 U& T如上图所示,比特币的生成过程分为以下几步:
3 V% I$ G+ {/ P. Q, G7 Aa. 产生一个随机数,作为私钥;
' y4 a# U1 Z+ u" _5 Hb. 由私钥生成公钥;, |6 L/ B' @2 _
c. 将生成的公钥进行SHA256运算;+ O) i6 A; @6 z" j
d. 将生成的256位哈希值进行RIPEMD160运算;
& A8 r) V1 I& i! v( ae. 将版本号和公钥哈希值进行双SHA256运算得到校验码;
# y0 W8 }. q6 t+ S5 O( ?f. 将版本号、公钥哈希和校验码连接并进行Base58转换。: K- E( b5 v. Q7 q% J+ R
2 地址实例
& b) R5 n4 r, f  s3 k  P1 Z2.1 主网地址实例
; C" E9 E0 @4 l$ T2 A5 {2 ?" s  B比特币私钥本质上是一个256位的0和1随机序列。从一个私钥生成比特币地址的过程从上图中已经清楚的知道了,接下来将从一个真实的例子说明整个过程。在此,需要使用比特币命令行工具Libbitcoin Explorer,这是一个功能强大的比特币命令行工具。
$ a2 t1 E! r/ q3 N9 C0 P/ C- \( Z1 pa. 产生一个随机数,作为私钥
9 T: ?8 u0 u6 Y0 j. a; }$ bx seed
' U& Q, Y3 M( j! L: a1 |' ye0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa75   #随机种子
3 _( Z3 H3 S! s8 s5 r$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa752 ?7 {6 U+ l5 ?; L
6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0   #私钥
- W$ b# o$ g& Vb. 由私钥生成公钥
( k0 e. S- g/ L3 Z: i1 q' r1 ^9 @$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0
& T; U; {6 S; B# Q: J4 U: s7 k* k7 ?02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3   #压缩格式公钥' g" t. V- s. `" [" @' K; f7 {
生成的公钥是压缩格式公钥,因此长度是33字节。首字节 02 表示该公钥是压缩格式,其Y坐标是偶数值。如果首字节为 03,则该公钥也是压缩格式,其Y坐标是奇数值。
' U9 k1 ^& Y5 J4 o: e. \/ ?7 K* u- `这个公钥的非压缩格式值为 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c。首字节 04 表示该公钥为非压缩格式。5 Y2 |/ K  X, F8 U1 A
c. 将生成的公钥进行SHA256运算
) W* j. f8 T8 F+ a( L$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
: Z# d; r' J6 h9 ~1 U3 a) n52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93   #公钥的SHA256哈希值* i$ P+ f! ?, Y  x) Q
d. 将生成的256位哈希值进行RIPEMD160运算( B0 d' X5 P: f' _
$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93
1 u6 u8 \  v1 U8 L; `  J. N34c18387ebedacab545ced2027c461ce05077468   #RIPEMD160哈希值5 y+ ^3 v+ G8 S; n) B5 [! C- J
e. 版本号和公钥哈希值进行双SHA256运算得到校验码. ?5 d  U6 F7 v1 x, ^# z
比特币主网的地址版本号为00,加到上一步得到的哈希值前,然后计算双SHA256哈希值。
% h& q! U# G9 J' ]" G; v# W/ W$ bx sha256 0034c18387ebedacab545ced2027c461ce05077468   #首字节为主网版本号008 U  |/ B! D' n+ x' ^6 ^  _& Y
dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851
! K& K4 C# ^4 R) X" o! y" U  n$ bx sha256 dfd7a84d2936267cc81cc00028704f5d98c7545177526035923f85ee2fe1d851- [0 _1 k3 m$ i+ {9 t
c6754cbc7fee2f70418f6815aab85008811a93c73546c5d4d4240b755d12a313   #双哈希结果
9 d: ?& W! g6 Y& l, `最后取双哈希值的前4个字节 c6754cbc 作为比特币地址的校验码。( z5 T+ q! k( \
f. 将版本号、公钥哈希和校验码连接并进行Base58转换
1 B- U7 U9 E; ~$ bx base58-encode 0034c18387ebedacab545ced2027c461ce05077468c6754cbc, b/ G# R7 d1 e- U
15owxYraAxdfneQETbovBVigZg8a5Cv5Ns   #最终地址+ ?, W; B1 Z& F
将版本号 00、公钥哈希 34c18387ebedacab545ced2027c461ce05077468 和校验码 c6754cbc 依次连接得到 0034c18387ebedacab545ced2027c461ce05077468c6754cbc ,并进行Base58转换,得到最终的压缩格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns。' [7 y; C2 Q: ]" E$ q
因为Base58转换可逆,可以从地址转化为16进制字符串:" S7 u2 q' B! l5 c7 s2 E% Z
$ bx base58-decode 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns
) ~, t& t( l$ f# z4 J4 A/ [0034c18387ebedacab545ced2027c461ce05077468c6754cbc
6 v6 U0 H% j% m; B; M4 g前面提到,公钥格式表示可以压缩格式表示,也可以非压缩格式表示,那么本例中,非压缩格式公钥地址是什么呢?8 ^  P) y- P# d5 [& j
$ bx ec-to-address 04373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a30f71963b7f442c7a96ae7b6436f2ea92c917d2484fa0d1e7f988df22a8f35b2c
/ M: l  K9 |, T4 k$ C1 ~7 h16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5   #非压缩格式公钥地址3 D2 U' U8 g, `( y
比特币非压缩格式公钥地址为 16Q8SWS9vbwYX96Njqaf2Hf4EaqTeehBu5。该地址与压缩公钥格式地址 15owxYraAxdfneQETbovBVigZg8a5Cv5Ns 等价,都可以被同一个私钥验证。
- |  p. H; v& `! G- ]0 Z懒得敲代码的同学可以直接在https://www.bitaddress.org/网站上导入本实例的私钥 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0 进行验证。
9 [' G) a) R1 V( N0 g2.2 测试网地址实例5 V# ~7 d& H7 D; ~1 G: `7 n* V
测试网地址生成过程与主网的地址生成过程相同,唯一不同的是采用的版本号,测试网的版本号为0x6f,主网的版本号为0x00。因此,生成比特币测试网地址的过程如下:9 _7 R0 k, \- r1 t% `
a. 产生一个随机数,作为私钥
. k9 `- ^# e+ A' [2 K0 Z$ bx ec-new e0dac469a482f6f06fa4c1e33ae0cd8751e87156b2cdaa757 u5 `8 H! a4 i6 t8 I
6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0, g' p+ i' D5 ~. m0 f# D
b. 由私钥生成公钥: u% u0 A4 c$ \! s( O
$ bx ec-to-public 6cad8e955967818e73a9ad1c8b0a4423910634e92a42b36820edc3a88606c7d0
6 o  [3 ~( `( ?: G/ C* ^8 ~' A02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
/ g0 q) n: f9 B! {& F8 J! nc.将生成的公钥进行SHA256运算
1 n, j4 v5 |4 t4 Q$ bx sha256 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3
# a+ y' K" E& R  X2 D52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93: }" {* E+ t* j8 J0 l
d. 将生成的256位哈希值进行RIPEMD160运算
3 b) O% X5 a+ {6 m! `$ bx ripemd160 52c56b7b490e6f0455e94a3889bf585b27bb7b4e514a0225d79c0e646208fd93
4 G9 B8 P$ `3 A34c18387ebedacab545ced2027c461ce05077468" w0 v4 `) v; p8 U5 n  G9 q3 M
e. 版本号和公钥哈希值进行双SHA256运算得到校验码
" _! f+ H; [% @3 d$ J' }+ S5 A( x注意,此时的版本号为0x6f,表示的是测试网的版本号。" M, }! `0 W: ~& i
$ bx sha256 6f34c18387ebedacab545ced2027c461ce05077468
) q5 q% R* a- ~6 H6 m5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d4
* p- f" y1 a$ J$ bx sha256 5792fdcc41623473b2656eeab6c39f4c8e369d1302186b6303eeeba01a3316d4
$ S" D7 D( Q, W1 L5 T1 G9 U5 w* X/ ?0e5c8446d3f7f85168beb2001060bb2f3315e1b7f718ceda4a8fed264e422ac3
# X- y2 s6 X" mf. 将版本号、公钥哈希和校验码连接并进行Base58转换
* T% _# C- W. p2 m  `: s$ bx base58-encode 6f34c18387ebedacab545ced2027c461ce050774680e5c84466 Z- Q0 j+ v/ C5 j3 M4 T/ i
mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ: b' T/ V' C4 X- g  z
或者直接指定特定公钥生成测试网的地址:
7 W2 E7 ^3 G# C( X3 Q  Z2 P: [$ bx ec-to-address 02373f06458bc5ac5810d94a26b67963bef01fb52cb1c9ab7b0103fae27dbce6a3 -c .bx-testnet.cfg% d4 |: `" H* m& a; D
mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ
3 a4 Y: H  S' q最终得到比特币测试网的地址mkKuFbwYyz4vZksrBAnJ1Qw1RfjGuVjVpZ。
( }2 U& W2 f7 B2 l: I% q4 k3 参考资料
; Q; h1 q- z9 M( q/ CList of address prefixes:列举了不同前缀码生成不同的比特币地址。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16