Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
btc address: 1FmWXNJT3jVKaHBQs2gAs6PLGVWx1zPPHf
' v* _3 U/ B* S; p7 @
$ [' |" p! c2 k5 R& ^eth address: 0xd91c747b4a76B8013Aa336Cbc52FD95a7a9BD3D9
& B1 w  R0 h6 f- K- i( y" A8 F  t% b3 p0 g
以太坊生成地址的方式跟比特币比较类似,也是 私钥 -> 公钥 -> 地址,以太坊只是在公钥 -> 地址做了简化。, j4 a0 [) \+ @& w6 I
, ^$ ~7 {( E4 R
以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。
5 q; L( R& k/ [7 T
% v/ k( }: d! z. k+ r! L% Y得到公钥后,对公钥做Keccak-256哈希运算,然后取最后的40位16进制字符,得到的就是以太坊地址。
& B5 I# o. d) O6 u6 v/ x& t5 K1 _; n# O9 L
生成以太坊地址跟比特币地址都是不需要连接网络的+ Y. s9 M2 J. h

7 A/ Y- B; R) `* Tpython code 生成以太坊地址5 m8 a% H* m3 a
) Y* N& h- F( S- Q3 u; e
python首先安装类库
3 h$ H0 @5 A: v4 i3 I- T* q- n& L- g! K  N! P
pip install ecdsa9 B4 n3 w8 O& s5 h' K$ r. e0 d$ I

/ t, v: k: s" V1 rpip install pysha3. ]; u: g/ i- y
' z. h" g! @! j! Y$ Z. D0 V$ l# ^
import binascii! d: r% b$ }% P

& C; k2 A* _! o, D' Y% ~import sha3
  H( H" q# y! O; W& N2 |. B0 r7 w% v& p
from ecdsa import SigningKey, SECP256k1
/ P6 f$ ^' W. d% Q) _- D( U' @2 l' e' Y/ r4 r1 e. v, n
priv = SigningKey.generate(curve=SECP256k1) #生成私钥4 g3 Y$ o, u& F' x
8 S- E3 ?0 A, N( N. F
pub = priv.get_verifying_key() #生成公钥
! z: m; R( h8 @: Y* o( n2 G" V$ x* K& c! E9 o
keccak = sha3.keccak_256()' ]1 B: d, ?5 _- {, L

7 Y3 _0 t4 u3 g& B- S* Z- Zkeccak.update( pub.to_string()) #keccak_256哈希运算6 g% h8 a# ~9 B! p
, A( W5 C: ?1 S. E; j! w
address = "0x" + keccak.hexdigest()[24:]
2 x, N9 R: ]& q2 N  t5 T! [4 ]- ?( o% k6 f# x
priv_key = binascii.hexlify( priv.to_string())4 f: `! `! N, }) T
8 C2 C# d( x4 M/ U2 F8 {, l
pub_key = binascii.hexlify( pub.to_string()). i& x) {# H+ s' L2 s7 n6 @* E
% b9 U0 K4 t2 t5 F' ]. T
print("Private key: " + priv_key.decode() )9 ~( {. F% K5 A) L
6 n( y4 K1 |' C+ \; ]5 d
print("Public key:  " + pub_key.decode() )
4 g5 T; I" w  O" I8 _
. H3 D1 i0 c$ d9 [% Hprint("Address:     " + address)/ ?: f2 ~; F: `8 R
: @% O: _6 h& J: N# j
# Address: 0xd38d3c226d0a86ce9932608edac39163fcbc550e) \* L# ~( I- \. t" J

* ^% Q4 \0 H, r来个骚操作,用同一份私钥来管理比特币与以太坊
0 }( ?# F+ [0 V# m' P' h9 w) U$ x0 N6 ^2 T/ E
既然以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。7 D. q4 p  U/ }) P9 G: a3 E
( S" Q( f0 L' E0 y. h  |" ^- r- G# ^
那我们就用 Bitcoin地址是如何生成的得到的公钥4 \4 u( B/ T/ g) R
$ `$ c' \7 u4 j: e* P* q4 @& V
04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d,生成一个以太坊地址。
1 i# }( ]. ]; X3 i4 Z3 x8 i4 h8 z* Q4 f" {$ X/ [; f
这个公钥是通过openSSL得到的未压缩公钥,以太坊不需要使用这种类型的公钥,只要把首位的04去掉即可。9 [9 E7 h2 Q# r/ S

0 }; g1 E, [! j5 ?! Eimport sha3" _7 }# c- l, ~8 q2 G2 ~$ J; x
/ z$ c) m% V/ H; k- k$ z; m- s
import binascii& f( Q; b, K6 W1 o" [  Z  N
, e0 Q7 U% w/ _( |' I" u3 K
_openssl_pub_key= "04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d". {) t+ Y; z, j' h* p5 l7 c

: ~& H. J3 F4 k( K& G_pub_key = _openssl_pub_key[2:]
1 p- l4 h" j5 F/ s, Z6 r+ B6 l3 X6 D9 E2 R8 V- Q0 y
_pub_hex = binascii.unhexlify(_pub_key)3 I' o: x* a4 E/ _

6 ~7 u, a/ U+ h1 pkeccak = sha3.keccak_256()5 o6 p' E, j: {& C. w

5 X9 ?8 S. l' g  n6 E" F  skeccak.update(_pub_hex)
' |4 J9 j- w7 M3 S4 ~
& o5 G4 u7 W# o% aaddress = "0x" + keccak.hexdigest()[24:]8 D- o3 g! {) Y" L, V# i
% x# v6 A8 W# I; z5 M
print address # 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f
4 b3 ]% r3 m7 q! D" U" p% o1 a9 ^  [) Y7 ]8 A" K1 x, Q& M
这说明啥?我用完全相同的私钥,分别生成了比特币地址与以太坊地址,这两个完全不一样的地址用的是同一个私钥。
% a- x) q- Y7 \7 ~  [3 e: j
/ R7 H# x& _' f以太坊地址 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f% X6 l& N! k3 l4 v2 W

8 b# W/ w0 y8 c( y与比特币地址 14xfJr1DArtYR156XBs28FoYk6sQqirT2s的私钥竟然是相同的。$ \% D/ P! _+ N/ w" Y+ ?! v2 V
8 \; g5 m& O" k& I, i
这给资产管理带来很大方便,但如果一份私钥泄露了,2份资产都有可能被盗。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16