Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
btc address: 1FmWXNJT3jVKaHBQs2gAs6PLGVWx1zPPHf
% }" S6 U$ R7 `8 s- ~/ R; R6 j) O6 K( n& x9 r
eth address: 0xd91c747b4a76B8013Aa336Cbc52FD95a7a9BD3D95 {; {7 [1 p, D* i, H/ q/ @
! j' E6 W: a  F5 ]
以太坊生成地址的方式跟比特币比较类似,也是 私钥 -> 公钥 -> 地址,以太坊只是在公钥 -> 地址做了简化。% K1 `7 M3 {" V

) m# U# P. Q; o9 ?4 q1 O- z! V以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。3 S# R- Z( B- B+ {  H
! F& V+ x. T, O, o5 ?& l
得到公钥后,对公钥做Keccak-256哈希运算,然后取最后的40位16进制字符,得到的就是以太坊地址。
" U- `# Y- X( ?$ J, A# q$ C& X
( `/ _- D, A3 [& K1 t7 R& U生成以太坊地址跟比特币地址都是不需要连接网络的
" I  O) p& C% B# h2 O3 s! ]* h) K; n
* q, d8 W2 r% Y0 `9 Bpython code 生成以太坊地址
% V; ~# O# P% `6 B; E
; H# l0 ^8 Y4 W0 q. ]0 ]python首先安装类库; V8 g$ K0 `" N& `5 ~

3 X6 W! V0 C2 V. lpip install ecdsa
* q" ?8 M& O0 w
/ t/ u8 o  G7 W0 o5 g8 e  N' b$ b$ U4 spip install pysha35 s2 h1 ?  S5 c4 l- J" h. k
) p5 r( Z' m: h) c: d
import binascii
7 @. k, F5 \( m0 o& U
$ G9 R1 _8 D/ T+ Simport sha3; k: s, P: G" `8 ^; v

& k* S( @$ _3 |1 O" l/ ?from ecdsa import SigningKey, SECP256k1
# W  ^- c0 F& M; D6 B! _( O: \+ z' \' b3 h. Q; y8 p
priv = SigningKey.generate(curve=SECP256k1) #生成私钥
% D# h  L9 a; s4 @8 t
% ~' Q  p# f7 c3 J. vpub = priv.get_verifying_key() #生成公钥
' [# i& O' w- \/ c
$ w& w0 C. K- {1 w- s0 H2 D& ekeccak = sha3.keccak_256()& D, l1 O' F9 {. \

+ i) G# {% n8 E+ o8 Qkeccak.update( pub.to_string()) #keccak_256哈希运算
/ }' _& q4 s* U2 J1 ~
! \* Y# E# A* e- `address = "0x" + keccak.hexdigest()[24:]
: u9 [* t# R5 t% o+ O
  A7 f, M( K  G3 J+ cpriv_key = binascii.hexlify( priv.to_string())
; |; R/ T5 g, ], {8 Y7 B
; m: b" t( X% _pub_key = binascii.hexlify( pub.to_string())
" M) N8 a  O( J5 ~. ?  S
4 u) F2 i. X, [4 M/ {* c9 J2 ?8 Dprint("Private key: " + priv_key.decode() )
( `' x$ G- H& f6 F% X: W; W7 `, x# \
8 u9 _. S1 s; F6 N4 M1 P; Xprint("Public key:  " + pub_key.decode() )/ R; A! t* K* r* ]4 P

  B7 G) g: U3 yprint("Address:     " + address). h9 R! V4 z! d  M( h

7 {: [  H. w9 y! ~, h4 T; K" D# Address: 0xd38d3c226d0a86ce9932608edac39163fcbc550e8 Q3 P- f, i. E8 v1 H9 A

1 a0 n& [% Q5 C: X9 r% p来个骚操作,用同一份私钥来管理比特币与以太坊9 A! L' [. l  P5 R) H. I
+ w2 z- H4 \1 T7 @, \: l" c
既然以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。
" J- L/ u$ [+ S
4 s2 q2 x6 s1 F* e% n7 ^' {那我们就用 Bitcoin地址是如何生成的得到的公钥' i. T! r6 }- r% o9 k6 q
7 {8 l" a5 v  I& G* {
04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d,生成一个以太坊地址。
6 ~. N; ]4 h6 ^% p
8 @! @' |! m6 M. O5 D8 L6 p) L& B8 ]这个公钥是通过openSSL得到的未压缩公钥,以太坊不需要使用这种类型的公钥,只要把首位的04去掉即可。
0 D3 s( A* t5 z2 T2 R# L/ l
) P  w6 A( u- U4 P8 z* X8 t1 Kimport sha3
7 `" \  ~  k' v, l6 D' V2 H" j; I# Q1 B
import binascii
+ Z# S; n& l' Z7 ]$ J# C6 I8 \# s8 S' X' [, N  F0 u# i! }% E4 r
_openssl_pub_key= "04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d"
. r9 @* C( Y5 M: I- H
. h  r/ Q' u0 c2 T/ W# C; m_pub_key = _openssl_pub_key[2:]
! o: Y7 u. t- c( r$ k+ O$ t; X3 S: a0 D# @# Q
_pub_hex = binascii.unhexlify(_pub_key)
, g3 ^9 m7 X8 p7 d5 `
+ X: `& Z, C8 \9 lkeccak = sha3.keccak_256()
6 `' S4 \% f0 s( w* A- b8 s( ]9 [6 Z/ S& V
keccak.update(_pub_hex)
: n  Y. I6 o0 {" h4 M0 L8 d& h* L
, S- }* U$ C, e) J( B' Raddress = "0x" + keccak.hexdigest()[24:]
% i  r5 T9 W3 A; W" Q/ N2 E
2 D+ g3 d6 p0 x) Gprint address # 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f/ b/ |& ~0 R  n" y) {) L+ `9 G

- C8 T: J+ V/ e1 r$ ]; i4 }这说明啥?我用完全相同的私钥,分别生成了比特币地址与以太坊地址,这两个完全不一样的地址用的是同一个私钥。
0 g/ R" s* h9 F' K) b8 y* _
, W# E3 J0 W! \  [) g' P& y* ~以太坊地址 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f8 r+ S% m  Q, w6 N

2 T6 w. m* n5 m$ j与比特币地址 14xfJr1DArtYR156XBs28FoYk6sQqirT2s的私钥竟然是相同的。9 \$ h. J1 X) H2 O' C* k  L
4 f0 y* G+ v) T5 |$ L  h0 N
这给资产管理带来很大方便,但如果一份私钥泄露了,2份资产都有可能被盗。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16