Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
btc address: 1FmWXNJT3jVKaHBQs2gAs6PLGVWx1zPPHf8 f) B7 m3 [$ ^' \7 t; q* w; j' h

" l& s. q8 w! h# v9 i* {& ueth address: 0xd91c747b4a76B8013Aa336Cbc52FD95a7a9BD3D9& n- ]4 k, D4 \; M

# }; J7 \6 ~" C' s' i9 ?以太坊生成地址的方式跟比特币比较类似,也是 私钥 -> 公钥 -> 地址,以太坊只是在公钥 -> 地址做了简化。
# L" K$ \% K+ ~/ s- ]# i5 c6 Q5 u$ @7 V+ q5 l; B9 h7 U
以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。
3 b4 G" k: G' |+ b7 T  x4 y8 S! {" _% `# Z3 \: o
得到公钥后,对公钥做Keccak-256哈希运算,然后取最后的40位16进制字符,得到的就是以太坊地址。
1 L9 t  ~( Y$ e7 X
/ @) @; \+ T5 M. X  f) F! A8 @8 G生成以太坊地址跟比特币地址都是不需要连接网络的
1 C* ^, e; _6 S+ S- [: n8 ]2 a% \- X- |) ?2 ~; |. B9 I
python code 生成以太坊地址0 x2 ~; @$ W0 Y( ~' Q

, D6 j! F) E( M  ?2 Cpython首先安装类库# ~; i( e' ^  r& ]

9 }5 R9 J; ^/ ^" [pip install ecdsa; L& M. E" [' u' c( h4 Z* ]1 X

+ Y" _" y4 `  g8 `, f7 D: apip install pysha3  }1 Z7 A  b% ]# s( W/ P% o5 V! g% ~
8 I5 d: m7 t0 ^% l7 j
import binascii
- }" H5 S% |- F, `) c/ b, P$ E9 B- |( ~0 F" W* F8 j
import sha3" G7 B" M& N" U6 h. w/ O+ I
% j8 H: g$ E4 q" W) S5 W
from ecdsa import SigningKey, SECP256k1$ r0 v- r4 M+ |( S2 `0 u( I

) I: @8 ^1 @1 l$ Ppriv = SigningKey.generate(curve=SECP256k1) #生成私钥  a0 |0 [# D+ D+ d

+ v9 ~4 c3 U# ~% |- U( M1 fpub = priv.get_verifying_key() #生成公钥4 N" p$ N' B/ o5 D$ F% z
1 F! y# E; z& F% w& c  t1 @6 x
keccak = sha3.keccak_256(). p0 r6 c- v6 W# r+ K( R
7 E( i5 q4 D" @" D9 |
keccak.update( pub.to_string()) #keccak_256哈希运算, T3 O2 X2 v2 H' l

) _6 K6 l7 h* q/ w! Z$ Eaddress = "0x" + keccak.hexdigest()[24:]
# b9 p/ z0 A) y
& D7 q$ J$ f5 Q' j! T4 X" S# N& fpriv_key = binascii.hexlify( priv.to_string())7 _- b# o: I( `" q" M
0 ~# G3 U4 t  l) S, l4 G
pub_key = binascii.hexlify( pub.to_string())5 Y& G( d' R5 m5 {: L
" b1 [& i" |: ^! g5 i4 R5 e
print("Private key: " + priv_key.decode() )
2 v( R& f- d$ c" T
9 {; ]( \+ a% i& k4 vprint("Public key:  " + pub_key.decode() )! X$ f5 d: q) z% C6 B

* J/ x' h' _/ w! c; G7 vprint("Address:     " + address)
1 H/ A1 J5 p  O/ ]& R4 X# b9 v
. B0 m1 b, A; w. \# Address: 0xd38d3c226d0a86ce9932608edac39163fcbc550e
+ m4 c% S  n, |. ~& h
, N8 f5 z) ^: L来个骚操作,用同一份私钥来管理比特币与以太坊
" ?  I- r% [" n8 w7 A& `8 I; k! I3 S, H2 {9 P: E: ^% z( X
既然以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。
' x0 z- S$ S: I7 p8 u. ]" W9 h; t" J% `
那我们就用 Bitcoin地址是如何生成的得到的公钥" K4 w: `; ~& Y% v4 V# G! z

& M! e& z8 e. V% q  I; f04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d,生成一个以太坊地址。/ O3 J5 B/ Q# h6 ?6 n8 K# i

, ?$ X6 E- M: c6 Q3 K这个公钥是通过openSSL得到的未压缩公钥,以太坊不需要使用这种类型的公钥,只要把首位的04去掉即可。
- f. g9 J2 y! ~% X% U& G9 L* t4 Z3 H8 {5 R* e" I# t3 \; E
import sha3
/ y) {9 s- d3 H2 `" _
! u& m2 w+ I/ q. h) H1 d6 o9 ?4 oimport binascii
- B8 {' p4 c, @2 ?4 p8 ~
7 ]; j+ E: C. J6 T/ `* r/ |3 I_openssl_pub_key= "04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d"; G  z' p4 I8 S* B1 B

* u* a$ h+ m  b  r- E_pub_key = _openssl_pub_key[2:]
! w! B( [# L" ?( X3 w+ h/ r' _! {- D" C: ~
_pub_hex = binascii.unhexlify(_pub_key)8 g: C# i9 e5 E8 M' }3 A0 b/ F
7 P5 O$ Z4 u7 l; K. s+ G& |0 y
keccak = sha3.keccak_256()
4 ~' `9 I: j' M4 q2 d+ s3 S
; `& o5 R4 n$ Ykeccak.update(_pub_hex)9 m/ h, A# z; d$ ]7 W  P

3 f0 c9 V/ E/ _6 C3 t6 C* Laddress = "0x" + keccak.hexdigest()[24:]
, V7 }* S& Z6 ~' V- Z
1 A& `# p+ n8 }: n& Aprint address # 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f% G) g5 c1 r9 M7 v$ D

) u" n( R5 I2 T! M& B" Y  s$ S这说明啥?我用完全相同的私钥,分别生成了比特币地址与以太坊地址,这两个完全不一样的地址用的是同一个私钥。# ?1 E" ~2 Y' L8 D

/ @% R9 l0 }! D& q" n5 ~以太坊地址 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f! _; V! B. Z9 B0 P6 o
7 C6 c* m# D% o5 _4 b9 T- e" M
与比特币地址 14xfJr1DArtYR156XBs28FoYk6sQqirT2s的私钥竟然是相同的。
$ J- M) Y$ R( ~9 D7 Y% F3 j) S  @# i! ^0 a5 b
这给资产管理带来很大方便,但如果一份私钥泄露了,2份资产都有可能被盗。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16