Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文
区块链是基于加密算法,共识算法,p2p网络和经济激励的一个系统,加密算法在里面起到了非常关键的作用,总结一下Neo使用到的加密算法吧。& r( n  r6 H; g+ ^! d" a
6 o2 y1 e! w6 R; v' @0 z6 U
关于区块链中密码学的介绍,yeasy大牛的文章已经介绍的非常好,下文主要通过和Neo结合,加上一些自己的理解,去讲述一下加密算法的使用方法。, {* T1 J$ w# O
' {! h1 ]; u  ?( n, D3 E8 n
Hash 算法
9 o$ J& K7 O! H# y3 L. U' z2 i$ O2 P: }8 }
Hash (哈希或散列)算法是信息技术领域非常基础也非常重要的技术。它能任意长度的二进制值(明文)映射为较短的固定长度的二进制值(Hash 值),并且不同的明文很难映射为相同的 Hash 值。
; A# z% u9 h* x0 M9 C2 ~. P" S& y) ^8 Z" ?) L) \# Y0 e
hash函数的作用. O% x2 x5 E- q2 \
  w  N7 v/ F! a2 Q; ?5 y
注意上一篇文章说明了如何将hash后的字符串保存到Neo的UInt256类型,其中一个前提就是结果集合在[0-15]之间。, e. _" z1 s+ _  ~# G% ~$ J
; e9 X9 E* a+ ~7 _# c
哈希完全不等于加密,很多时候开发人员都对用户表中的密码进行哈希后保存,实际上不叫做加密,只是相当于把密码的“特征指纹”保存下来,而对非法攻击者来说,在不知道真实的“密码”的情况下,得到有相同指纹的密码是极为困难的。3 m) D- |2 ?" S( b. x/ P; O) g; E$ H& r
$ O4 K# O/ X( K5 W! X2 ~- t0 a+ m
一个优秀的 hash 算法,将能实现:9 ?& n/ V$ [! [/ _/ W( |0 b7 N
- \" M2 A0 o- @$ F% Z
正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。( A) v1 F- M  n0 I- j  g

4 b8 @8 s- g6 |) i  I9 w3 m逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。9 o% @3 N; ]% @; u

+ v0 K' }7 p, K5 J- a输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。
7 c) ^1 i3 I4 O7 F2 O3 d
9 @2 U, o# h' ^  [+ r( b$ M冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。
. s& M7 D5 m5 Q" ]. |6 c- q1 o! \+ Z
目前,一般认为 MD5 和 SHA1 已经不够安全,推荐至少使用 SHA2-256 算法。
* L4 G+ B6 O7 U1 B' y4 @9 I, M8 n6 o: U# A/ F9 @7 v
一般的,Hash 算法都是算力敏感型,意味着计算资源是瓶颈,主频越高的 CPU 进行 Hash 的速度也越快。
+ C2 ]- b- j1 k' X: s9 t3 `2 T0 [1 m
也有一些 Hash 算法不是算力敏感的,例如 scrypt,需要大量的内存资源,节点不能通过简单的增加更多 CPU 来获得 hash 性能的提升。, u* s7 ~  I7 _$ f4 l" \- k; p
$ b( W! B% i  A( q( p
Neo中的hash算法4 {5 N, f/ m; O+ N! ?! O% j! C

7 h4 ^' i8 r' b8 u( nscrypt7 z0 j  N5 u* A- `0 D1 |
- j- V% N' V. J$ u2 U4 S* @; L
scrpyt算法是由著名的FreeBSD黑客 Colin Percival为他的备份服务 Tarsnap开发的,当初的设计是为了降低CPU负荷,尽量少的依赖cpu计算,利用CPU闲置时间进行计算,因此scrypt不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利用rainbow table进行暴力攻击更加困难。scrypt没有在生产环境中大规模应用,并且缺乏仔细的审察和广泛的函数库支持。所以scrpyt一直没有推广开,但是由于其内存依赖的设计特别符合当时对抗专业矿机的设计,成为数字货币算法发展的一个主要应用方向。* V7 r$ d6 n% |0 m: q  s) _

. d  L! [8 j9 n3 r8 C0 f- |4 r0 a. Yscrypt的参数: V# K" X/ F$ |1 ^4 ]2 k/ u. g

3 p! o" R: J# zhttps://stackoverflow.com/questi ... scrypt-work-factors
2 g9 J0 X+ ^! V7 g4 I% u* {. Z* q1 M5 X  B! A; M( R0 M1 o5 S- q
Cpercival mentioned in his slides from 2009 something around# g+ a3 B8 b0 y( J7 S+ ?; e, q
2 B3 m% i6 ?7 t
(N = 2^14, r = 8, p = 1) for0 s  w3 D. \$ Y, V& L: b5 Z; u; z5 D
& U. B- M' X: p! `' h
scrypt特点
. q" Z- c+ a& \; ~9 c# F5 _% ]& I) M
scrpyt的出名主要是因为莱特币为了抵抗比特币矿机采用的一个算法,可以指定内存和cpu的使用量,可以用参数确定hash的时间。9 u( v6 W! X6 ]( L. c( j2 u

8 B6 x1 T7 d6 f2 \$ ~Neo中如何使用scrypt
5 ?4 ^0 f, W' L0 d" L  M! L+ C# h6 M& I7 n
// in NEP6Account
" k# C+ }' c# n0 k% M! U1 W$ ]9 d  X3 {" V6 P* v9 x
   public NEP6Account(NEP6Wallet wallet,
2 A9 x" u; t% f' s! z) }
0 e4 |" C  ]' X, P              UInt160 scriptHash, KeyPair key, string password)' r3 `8 r. T* P( e" I+ N

/ j( j# Z2 v8 a- }$ W            : this(wallet,
0 Z" b+ @& Q, i4 [2 K
% A; v1 K4 O; I# I' j              scriptHash,+ f" j+ y; s' x( Q

# p" [3 `  q7 y4 x              key.Export(password, wallet.Scrypt.N, wallet.Scrypt.R, wallet.Scrypt.P))# W$ @" O/ f3 V5 ~, X# F& k; L& u# a$ k

& k) M, B( Q* o! q        {5 _1 t8 y2 H; P4 o' t; b+ L
, L) w' k  x  e) B$ C; O( S- _% m) O, ?
            this.key = key;
) j# B$ Z1 r5 C- o
9 w, W: v, r' _! o4 l3 m        }6 |* m, U; B8 Y& w9 x$ ]! W0 Y

1 Z" k( }0 T; U6 }2 O9 k// in class KeyPair
% t- e* W* U! L3 @- {' L: Q) B$ D. g3 y; N- {* ~$ A$ b1 w( y5 t* V
public string Export(string passphrase, int N = 16384, int r = 8, int p = 8)
# C2 N: K' B# J$ L1 X" ~6 D
& M3 c5 y# b6 B! I4 |{2 \) H+ Q& u/ c0 R; ~) K
8 |0 b8 S: O* }0 @! p) t$ A$ M* I
    using (Decrypt())1 j1 z* k' R5 w) q, o

, \, r8 p* q) U2 ~    {$ Q: v% k6 f  C- c

+ j* c  Q4 w' q: u, R) A0 S        UInt160 script_hash = Contract.
! T( P9 [! [$ g6 p+ m! ^4 H5 `! x* K. `& e4 K$ ?. y
            CreateSignatureRedeemScript(PublicKey).ToScriptHash();, K5 W! U) k" V: c# m* t4 Q3 e

$ O: p: @" e  A2 {$ n        
" ?3 Y& J; O( f% S% n
5 a2 `5 d+ g) m4 F4 x        string address = Wallet.ToAddress(script_hash);
, C+ X7 b9 G' ~0 q' h* v5 R- ]. a! V% z
        byte[] addresshash = Encoding.ASCII.GetBytes(address)
  B8 _  Z1 M, q) F2 G$ `5 P* ^7 V# P; W
            .Sha256().Sha256().Take(4).ToArray();# q9 |: j$ D/ U( }+ I( M

! J/ ~6 F- X6 |$ \  S' Z        ' \+ J7 G- `3 A+ f1 N/ B  E8 x& B

  \$ D2 o; U( H1 `        byte[] derivedkey = SCrypt.DeriveKey(3 M  W6 x  _7 L2 D' V* U; I& C; P
' r  m0 T% s+ z! G+ g
            Encoding.UTF8.GetBytes(passphrase), addresshash, N, r, p, 64);
7 p$ Q3 s! m# v: X4 X, ~( t
8 k4 b- I" O, r) k+ O: d4 s        
# s$ P* D9 [4 E7 D3 k5 o' W$ Y& h- ~3 o+ m) J: Y
        byte[] derivedhalf1 = derivedkey.Take(32).ToArray();1 ?7 Z' o/ r  R- K' F

2 I$ h( i* ^  _        byte[] derivedhalf2 = derivedkey.Skip(32).ToArray();$ }, [* H- l6 P8 {9 ]3 u

4 A/ y. k6 b. E& D$ [: G          {2 L3 m2 K$ s9 [
2 W; r% c" r2 u4 `1 J$ _$ v
        byte[] encryptedkey = XOR(PrivateKey, derivedhalf1)( _! z. V( q7 w5 V
! a' c4 ]( t  }' t" K
            .AES256Encrypt(derivedhalf2);
$ c9 Q4 x& g! o) k/ l$ q
. h3 A9 i3 I" Z; d7 `7 k: l        / C: Y4 B7 O& ^! v8 a/ B

6 x  \8 y- b' g& f$ N9 ?        byte[] buffer = new byte[39];
* k0 ]3 v9 \% b# K! l2 `0 ?  z. v2 G8 M# C6 `5 p; n% }3 w
        buffer[0] = 0x01;
+ H+ W3 C1 w/ L3 {
0 s7 k4 k- t9 _  r        buffer[1] = 0x42;3 V) F$ _2 }* u% i: Z) x
9 D0 n; G* Q) d% ]
        buffer[2] = 0xe0;* B/ L( `' l, `" |$ {' a

4 m3 O$ v# u  g( p        Buffer.BlockCopy(addresshash, 0, buffer, 3, addresshash.Length);5 W# i) ~" h& E* t& l
/ R! m1 R1 v9 \# l7 x; K, g
        Buffer.BlockCopy(encryptedkey, 0, buffer, 7, encryptedkey.Length);
" K; N7 L9 J$ {+ O& p8 {2 K5 x' ^+ S* J7 Y' v
        return buffer.Base58CheckEncode();' {+ f8 I4 a  _  F. C( V3 ?# {& A

  P/ K* X4 V6 N2 D. L8 A, H- y/ J    }
+ V% ^" \$ ~: ~1 X6 O
1 ^1 W9 c+ d  _+ \! a+ h}& l/ M0 p& ?. y2 K  f4 d( _
# _/ a. ^4 M# q# w9 F- z
可见SCrypt.DeriveKey方法参与了加密密钥的生成过程。后面解密也必然使用到了这个hash算法。所以该hash算法参与了加密过程,而加密密钥用AES256Encrypt生成。可以确定的是,使用该算法的逆过程,可以解密出密钥来,这个比WIF要安全。
$ m& V% `; ^6 Q7 s) h# {0 J0 @/ T% E$ u4 x4 S$ \+ L& j6 ~" @
Murmur3, C1 Y# A/ y) Q7 A
: Z  h8 ?- }. W0 \. g% q  h
MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。[1][2][3]由Austin Appleby在2008年发明,[4][5] 并出现了多个变种,[6] 都已经发布到了公有领域(public domain)。与其它流行的哈希函数相比,对于规律性较强的key,MurmurHash的随机分布特征表现更良好。[7]0 L; D7 J9 W, v7 g' B) M9 z
% `8 w$ |6 B) N# G% k1 v4 c4 M% a
Murmur3特点% V" `, N$ x$ X" k# g. N

$ r! H! P# |$ v* Q4 T1.碰撞率低5 W- R* c$ P( i# N6 O. r5 r& L

3 b3 N6 M5 a" P9 X) M! ]2.计算速度快0 O1 T8 w0 Z9 x% c1 d7 d; |) F+ M$ y
0 P8 @. g9 v; @! e  @' P8 ]3 q
3.擅长大文件的hash4 ^; ~5 ^3 _* B1 [. O
3 Z: w0 t/ _& G3 @3 J) ]
Neo中如何使用Murmur3
5 n1 R: x0 W  Y2 g( t# a3 d! j* Q4 T9 I2 Z, \* Z7 N, @6 f3 u6 T
Neo中Murmur3
* u% T$ H. Y* e9 P2 x) h0 \; d/ N, D7 D$ M
Murmur3的具体算法,以后再研究,现在大致知道,Neo用Murmur3生成key,也在BloomFilter中使用了。
! O  S3 g1 B+ f$ h) v4 V$ E4 C6 s" ^7 P  Q1 `
RIPEMD-160: `9 j! ^1 u5 K- I+ c" X4 V
# s0 b, ?$ ^5 ~( q' r& G
Neo中用这个算法来生成短一点的hash值,script hash就是用了这个算法。
) t: e- |& Q% X2 {" D, s+ @6 E
, Z  W2 m% h# z& ]9 ~9 S% v// in neo-compiler/neo/neo/Core/Helper.cs
" R" c+ [" e; }% ]
: J. i1 `2 f# Q. g) _" }public static UInt160 ToScriptHash(this byte[] script)( j; W) g' U/ x- z8 e# a
0 _6 @" X/ q: ]3 C8 m& y, K: M
        {, `; k+ v/ f. z7 B; ^: d/ G3 F

6 `, r7 N$ K" G! S9 `: b5 k            return new UInt160(Crypto.Default.Hash160(script));/ N# X4 c% R5 N* g1 [5 O& F0 e

' C8 R% T( L( ~2 e  t, Y        }
6 t# a# ]! V6 W& W& \
% ~/ j. g6 m3 W  C1 l' ^/ SRIPEMD-160算法的特点
( i# j* ?( L% l4 M' b! R4 P( ]/ o( B( X
RIPEMD-160能表现出理想的 雪崩效应 (例如将 d 改成 c,即微小的变化就能产生一个完全不同的哈希值):
2 k  K; g6 j1 I1 p* i3 B3 T3 i* V
加密算法体系6 o$ ], n' f. K$ m' }

% R/ u& n* u( M! q6 L: k  O. [现代加密算法的典型组件包括:加解密算法、加密密钥、解密密钥。其中,加解密算法自身是固定不变的,一般是公开可见的;密钥则往往每次不同,并且需要保护起来,一般来说,对同一种算法,密钥长度越长,则加密强度越大。
/ H5 ]. s% Q% ~0 H" T
9 {$ H8 I( _4 G/ X加密过程中,通过加密算法和加密密钥,对明文进行加密,获得密文。9 ~' y" G9 s* A" h9 l2 v+ u
$ c6 @/ l% [8 A) N
解密过程中,通过解密算法和解密密钥,对密文进行解密,获得明文。. r6 b9 l% ]" B, Z& R
1 I( J  }% j/ L( I' W0 o& t
根据加解密的密钥是否相同,算法可以分为对称加密(symmetric cryptography,又称公共密钥加密,common-key cryptography)和非对称加密(asymmetric cryptography,又称公钥加密,public-key cryptography)。两种模式适用于不同的需求,恰好形成互补,很多时候也可以组合使用,形成混合加密机制。# I- X6 g$ O' P8 h5 q* w( k7 F

  Q: M6 }7 W' ?  O并非所有加密算法的强度都可以从数学上进行证明。公认的高强度加密算法是在经过长时间各方面实践论证后,被大家所认可,不代表其不存在漏洞。但任何时候,自行发明加密算法都是一种不太明智的行为。
0 U( }) M- ~% U+ t* j- ~/ T! r- h1 J& N; x, `0 ^% ?8 I9 E; Y+ a- `
对称加密$ ~) {0 g4 R2 b
& e2 L9 Q. {3 K! a! `
顾名思义,加解密的密钥是相同的。
$ }7 r5 h( J( I4 ]+ j; I; _
0 i3 T( f3 T( p: I9 q! O对称加密优缺点8 o! Z  L. M* ?6 @; n# R
/ |# U. t4 x  @
优点是加解密效率高(速度快,空间占用小),加密强度高。
# K8 a9 _( u% Z+ Y- X6 y2 q
, u( ?, _/ V2 |: H缺点是参与多方都需要持有密钥,一旦有人泄露则安全性被破坏;另外如何在不安全通道下分发密钥也是个问题。( [& \2 s1 U" }5 G/ L: k
7 K2 u! l4 _% u& P( o
适用于大量数据的加解密;不能用于签名场景;需要提前分发密钥。
9 c2 y2 T4 n) q' Q' c6 A7 I
2 }; T; c+ T# x. s对称加密实现2 _; h9 d( L% b& V2 r' P% C
8 M: M- F/ U$ Z2 W/ E) }3 K$ y
对称密码从实现原理上可以分为两种:分组密码和序列密码。前者将明文切分为定长数据块作为加密单位,应用最为广泛。后者则只对一个字节进行加密,且密码不断变化,只用在一些特定领域,如数字媒介的加密等。
- F- K. r% E& {3 F- ?  E5 F: V, _8 H( I9 B
代表算法包括 DES、3DES、AES、IDEA 等。& B1 U; d3 D% [+ ~
8 `& ~: [- F9 a! Y& K, k8 N5 X
DES(Data Encryption Standard):经典的分组加密算法,1977 年由美国联邦信息处理标准(FIPS)所采用 FIPS-46-3,将 64 位明文加密为 64 位的密文,其密钥长度为 56 位 + 8 位校验。现在已经很容易被暴力破解。
5 @  z2 @9 m9 \  z* X  [0 V" q, D. J. H; J3 P! D+ e! O
3DES:三重 DES 操作:加密 –> 解密 –> 加密,处理过程和加密强度优于 DES,但现在也被认为不够安全。  s" {6 b- N1 ]* o8 f* g
4 g# f! n7 F! z3 J; K( k: t
AES(Advanced Encryption Standard):美国国家标准研究所(NIST)采用取代 DES 成为对称加密实现的标准,1997~2000 年 NIST 从 15 个候选算法中评选 Rijndael 算法(由比利时密码学家 Joan Daemon 和 Vincent Rijmen 发明)作为 AES,标准为 FIPS-197。AES 也是分组算法,分组长度为 128、192、256 位三种。AES 的优势在于处理速度快,整个过程可以数学化描述,目前尚未有有效的破解手段。. Y: \- B- m  z5 m

9 q- p0 ^( W6 l& I, a- L* H5 M注:分组加密每次只能处理固定长度的明文,因此过长的内容需要采用一定模式进行加密,《实用密码学》中推荐使用 密文分组链接(Cipher Block Chain,CBC)、计数器(Counter,CTR)模式。
. v0 O6 I: P" Q( m! l* w% Y& y) e% T" w6 x4 n1 f. H0 a
Neo中的AES" V# _. C% H  H+ }0 t( H

  C4 s% J$ e3 I在钱包的加解密中,使用了该算法。
" f% X4 D6 B: ]5 y( `$ S# M" e( i) P4 A2 ^# g/ A
下图的代码在/neo/Wallets/Wallet.cs中,NEP是neo enhancement proposal的意思。参数nep2就是符合这个格式的一个Neo钱包文件。
4 _: t% G0 U$ ^: U: x. w
" y' R8 W6 q: D8 Q: h拿到私钥) b2 c5 _. x0 a& v/ W; d' w) z7 p

  n3 @* G1 x! Q! Q5 P具体的过程,后面再仔细研究分享出来。4 i0 C* s4 X# C; X5 _! F

* m, ^. ], e- U+ D/ p& t非对称加密, @8 b" h' u) X: x3 D: b

9 e, N" {+ o( e& H非对称加密是现代密码学历史上最为伟大的发明,可以很好的解决对称加密需要的提前分发密钥问题。顾名思义,加密密钥和解密密钥是不同的,分别称为公钥和私钥。公钥一般是公开的,人人可获取的,私钥一般是个人自己持有,不能被他人获取。
/ }. v( ?2 x; p1 I* Z! z& H0 H6 [/ F* Y
非对称加密优缺点
* S2 T  d: S6 j! X$ [
- N. i( J; Q7 `' e优点是公私钥分开,不安全通道也可使用。
0 B, H  x3 @9 R* N: v0 u3 j0 j) R, q! z
缺点是加解密速度慢,一般比对称加解密算法慢两到三个数量级;同时加密强度相比对称加密要差。
6 n& }8 K. i. F- S0 l+ I% K* h4 u9 I5 Q) X# |1 x
非对称加密代表算法
) V- k# }8 _8 k7 T( o5 V& ?3 X1 n! Y
非对称加密算法的安全性往往需要基于数学问题来保障,目前主要有基于大数质因子分解、离散对数、椭圆曲线等几种思路。7 Q2 x4 c) u: |- k: |2 \4 i2 p

* s, N- ?& d+ K: _  I( `: N代表算法包括:RSA、ElGamal、椭圆曲线(Elliptic Curve Crytosystems,ECC)系列算法。
9 E& w7 P+ B# p; a- n) F7 n
% ~; [9 S- k, Q# g0 jRSA:经典的公钥算法,1978 年由 Ron Rivest、Adi Shamir、Leonard Adleman 共同提出,三人于 2002 年获得图灵奖。算法利用了对大数进行质因子分解困难的特性,但目前还没有数学证明两者难度等价,或许存在未知算法在不进行大数分解的前提下解密。
: D+ [( ~3 E' j; [  x
, S0 u2 A# ^7 x; IDiffie-Hellman 密钥交换:基于离散对数无法快速求解,可以在不安全的通道上,双方协商一个公共密钥。# M" @2 L+ z4 Z. {% I  z7 B- I- Y
) `9 p$ F3 p7 t) P8 ^4 D
ElGamal:由 Taher ElGamal 设计,利用了模运算下求离散对数困难的特性。被应用在 PGP 等安全工具中。
8 l+ S' h8 b# O: j+ V) j3 ?
; E# Q1 Z" {5 Y2 P7 p' O椭圆曲线算法(Elliptic curve cryptography,ECC):现代备受关注的算法系列,基于对椭圆曲线上特定点进行特殊乘法逆运算难以计算的特性。最早在 1985 年由 Neal Koblitz 和 Victor Miller 分别独立提出。ECC 系列算法一般被认为具备较高的安全性,但加解密计算过程往往比较费时。一般适用于签名场景或密钥协商,不适于大量数据的加解密。' g4 o' m% z$ f. p% K9 M( N

; M$ U. y4 ]2 z7 F1 ORSA 算法等已被认为不够安全,一般推荐采用椭圆曲线系列算法。9 x$ H1 u- J( M1 c# F2 m+ _# [
* _* |4 p8 |9 y9 ~0 d  F2 U
Neo中的数字签名算法
5 I" i/ c* W( K7 w* e) t; U
. d1 a4 L4 b! D  Y在Neo中,也使用了非对称加密算法,我们通过代码来看看是如何使用的。  O/ l7 ?: u3 E+ q& p9 J& l
% V% p0 H2 \' W0 ~% u  U+ O
public virtual WalletAccount Import(X509Certificate2 cert)$ C% b9 c- u1 b8 H

% y6 t9 f) r# J! Q2 ^        {
! V" q8 Y) N7 Z+ W5 A& S4 k' u  {5 a3 L
            byte[] privateKey;$ u7 {* |$ @' S. n. r& G
$ w' ?% i' Y) G" ?5 h
            using (ECDsa ecdsa = cert.GetECDsaPrivateKey())& x2 H) S& d8 m

6 e3 A# t6 @0 ?: L( e, ?' `( |& A- T            {0 i% y1 W, o. j% S- w) |
6 \: T7 v4 s$ N) ?7 B
                privateKey = ecdsa.ExportParameters(true).D;# d+ a( y: Z* W6 w3 C

6 N8 H  A- l, D, R: @, K            }
: t5 m. p7 }6 o/ Z
8 Z( Y. C8 ^# a/ G# a3 m            WalletAccount account = CreateAccount(privateKey);8 O, s9 k' ?: G: w$ c( g

* O. z! M7 ]- z) Q            Array.Clear(privateKey, 0, privateKey.Length);
. E7 G7 V& V6 [; _; f/ \& _$ D
9 k% f1 K% J6 }* G            return account;
5 E! m7 X" V+ B6 J0 U5 z" \) d1 S9 M. w4 t7 X
        }
8 l0 d  e% a" H2 ?+ U% u# l
5 y7 g; |; E' H" [- x( VX509Certificate2是数字证书,和我们在https里面使用的是一样的,从里面拿出私钥后,创建钱包。
9 ^! I, Y9 }4 \' E/ [
& X9 c! o' Z5 ^/ Q3 f" D. ]总结
" F5 O" M+ ~% i' h! I
' d% G0 t: b! f目前只是简单的介绍了一下Neo中加密算法的使用情况,这些加密算法的原理和实现也是很有意思的,后面看看怎么实现的,再分享出来。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

深圳林妙可 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    33