Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
btc address: 1FmWXNJT3jVKaHBQs2gAs6PLGVWx1zPPHf3 t& B3 {2 v0 x" A0 t+ \- N

, D. I6 B. i; a8 w! @- l3 I) reth address: 0xd91c747b4a76B8013Aa336Cbc52FD95a7a9BD3D9
: ~0 ~; l) @0 |% s# ~& x! o+ H, ^* u2 V) a
以太坊生成地址的方式跟比特币比较类似,也是 私钥 -> 公钥 -> 地址,以太坊只是在公钥 -> 地址做了简化。
1 P3 M0 \( r9 l2 |, |# B
6 Y* _6 t4 K' k) ~8 i' @: F3 V8 ?以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。# s$ z0 E6 }: P2 A1 J
8 l+ }3 C; K5 ~' C
得到公钥后,对公钥做Keccak-256哈希运算,然后取最后的40位16进制字符,得到的就是以太坊地址。
2 M. V# M6 I% @5 I. j5 E# ^5 C+ ]  l- n+ n+ p1 v$ W! d
生成以太坊地址跟比特币地址都是不需要连接网络的
/ R; u' j9 a: d) a" w# U, N# T/ q2 I6 m8 s' D+ w; d3 p
python code 生成以太坊地址1 T; n, e/ J* @$ Q" N

# ], r7 i: L- V. T- L: D; F5 hpython首先安装类库
/ ?* F( O8 ~4 f$ u0 X) h( T, L3 z$ {! e  n
pip install ecdsa# y. Y0 v* i/ m; d5 G: d, E( N
* k" B3 {% G( X( d* m
pip install pysha3
6 t+ o6 f2 I- p" |) \. T2 r$ X' x/ @
: v& L0 {# T8 Z( L& Z9 W4 e% qimport binascii4 L# N, C- _) K( f8 m2 C$ ~2 o
6 {9 ^2 ]! O* F& p
import sha3
( `( f6 T. v6 X' E- R% X" L( ^- M1 a" ?! ^3 u4 H
from ecdsa import SigningKey, SECP256k17 n& C- G( {0 a

+ H7 R: S! x' \4 L+ L% Epriv = SigningKey.generate(curve=SECP256k1) #生成私钥
# u( e( N# l, V% i: n
, _& A% L) ~" V9 M* n/ upub = priv.get_verifying_key() #生成公钥7 x2 \$ U/ Z" K1 b

+ ^) E5 C) g& p4 S9 I! ]keccak = sha3.keccak_256()
/ z' |! Q+ ?, v0 ?2 n* ?: b6 I2 Z4 |/ l& U9 g6 g( ^( d' t* {
keccak.update( pub.to_string()) #keccak_256哈希运算
  L4 c- S$ {' _. U" h! v* v# k, J7 S6 ?* D
address = "0x" + keccak.hexdigest()[24:]
- @3 Y% v. u8 o( E) x  j3 a- c- }1 V. _# v1 U; j( l
priv_key = binascii.hexlify( priv.to_string())* c) g% h5 p: h7 |

9 e) L; a* O( Rpub_key = binascii.hexlify( pub.to_string())
7 k. U' o. ?9 P' h! ]7 t
( }8 M8 a0 h4 a- O" ^print("Private key: " + priv_key.decode() )
' \# [  \  |; p6 L1 K
$ v1 ]. B# [" lprint("Public key:  " + pub_key.decode() )
2 [5 a+ u; T, f
6 }- B3 _5 a+ c8 Q- |print("Address:     " + address)
- x( T: L$ E: n4 M: \. E0 B( g0 r. D3 I% O; ?- F/ p
# Address: 0xd38d3c226d0a86ce9932608edac39163fcbc550e
$ s3 _0 ]8 a! Z5 L" l
  ?2 n! }2 p6 }# `1 o% Q* V来个骚操作,用同一份私钥来管理比特币与以太坊
) x) J- O$ x. b* c# r# A  L$ ?7 n  F" |( s5 d/ X( k1 S1 `& R1 i) c
既然以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。
1 V8 n! \8 ?; X% m( b% d* V4 |, T, u" E# a( ^0 j
那我们就用 Bitcoin地址是如何生成的得到的公钥
5 k9 {( ]" n- z0 g, m6 m( x% G; D, g; E. q9 @# ]: Q- D
04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d,生成一个以太坊地址。
- W3 C! r% w' q: ~6 H; U1 `' {
  f' \5 A* b8 ^' \这个公钥是通过openSSL得到的未压缩公钥,以太坊不需要使用这种类型的公钥,只要把首位的04去掉即可。8 M5 ~) K# O; t! s' Q

- s- }8 P5 m. ?. P6 V3 O* Eimport sha3- L/ f3 r# \; }1 T) O

2 K$ J8 J$ ?. P" b. fimport binascii
7 ~/ s$ O. f* X8 C- h) _2 ]
7 r$ c& d4 o) r; m+ a_openssl_pub_key= "04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d"
  P( u( L7 a" |" w7 I
1 O6 }1 J  `7 E2 K. U_pub_key = _openssl_pub_key[2:]8 w) [) L! @  i3 I- b: A' x

7 E. Q7 K6 X' T0 M_pub_hex = binascii.unhexlify(_pub_key)1 U" @# F+ l' t5 \- W
' z+ J- B; C* A! Q) s, @
keccak = sha3.keccak_256()
, L! R- T# |9 u$ k2 S5 u# `  E6 O; {! j6 R; p
keccak.update(_pub_hex)
' H. k/ ?( z4 ^" e7 b
) D. ^* F4 _- S' F6 z: caddress = "0x" + keccak.hexdigest()[24:]
$ S- [3 e* X: T& R
- H! P7 z# [6 }& i0 l1 o  z2 @print address # 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f1 {- ~0 F: m* @. \2 Q
, M/ h8 n" }- F9 J, `7 \
这说明啥?我用完全相同的私钥,分别生成了比特币地址与以太坊地址,这两个完全不一样的地址用的是同一个私钥。5 A2 J, t" C. K3 ]6 Z

% y. X$ H4 G/ m* o# c/ D以太坊地址 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f" I) X* G. Z$ J. |8 {% g

1 Z0 T: t; z( V- A% s与比特币地址 14xfJr1DArtYR156XBs28FoYk6sQqirT2s的私钥竟然是相同的。3 l. }) Q. v# m+ ^! ?

1 _) V6 T' s, A这给资产管理带来很大方便,但如果一份私钥泄露了,2份资产都有可能被盗。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16