Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
btc address: 1FmWXNJT3jVKaHBQs2gAs6PLGVWx1zPPHf4 Y$ s& a8 u9 u* ]7 t
6 K) x5 _# i% `1 }# u
eth address: 0xd91c747b4a76B8013Aa336Cbc52FD95a7a9BD3D9
4 p" E: M0 T& K* y
; w3 X4 k( a) a3 Y) g以太坊生成地址的方式跟比特币比较类似,也是 私钥 -> 公钥 -> 地址,以太坊只是在公钥 -> 地址做了简化。2 d& M7 _6 \" W) t
$ v  I, ^" @& i2 V6 e- Z
以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。" [- U+ @! m, T8 g! n

6 V  z& U4 B; s- }- x得到公钥后,对公钥做Keccak-256哈希运算,然后取最后的40位16进制字符,得到的就是以太坊地址。
  r/ u6 }8 I( s) W& e$ I  {
3 w4 z+ t7 F4 P; c5 b# Y生成以太坊地址跟比特币地址都是不需要连接网络的
$ ?! V; r# N- G& t0 Z6 o. M9 j6 h# N/ g
python code 生成以太坊地址9 |. y- S! \. H% O8 c* R2 p5 _% k: ~
- s  v- M/ e3 ]; e
python首先安装类库
+ g: Z# q1 C7 B3 r0 Z, s* ^, E* ^9 I- H2 n
pip install ecdsa* n0 I# G; F8 L; ]: o5 p3 ]5 Y: a

/ q0 ~4 |8 _9 Ypip install pysha31 W8 ^" ^# _/ m/ e2 |% `

$ E3 i- j1 d2 ~" m' C/ }import binascii
' b. Q8 z4 _- c4 {6 r7 B. m8 n' W) J1 a9 t$ q6 @( u
import sha3
) D0 q) m/ n( U* C, V% {& ^
* L$ [1 Y0 R1 F, dfrom ecdsa import SigningKey, SECP256k1) |8 |. g" ?  u+ V& Q

) D# r) A* [% M. B. H" f8 i: ]priv = SigningKey.generate(curve=SECP256k1) #生成私钥
$ D2 u, j7 m' C; U$ Q1 B) w3 \0 j
pub = priv.get_verifying_key() #生成公钥
: k7 _) g( ~, N$ J" B! d7 l" v! E; @  \
keccak = sha3.keccak_256()9 R; W4 N" m+ v
3 h# r  g- p" L5 z, N/ U
keccak.update( pub.to_string()) #keccak_256哈希运算2 S. L& W& N- ^. t

4 ]2 S& N" V& L. h- W4 kaddress = "0x" + keccak.hexdigest()[24:]* `; i7 \$ k9 P) A$ D! h5 H- o- F
# D, I% g% F/ B( P) J9 ^
priv_key = binascii.hexlify( priv.to_string())
0 ]+ p, r$ K9 _- A6 e  S/ T  O
. s7 j6 X* f" ?$ npub_key = binascii.hexlify( pub.to_string())
3 D: E! u9 |& y* N4 T/ ~, {0 R
! G/ [% t+ r5 r' u2 S3 [print("Private key: " + priv_key.decode() )5 h6 C$ q: Q9 F  _) y6 F) x: S1 Z

& |; L  k! n+ Q) f: w: Dprint("Public key:  " + pub_key.decode() )0 f! Z/ X$ T# i% j% ^: a! v

% y  |4 O4 l: H+ J0 Jprint("Address:     " + address)) y! N3 D, v6 P" O8 V* f. {
% I* B6 j2 P4 |& Z5 s
# Address: 0xd38d3c226d0a86ce9932608edac39163fcbc550e
. I* C. D/ }% z1 Z+ W" N* `( n+ p+ x3 j, P- J+ B- q
来个骚操作,用同一份私钥来管理比特币与以太坊
* ?3 b4 J& h& l4 _* W8 e2 K
, \9 c: }5 e6 W) n既然以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。
+ F5 [/ {/ W8 n8 o2 E( J8 f; |/ y
& k: R- W6 P  Y: ~" {那我们就用 Bitcoin地址是如何生成的得到的公钥% B( u, k. g+ g* P: k& [, R) }6 Q

$ Z& Y+ ?( u, ]3 u& e5 M( U/ h/ h1 W04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d,生成一个以太坊地址。
8 l5 d% k* `% V; m; l! b7 h% ~, l0 Y& d" @$ E* F# h8 I
这个公钥是通过openSSL得到的未压缩公钥,以太坊不需要使用这种类型的公钥,只要把首位的04去掉即可。
" S# t- u. S' p( D6 l0 {: n8 s+ a2 c, w; y
import sha3
* y1 o  `& p  |" ^% n* U0 e" _8 u- \0 u9 v% ?+ L3 v
import binascii: R3 A" r# @1 W
; u( Q: r) |+ C) K
_openssl_pub_key= "04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d"
( C$ v' G8 S9 X2 ~; F' g0 C; Q' H6 e) i! t/ J# d( p" w9 S: w( g2 I
_pub_key = _openssl_pub_key[2:]
( c9 L% T3 z+ n/ q( R$ `. \" a) T% Z4 a- G4 g- _/ X2 ^$ q
_pub_hex = binascii.unhexlify(_pub_key)
4 F2 A" q( h+ w* Q
# Q5 x- B2 ?$ u/ M5 }keccak = sha3.keccak_256()
3 G0 x7 ]0 N2 f6 m' V
: }! v: u% O: J1 O' Z& Ckeccak.update(_pub_hex)* ~1 w) x8 Y5 {/ z: I4 }6 V, Q: w
* `7 @6 D  a" a; a
address = "0x" + keccak.hexdigest()[24:]
2 V# T9 W; u" ~( [5 \6 s" u) n( M$ C' N( G& x5 _  R
print address # 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f# R4 C% |; T$ b8 K5 K6 [8 l' ~/ O
$ i+ P5 y/ o0 _5 I
这说明啥?我用完全相同的私钥,分别生成了比特币地址与以太坊地址,这两个完全不一样的地址用的是同一个私钥。! S+ A4 K! ^( |9 k

, Z0 Z0 w8 T# @2 J; t7 Z以太坊地址 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f; y* C: E+ A3 [

. z, ]8 b& P& \' [与比特币地址 14xfJr1DArtYR156XBs28FoYk6sQqirT2s的私钥竟然是相同的。
3 K' D/ r9 I- f2 e2 T: Y1 e8 k4 Y+ h9 h$ {9 o* W
这给资产管理带来很大方便,但如果一份私钥泄露了,2份资产都有可能被盗。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16