Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
btc address: 1FmWXNJT3jVKaHBQs2gAs6PLGVWx1zPPHf* C7 p  n/ M+ H

5 x4 V  K' K% k3 v  i  ~1 ]eth address: 0xd91c747b4a76B8013Aa336Cbc52FD95a7a9BD3D95 P/ \- _& f/ u2 }4 y
9 ~) Z) |1 z: f
以太坊生成地址的方式跟比特币比较类似,也是 私钥 -> 公钥 -> 地址,以太坊只是在公钥 -> 地址做了简化。( @6 @6 o4 {- ~% E, M
. e& i. N3 X3 f5 A
以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。5 K! }$ r& d/ ~" h1 ~
5 P  y- _& o4 \) e
得到公钥后,对公钥做Keccak-256哈希运算,然后取最后的40位16进制字符,得到的就是以太坊地址。, y) w% c$ e5 N/ G
# w2 i) v0 `4 ~
生成以太坊地址跟比特币地址都是不需要连接网络的
  j7 Q- v7 U, p2 O- z
9 Q3 D8 Q- _) z* s+ J& cpython code 生成以太坊地址% T/ t5 G! l1 t7 g

  X: z" W+ t; u6 C! Spython首先安装类库8 K4 b" \6 }) M5 d6 }' r! |
4 D0 J' c( u  W9 v) `+ S
pip install ecdsa4 ]. c# h, O) l/ _) j5 P- s

& N. y' @* I+ S; `. z7 h7 Z- ]+ l# Zpip install pysha39 }  q; _+ F+ _1 g4 ?- h
' t7 e; D& @2 W8 e6 E" s( p
import binascii
+ W6 h3 n9 E  y4 k8 o$ K& ~, Q( t! O- N3 k0 x) ^
import sha3' N7 ~1 A; H" y. m& i
- |8 C, l% b, j; k) s/ x
from ecdsa import SigningKey, SECP256k1
( x! x- T" {, Q. }+ r$ F3 N6 V
( B" [; |9 j3 @* V8 ypriv = SigningKey.generate(curve=SECP256k1) #生成私钥
& e( S. B9 `7 V" f+ `0 m9 W5 s* a7 U8 N: ~. \; Y7 B4 p& g6 l
pub = priv.get_verifying_key() #生成公钥
( I0 D, K8 s" Z% \7 q$ b, J. g% ]1 T
keccak = sha3.keccak_256()
( W6 a: R. @% P& p* K* A. ~3 K/ @' {6 Y- o
keccak.update( pub.to_string()) #keccak_256哈希运算7 I7 n+ j! C5 Y6 u, z2 B9 Z- a1 ~
% i/ c, ~+ [! O6 S# M
address = "0x" + keccak.hexdigest()[24:]1 r' c1 [3 T9 v! j7 |

. d6 o# D+ |3 d* b% U. Qpriv_key = binascii.hexlify( priv.to_string())
; w% O, V5 N% E1 U8 `$ q
7 i+ \7 @; V2 u$ h3 ]5 h* V4 ~pub_key = binascii.hexlify( pub.to_string()): \! I0 j. {, V7 Q- s
3 m% f( I: ]3 I- P& m# }
print("Private key: " + priv_key.decode() )
: p* m, A) n( k' ^- q. J/ ?& m( ]( Y8 @; {/ e* m6 U7 t% G. d& S
print("Public key:  " + pub_key.decode() )( n  C6 K# V+ @0 o

0 ?2 R/ k: i% R1 C" Kprint("Address:     " + address)
$ ~9 B6 Z1 K- G+ p* Y3 U: w4 l2 |+ X9 N- r) n( g4 v( ]
# Address: 0xd38d3c226d0a86ce9932608edac39163fcbc550e
# E8 y9 ?/ ]0 J
; D& G4 \1 N4 `! K来个骚操作,用同一份私钥来管理比特币与以太坊! R6 S: X2 a- x/ I- |) z& v

% L2 E5 j* n3 `  t) d$ d% W7 s  N( z既然以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。! k+ K! L7 A$ W, `3 P; V0 C2 M1 K6 `

7 p6 Y( j+ P5 V$ L1 K9 w$ |1 J2 R: q; W那我们就用 Bitcoin地址是如何生成的得到的公钥
! i1 J3 T+ G' Z7 p: D
% ]- J6 F& i9 h; b6 p1 f; W. g04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d,生成一个以太坊地址。
2 X0 Q* u1 p  ]
) Z& o& ], g5 z& L# z  Y  O9 D这个公钥是通过openSSL得到的未压缩公钥,以太坊不需要使用这种类型的公钥,只要把首位的04去掉即可。
' G! k% g: {7 H* q
2 \- d. i1 q% r0 Rimport sha3- ?6 l; y9 u7 \
* j4 {5 R3 |: x" q
import binascii
- ~, |4 |' ^" _3 S& `( x- X6 S! S" \; l
_openssl_pub_key= "04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d"
* l& h/ e" V7 ~
" }9 |. Y' G0 W; i$ N& H0 d, S_pub_key = _openssl_pub_key[2:]
# _4 b! `4 {$ n' Z( t1 d; c# N/ m" G, W
_pub_hex = binascii.unhexlify(_pub_key)/ @; X9 v2 I, u" b  a, }( [
: m( _1 p/ G7 ]* J
keccak = sha3.keccak_256()
, r" R" A6 b6 w: o: {9 h7 x7 [. o  s* d! g/ |0 n
keccak.update(_pub_hex)
$ T2 U+ F% k6 l# \  \! ]0 r* P5 x* u7 ?' G) U; l
address = "0x" + keccak.hexdigest()[24:]- h; Z/ b; O* Y

1 {, V9 h) P1 R) @+ f1 ?2 dprint address # 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f
# {; z  M: N! r0 l, B/ d3 }9 M2 f& _. ^) x3 \9 S$ p4 h5 g. D
这说明啥?我用完全相同的私钥,分别生成了比特币地址与以太坊地址,这两个完全不一样的地址用的是同一个私钥。
: [0 M1 ~/ j8 I8 Q; L, g- i
2 L! V" ]$ P+ o. t/ T: _3 W$ ^以太坊地址 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f
2 C! R2 w- {" Y& @; Z0 v8 r' n! h( b/ z+ @# I. q( q" s) V8 L9 K$ Z( [
与比特币地址 14xfJr1DArtYR156XBs28FoYk6sQqirT2s的私钥竟然是相同的。& S5 {: N7 r( S- Z- E0 x: U
4 f1 ^* J* }6 p$ \! @
这给资产管理带来很大方便,但如果一份私钥泄露了,2份资产都有可能被盗。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16