Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
btc address: 1FmWXNJT3jVKaHBQs2gAs6PLGVWx1zPPHf7 I: x! G# ~. K, I: X- T4 j! v
" H& }; U- ]7 Y* P
eth address: 0xd91c747b4a76B8013Aa336Cbc52FD95a7a9BD3D9" t$ B- B! \; h, e8 @& A

3 J- G$ w2 M/ c" u以太坊生成地址的方式跟比特币比较类似,也是 私钥 -> 公钥 -> 地址,以太坊只是在公钥 -> 地址做了简化。
9 |8 _$ l1 H  k0 W; u! O4 Z! y7 T) W2 l% {% }2 O- D) \$ X
以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。6 _- {, ]$ t( D+ d0 N% L3 t* O

# J- W# B/ h" l1 t( N4 E( W0 G4 g得到公钥后,对公钥做Keccak-256哈希运算,然后取最后的40位16进制字符,得到的就是以太坊地址。9 O& O$ g. [- S! w/ T% m
4 u7 I+ g  ^0 m  U) o' M
生成以太坊地址跟比特币地址都是不需要连接网络的
" D# L) L2 H5 o# }% [' {* H# G! n4 s  t& P* \! f
python code 生成以太坊地址3 T/ M1 `/ |' o; X4 M. X' d) H

) X( [# {2 |: W& N' zpython首先安装类库
6 E9 l0 d5 q0 H3 w. F' L2 H
7 V& J( c/ i; Vpip install ecdsa
3 _+ C3 i' Z: o8 i/ X, L
1 B% v& H3 m  {# kpip install pysha3' U7 {9 r4 [- {* t4 d

: E7 q. W1 B, `) B  ]& z) ~9 oimport binascii
( n' Z. i  e2 F1 Q6 \- v# [1 L% t5 d' o! T
import sha3
; M; i& `" ?! b) m( C% P
/ ~3 |& w) r( }" ofrom ecdsa import SigningKey, SECP256k1; I1 i% w! q8 H# H
7 w6 u; h  m. B( \3 Z& o
priv = SigningKey.generate(curve=SECP256k1) #生成私钥+ ]$ S$ J. Z3 ]
0 Z1 a2 N* a1 U: Y7 G3 \/ X
pub = priv.get_verifying_key() #生成公钥$ A' _2 L* T0 t$ t" O5 S
  ?. h2 A) X" w+ ]2 ~# u9 K7 g. `
keccak = sha3.keccak_256()- N' C0 {! x$ H- u* x
/ h! V: k, R5 K% h% ~% w
keccak.update( pub.to_string()) #keccak_256哈希运算
7 k" h- E+ @, G) F7 I
) Z6 n4 `$ Z) y5 r+ y2 saddress = "0x" + keccak.hexdigest()[24:]
0 c# X' S$ ~7 h9 s+ f# _* A9 l4 ^6 B
priv_key = binascii.hexlify( priv.to_string())' _, |9 g* K6 g# r  t$ L
# T) i* Y6 p) k  y% x6 q# R; {" r
pub_key = binascii.hexlify( pub.to_string())
+ _5 T8 z" R0 E1 b1 o
3 L' o( l$ P/ S6 @print("Private key: " + priv_key.decode() )2 j. P6 Y. A; c8 v2 \  L
% E2 R) {: g! n. D" F
print("Public key:  " + pub_key.decode() )
) @1 y. F, \1 S5 Q0 h2 D7 k1 }. P+ W0 b3 \. M3 b/ e$ w
print("Address:     " + address)- P. l  W7 ]; m
4 Q  @: `0 @7 J" J
# Address: 0xd38d3c226d0a86ce9932608edac39163fcbc550e8 j8 q: p  T$ H% D
) n3 D/ X: |- Y9 B# I; D
来个骚操作,用同一份私钥来管理比特币与以太坊" G7 e0 D0 Q) z" H* o# a) c, [
! ?. t: {4 E* n8 \% P
既然以太坊使用Secp256k1椭圆曲线得到私钥、公钥,比特币使用的也是相同的椭圆曲线算法。
+ L: o5 \# o9 Y5 y) J3 a8 |1 I: e4 Y8 u
那我们就用 Bitcoin地址是如何生成的得到的公钥
. e. Y% S* A& K  F7 C& G0 t5 f+ K! [% R3 A7 r7 t( M  F/ \
04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d,生成一个以太坊地址。% p# X8 |: _$ m0 `( A1 p2 Z8 K
# a# v; {: @8 F4 T2 ]0 n, `
这个公钥是通过openSSL得到的未压缩公钥,以太坊不需要使用这种类型的公钥,只要把首位的04去掉即可。! }. [% B8 B& H0 A

0 X1 g/ G4 g3 cimport sha3
  s! A) ~/ i- k- x( q" U( c
/ \1 k( H: S3 Z9 P6 jimport binascii* p) v& J! [. B' W$ T

  x( q1 E9 `9 r5 }4 `_openssl_pub_key= "04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d"
: F* O+ o% v# A+ ?, C  s
. a  B" @$ _% h9 l4 S  n_pub_key = _openssl_pub_key[2:]/ E& ^. b% d6 T6 n. v3 U9 V, i* X

6 T( K( T4 T$ V_pub_hex = binascii.unhexlify(_pub_key). R& o; t2 J# x/ V2 \2 U; I% |0 o( @
+ A' L) z+ Q' U6 y! K7 A
keccak = sha3.keccak_256(). S  Q0 ~/ h; e+ Y

+ t8 Q$ T! D0 p" j  }5 v/ q0 `keccak.update(_pub_hex)
# x# H" o8 D( V& c  t' Q- S- _$ I: [7 ?
address = "0x" + keccak.hexdigest()[24:]! @* j' k  y" x
7 v# P4 b7 E9 o; Q$ Z$ a
print address # 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f  [$ x7 T& X5 i2 C7 {$ s
$ \1 \* {" ^0 R$ ~- h8 Z: u7 s
这说明啥?我用完全相同的私钥,分别生成了比特币地址与以太坊地址,这两个完全不一样的地址用的是同一个私钥。9 l6 x; e  D; S0 U
" a5 @. N. u" A& ~% l- K# b' z/ a
以太坊地址 0x9156a7cdab767ffe161ed21a0cb0b688b545b01f* {$ Z9 D( V7 K8 ]! ^/ J+ [

, I2 E; d7 H" n2 L与比特币地址 14xfJr1DArtYR156XBs28FoYk6sQqirT2s的私钥竟然是相同的。
* M" u% ^5 x; h' N, D% I  ?; O0 }" A8 R* P
这给资产管理带来很大方便,但如果一份私钥泄露了,2份资产都有可能被盗。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

zmhg799417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16