Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
btc address: 1FmWXNJT3jVKaHBQs2gAs6PLGVWx1zPPHf
: F) X/ L0 [' w" w+ |0 X0 |8 h+ h* N9 b2 p
eth address: 0xd91c747b4a76B8013Aa336Cbc52FD95a7a9BD3D9$ q* k" S4 U& D4 F, b: S; b
! I5 p7 \6 f  s7 O& {
以太坊生成地址的方式跟比特币比较类似,也是 私钥 -> 公钥 -> 地址,以太坊只是在公钥 -> 地址做了简化。
4 k+ t4 C% ^, V7 ^' D$ l7 o5 h9 X( T
以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。3 v# S$ K7 }! A" b4 v/ m
6 Z. X( ~! w+ u
得到公钥后,对公钥做Keccak-256哈希运算,然后取最后的40位16进制字符,得到的就是以太坊地址。
, i7 z& `* [6 Z& O& @, S0 B
. ^, ?  G/ B+ u生成以太坊地址跟比特币地址都是不需要连接网络的
# @; i$ p+ o3 I4 ^( a( w6 Y* k4 e' |8 O
python code 生成以太坊地址
, u$ L- h9 }, _* }
. m. A- O3 D+ p. B  ^. {' fpython首先安装类库8 B& ]% @. M5 D
) |4 V- C+ D' ?7 ]2 }4 k3 T
pip install ecdsa# m1 u, Y) j2 X& b  a/ e; p+ U! _

3 w, _* ~4 U+ ^9 M! m+ opip install pysha3
( G' R0 r! }$ @' ?! g" T$ f# u  Q# ~$ Q$ I0 I5 s
import binascii
# L7 l6 A, r, S. N  Z* \
1 z! {% c; D: z2 l1 ~4 s6 ~import sha3. }" [% h; D0 i% A6 S, _+ n! a/ I: r7 f. t

! N; f/ l# S0 t' ~+ {from ecdsa import SigningKey, SECP256k1
. r, e9 t7 M4 q
" c' q! m$ S& g$ e+ r5 y4 mpriv = SigningKey.generate(curve=SECP256k1) #生成私钥
7 K* p2 a' z6 U" j, o( Y" b# A# S+ E! J7 v5 Z
pub = priv.get_verifying_key() #生成公钥6 I+ z, e+ ^# G

0 x6 l1 I. d/ `% Akeccak = sha3.keccak_256()
: I4 h0 d% U1 B/ D# X( s$ Z4 O9 I5 {8 g
keccak.update( pub.to_string()) #keccak_256哈希运算
. c+ V6 n0 u. ~4 T  `9 V
# {' [: v7 J3 k6 o/ Z  v& Zaddress = "0x" + keccak.hexdigest()[24:]  M! v: ]# P7 y3 Y

5 t5 h. U2 K- D" c% Y& @& kpriv_key = binascii.hexlify( priv.to_string()): k% a/ a4 D; V1 X3 ~

2 {5 a# n/ f) B/ ]3 xpub_key = binascii.hexlify( pub.to_string())
+ f  m$ k1 X5 d/ J( n9 q3 `3 A3 B$ ]* Q. [+ S$ Q' I
print("Private key: " + priv_key.decode() )" p" N3 w- C/ p& C

+ P/ w1 [! W) i0 g# D4 r" pprint("Public key:  " + pub_key.decode() )  ]) I0 i2 n! l0 |; h0 b7 u
+ n/ |: [* _. Q
print("Address:     " + address)  s; O5 w% w; p. @
0 B9 b  C6 U1 k2 z3 U3 @
# Address: 0xd38d3c226d0a86ce9932608edac39163fcbc550e/ R/ T7 b+ `$ o4 n" F, P& C

: T4 u, N: Q4 `" h: d1 j. `来个骚操作,用同一份私钥来管理比特币与以太坊
8 \' p+ h8 s: G1 C2 v1 M! Y3 V$ s( d# x
既然以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。1 d2 Z0 x' ]4 e+ k
5 A1 r/ H% V0 G) [
那我们就用 Bitcoin地址是如何生成的得到的公钥
. l, m( V! b  `) P9 n9 E. k
9 @# G* Y6 t+ E# B2 B04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d,生成一个以太坊地址。3 E, k5 u- L- |: ^% c# Q5 V; R
$ b# m% c( g9 W) T9 I( b
这个公钥是通过openSSL得到的未压缩公钥,以太坊不需要使用这种类型的公钥,只要把首位的04去掉即可。
) g' e5 k1 ?: T0 P7 @; R1 G8 o" W0 V( I2 \" k) Y* M: D2 n
import sha3, T% _- ]3 m, T2 U8 I

+ H) c7 D" d  s3 uimport binascii5 i4 O. ^& U& ^; Y* Y* O4 Y

, E- J9 h5 S/ F! `- z: s_openssl_pub_key= "04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d"
4 C  |& R, I( v# d* e
5 z: J/ t: G( h  u_pub_key = _openssl_pub_key[2:]& ?7 @2 e4 o) H) z& ^

. R. g3 }9 R# i( C& n% ]_pub_hex = binascii.unhexlify(_pub_key)
. Q0 u* `' k( M% C) D6 ?
0 V  q0 [* \5 z8 L8 O4 lkeccak = sha3.keccak_256()) \1 @) k6 h* z& l

7 d  _+ X; w9 [. D7 G$ h* T0 z% Ukeccak.update(_pub_hex)
% P, D" P3 ]( b5 |* U0 T6 _
9 N% |. x& Z2 R3 p- ?address = "0x" + keccak.hexdigest()[24:]1 N% X  X5 }8 {4 ]

- Q! v: |8 k' A3 X0 fprint address # 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f
. P1 F- U. O8 J7 R3 k
* a5 K4 b: @- p  h- M9 i这说明啥?我用完全相同的私钥,分别生成了比特币地址与以太坊地址,这两个完全不一样的地址用的是同一个私钥。1 ^1 `# L, o. v# e

, V% u/ }! t" t2 q3 L4 t0 o以太坊地址 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f
5 M# j0 x* H3 K. A0 c+ O" e( U7 ~' v4 [6 l# b* V# I, V2 z+ v
与比特币地址 14xfJr1DArtYR156XBs28FoYk6sQqirT2s的私钥竟然是相同的。
0 y3 u. m7 H( I9 w! I" m& O
* U% B3 n& m4 V- R! A这给资产管理带来很大方便,但如果一份私钥泄露了,2份资产都有可能被盗。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16