Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
btc address: 1FmWXNJT3jVKaHBQs2gAs6PLGVWx1zPPHf: {6 k2 f/ G( z8 w8 N

+ _% D; E9 Q" A7 ?eth address: 0xd91c747b4a76B8013Aa336Cbc52FD95a7a9BD3D94 @: ?. h2 d& O3 z
! v3 [1 x$ i+ q- k
以太坊生成地址的方式跟比特币比较类似,也是 私钥 -> 公钥 -> 地址,以太坊只是在公钥 -> 地址做了简化。
# |8 s+ Y+ S, U2 g
3 L' G; m" t8 h- K! l1 T# Y0 g以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。, Q5 ?6 j! e) X& @$ ^3 q# d% u7 |4 A

# t; @+ O9 W4 r得到公钥后,对公钥做Keccak-256哈希运算,然后取最后的40位16进制字符,得到的就是以太坊地址。. z2 A1 q: _8 H% v
, S5 N& J$ D/ c, p9 @
生成以太坊地址跟比特币地址都是不需要连接网络的
# E2 l9 V, p$ S1 U! E& b
- Z! m6 ]8 \' B% ?  P& {/ jpython code 生成以太坊地址; e1 @; Z$ @3 }" @# }2 t# l  B

% j7 o) L6 @) Y- k( x( E: Kpython首先安装类库" `/ f6 U* {7 Z* f+ L
2 c& c+ `4 y0 g6 `4 p" s# o/ D& |3 a8 b
pip install ecdsa) R: d7 E( s% A7 y9 b5 P4 v4 T( D& ?

- t4 M) j, s2 c: A4 q# x: U/ J1 G/ U) kpip install pysha30 K8 K, A' I+ B. F# d! X1 n" p2 e
. u- A( B7 K4 N2 A9 V! c2 r
import binascii
- U$ Y. Q0 L' _
0 g. s0 m: k( p$ L2 `: k$ H; I- pimport sha3
% }. {/ K: ^& n3 n; S9 U9 z7 t, o: [( F0 J. E% S+ o
from ecdsa import SigningKey, SECP256k1- D- y) P; J& g* b
0 p) v9 P% B6 `4 V7 f) c: S+ M) t# N
priv = SigningKey.generate(curve=SECP256k1) #生成私钥: t, K  ~+ i% `2 X9 s- [+ r

$ |# t6 e# x8 V4 K' Z0 Rpub = priv.get_verifying_key() #生成公钥( Q6 q1 l) `& \! i! i

6 L1 L% T; B- dkeccak = sha3.keccak_256()  o/ S0 f8 ]  R+ K$ B

# |" X8 d% b' q" zkeccak.update( pub.to_string()) #keccak_256哈希运算
& K+ B. {1 Q5 ^8 V# v2 k! F0 x# N7 ~9 l4 O
address = "0x" + keccak.hexdigest()[24:]
% V( L- d: b# H$ `4 c: z6 q7 r# v, h
+ H$ |9 d2 A; k+ j! ^1 |* y3 W! Y8 bpriv_key = binascii.hexlify( priv.to_string())( R  y( F5 |+ i2 W+ Y; j4 X5 C
/ M8 j" t3 q' _" I( y: Y3 O0 F4 i0 s
pub_key = binascii.hexlify( pub.to_string())
( O4 I$ g% `7 v# U' H5 |. \% W/ W+ g
print("Private key: " + priv_key.decode() )) R8 M* {  u% E' n( z( [! o

0 A+ [0 c! J( u% O/ {- @) mprint("Public key:  " + pub_key.decode() )" }  r2 l# S/ w" r3 K5 |
* x' _6 ], Y" W8 d+ Q
print("Address:     " + address)
) @2 A* t- f$ r0 R% E# r+ i5 |4 Z3 J
* [6 M0 Q7 k) L# Address: 0xd38d3c226d0a86ce9932608edac39163fcbc550e
* }, y$ ~" |0 ^' H6 K: K6 W* S  s$ _1 l- ^' J% N! e
来个骚操作,用同一份私钥来管理比特币与以太坊5 ^' ?: D5 a" g7 R9 ?' ^3 S8 D: z

6 N8 a2 N* B8 Z既然以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。9 H, O( q9 M6 s8 {

( B5 k; O2 L; g那我们就用 Bitcoin地址是如何生成的得到的公钥
2 G7 L6 `$ G% [4 z  \2 }- ^4 L% r  t4 I- c7 B' d! z' f
04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d,生成一个以太坊地址。& N% {/ ~8 [4 \# P3 D1 t
! w+ X/ G/ f2 J7 m/ q6 r# \) f4 d
这个公钥是通过openSSL得到的未压缩公钥,以太坊不需要使用这种类型的公钥,只要把首位的04去掉即可。$ Z5 w( x: P; `9 {  p+ n1 U9 ?

4 F% ~0 g2 B3 l+ E% q/ yimport sha3
+ n  j5 D! g3 c# c. D5 `( S% j2 _3 r  I1 @) s" y
import binascii
5 i$ }+ l1 @; G# J2 c/ J: ~) R
4 B4 n1 c1 v4 R6 E_openssl_pub_key= "04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d"
3 G% i  o. Q4 R  \* J" j
, O' S( F! A" m3 {_pub_key = _openssl_pub_key[2:]
- t/ j1 z$ d1 h! S# A" }: W0 l& q9 R9 O9 i
_pub_hex = binascii.unhexlify(_pub_key)2 u$ A& b3 l' J

1 @- {/ ?5 }1 f! d+ Ekeccak = sha3.keccak_256()
7 p- N* U5 v+ x2 ?' A- S3 o
& D9 ]1 H/ X! P8 f( qkeccak.update(_pub_hex)7 o/ Z+ b5 q& ~
+ g; a) h; Y" S  F. P
address = "0x" + keccak.hexdigest()[24:]
  x/ d& O+ J" L! @- ^
7 \- t* Y. A) ?5 a- G3 T% E$ nprint address # 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f# I7 \- X9 \& O+ q9 Y3 Z( n% J- j

4 ]+ b+ R# \, _+ ?4 r: `这说明啥?我用完全相同的私钥,分别生成了比特币地址与以太坊地址,这两个完全不一样的地址用的是同一个私钥。* G0 [: F* t6 `/ E
7 \9 ]2 ?  V* E2 C# y6 j  w' h2 A
以太坊地址 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f
* N& Y  U  O2 s6 N
* \4 I" N# l* {. q与比特币地址 14xfJr1DArtYR156XBs28FoYk6sQqirT2s的私钥竟然是相同的。
6 S0 t/ H% t- h. Q/ Y* ~" Q6 u( k0 i% }/ O: L
这给资产管理带来很大方便,但如果一份私钥泄露了,2份资产都有可能被盗。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16