Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
btc address: 1FmWXNJT3jVKaHBQs2gAs6PLGVWx1zPPHf
* N+ i9 M5 ^/ D
8 G% n7 F; O7 L, Z5 Meth address: 0xd91c747b4a76B8013Aa336Cbc52FD95a7a9BD3D9
# q4 w2 \  F: w- K/ `9 m
" Z; ?5 J/ C; ~以太坊生成地址的方式跟比特币比较类似,也是 私钥 -> 公钥 -> 地址,以太坊只是在公钥 -> 地址做了简化。
9 T' w9 l3 E; S1 S
( R7 S+ V" x" G以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。
. T% F8 r# k6 r# b* j/ x( w# ]+ f2 X# g3 a7 Z% [: _
得到公钥后,对公钥做Keccak-256哈希运算,然后取最后的40位16进制字符,得到的就是以太坊地址。
- ^. {3 i3 Z" T, U/ T; w) E4 ?
8 x! X/ B( c9 d, B4 [' r生成以太坊地址跟比特币地址都是不需要连接网络的' {1 j' x. w# i( k" x

0 c2 B3 k. i( W: D) U) k1 Ppython code 生成以太坊地址3 w& o2 ]& |+ K

) L% @( c% k* Y$ k- U6 J1 tpython首先安装类库
4 k" ]! y6 g) A' O- l6 d
7 _$ J. M& ~0 H7 l; dpip install ecdsa
8 L  Y+ R" P( H1 D, l3 @9 N' f  z& q& O, l. p5 `5 w
pip install pysha37 ^" x8 {, I* C: W4 X
  K6 u# h8 }* W+ F" C, y. L
import binascii
* `0 y5 ^! ]/ b* [* K+ s1 t
$ E8 M* O* `( I% Iimport sha3
) Y9 Z  D: o2 y! V- c; J
1 D6 ]) Z6 b6 G  M- w) tfrom ecdsa import SigningKey, SECP256k1
$ B: Y. A( F2 |& v: M8 T# D/ D2 f& R$ R: c9 Y
priv = SigningKey.generate(curve=SECP256k1) #生成私钥
( }4 y# U+ [% y, s
9 x  h# ~8 a1 z( N: X" G  R* e, lpub = priv.get_verifying_key() #生成公钥# |5 `# d: F! d$ @. A( W

: a1 e$ N. W  @$ [; C; gkeccak = sha3.keccak_256()
, ?- G) y+ P" Y. C3 c/ Q5 c! M8 r7 i8 h, a, S# H: ?0 A2 v! T
keccak.update( pub.to_string()) #keccak_256哈希运算  r  Q+ P* j6 e+ a
2 i7 X6 J% c+ i$ f! Z: i0 S
address = "0x" + keccak.hexdigest()[24:]
2 _1 m2 J$ W. \6 {$ z8 {
6 w4 I9 a! u3 f) T: \. l+ Rpriv_key = binascii.hexlify( priv.to_string())
; ^! h3 ~. D5 y$ c
; z8 I7 u2 X7 e; |% n" t& x; g3 opub_key = binascii.hexlify( pub.to_string())6 i9 H/ r! z% r4 H9 [

5 W: r& f; c  T* f/ rprint("Private key: " + priv_key.decode() )" @  w( a7 j! U
( J4 U5 j; y. R$ S4 j! V
print("Public key:  " + pub_key.decode() )+ u5 y/ J4 ]* `, j

% C5 h& q8 ~( f1 ]print("Address:     " + address): j! m# @8 B; p
) z9 _' v4 {& `: z* H% P" f
# Address: 0xd38d3c226d0a86ce9932608edac39163fcbc550e% r. s6 K" h* @

7 R' k& T  F+ q. p2 p来个骚操作,用同一份私钥来管理比特币与以太坊3 S- w  @' |# n+ ^3 ?2 f

9 h8 D+ f; ~5 v$ U既然以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。
/ }. `/ x/ Q: J' Q6 U- \6 B8 a1 j5 i# }
那我们就用 Bitcoin地址是如何生成的得到的公钥+ _! B* h- {4 C! t' K
' ?6 V: p* }8 E! L$ x* P
04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d,生成一个以太坊地址。
- w- ^4 w# _+ A9 A2 Q0 d- ~- S( X7 Z# j
这个公钥是通过openSSL得到的未压缩公钥,以太坊不需要使用这种类型的公钥,只要把首位的04去掉即可。% e0 |3 K$ V9 w2 Q6 x

+ O/ K% ?+ D% a' _9 m6 Simport sha3
7 \6 \9 S) z1 e6 L2 ]; l! b
* e: ]  ?% {/ u  z- g" Pimport binascii
0 s9 m1 a' V8 D1 o% P3 H1 d% y# }  Q4 a" l5 |
_openssl_pub_key= "04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d"5 ]/ z" m% [" T1 O0 L- Y2 X2 m
6 Z7 O) J  B' }$ N2 d9 i5 E
_pub_key = _openssl_pub_key[2:]  ^: I/ D/ `# N) _9 a1 p1 {

' N, p9 d( D+ [- Y  J1 ?5 g0 q_pub_hex = binascii.unhexlify(_pub_key)1 @9 x3 R0 ]3 T$ [$ v: t/ u( j

3 e) G- n" X5 D% {keccak = sha3.keccak_256(). v; Y7 V: i( {! r! [( I
8 Q2 G6 h5 F" O" }
keccak.update(_pub_hex)2 [' `% e9 @3 @! K  l

% O3 O6 u, _2 A$ q! v1 ^address = "0x" + keccak.hexdigest()[24:]
" x9 X, E9 P; I1 V1 B: f: C5 @% g" J4 C
print address # 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f# O  I/ t! r: D1 S

7 g4 f2 g0 u8 m4 |) a! X这说明啥?我用完全相同的私钥,分别生成了比特币地址与以太坊地址,这两个完全不一样的地址用的是同一个私钥。0 G9 @; r5 n& I* P) Y
! Y  [/ `$ z6 O/ S; O5 [) Q
以太坊地址 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f4 J- ]& D0 \# y

: i7 a8 T4 C# ^  a% D8 D2 _" s与比特币地址 14xfJr1DArtYR156XBs28FoYk6sQqirT2s的私钥竟然是相同的。
7 w# E5 K, l$ R; t2 S/ }' a: M; F" r3 W
这给资产管理带来很大方便,但如果一份私钥泄露了,2份资产都有可能被盗。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16