Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文
区块链是基于加密算法,共识算法,p2p网络和经济激励的一个系统,加密算法在里面起到了非常关键的作用,总结一下Neo使用到的加密算法吧。
8 V# t( r: N( r  q1 F0 g8 i0 u: W3 P! x% t) X
关于区块链中密码学的介绍,yeasy大牛的文章已经介绍的非常好,下文主要通过和Neo结合,加上一些自己的理解,去讲述一下加密算法的使用方法。/ F% M# `2 E5 Z5 Q8 w
$ O, r- l6 Y$ v1 {; f6 U& P. _
Hash 算法, W6 O$ `1 X4 f- i( U

2 W/ J- P7 A/ X9 a$ K6 jHash (哈希或散列)算法是信息技术领域非常基础也非常重要的技术。它能任意长度的二进制值(明文)映射为较短的固定长度的二进制值(Hash 值),并且不同的明文很难映射为相同的 Hash 值。
  a4 x; T$ z1 t! L! t! p8 `2 P- b/ h& c
hash函数的作用
* V1 x4 D3 F: P; t2 ~* Q5 m1 o) [7 E; r! u# r
注意上一篇文章说明了如何将hash后的字符串保存到Neo的UInt256类型,其中一个前提就是结果集合在[0-15]之间。4 H) _* ~# j' y7 ~7 o. R8 `
* X* k/ G" y  f  o$ Q' P
哈希完全不等于加密,很多时候开发人员都对用户表中的密码进行哈希后保存,实际上不叫做加密,只是相当于把密码的“特征指纹”保存下来,而对非法攻击者来说,在不知道真实的“密码”的情况下,得到有相同指纹的密码是极为困难的。8 ^. P, g( Z- j% f% j
0 P/ k/ M, }- E
一个优秀的 hash 算法,将能实现:
9 R. E* F8 p3 e0 I* C! d  d+ k4 s, b. m% E8 J# l
正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。
4 n' j5 R" y; D  K! w  C3 ^7 B) l7 n% S2 h* r3 k7 }' V6 y, @# B
逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。  k9 N2 u; `9 w7 m; ?

$ }, L4 x) E" m1 Q0 T输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。) z% v* e5 j3 ]# M' Y! U6 f' z

8 L1 n& y: g4 ~, D冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。
2 y9 M8 X! s. c- Z8 g+ G
, z- x% F& }7 H0 D$ |目前,一般认为 MD5 和 SHA1 已经不够安全,推荐至少使用 SHA2-256 算法。
+ Y: H& D0 g6 u9 m! K3 t7 l' X
6 `& B4 l% D& ]8 i# [' a一般的,Hash 算法都是算力敏感型,意味着计算资源是瓶颈,主频越高的 CPU 进行 Hash 的速度也越快。
9 ]+ l  E5 y( ?* m' s6 U2 @8 p0 M0 _
也有一些 Hash 算法不是算力敏感的,例如 scrypt,需要大量的内存资源,节点不能通过简单的增加更多 CPU 来获得 hash 性能的提升。6 b( y; A+ ]8 @( \
- O4 o# s/ k: i1 B% k8 i
Neo中的hash算法# i. k$ h2 J) p9 p" T0 I$ y

; w. j' P# T1 Y0 f) z$ F( Zscrypt
$ p, e+ |7 L% z% Y' U" j- |, v
" W9 e% m( q. z( z( o7 r0 Bscrpyt算法是由著名的FreeBSD黑客 Colin Percival为他的备份服务 Tarsnap开发的,当初的设计是为了降低CPU负荷,尽量少的依赖cpu计算,利用CPU闲置时间进行计算,因此scrypt不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利用rainbow table进行暴力攻击更加困难。scrypt没有在生产环境中大规模应用,并且缺乏仔细的审察和广泛的函数库支持。所以scrpyt一直没有推广开,但是由于其内存依赖的设计特别符合当时对抗专业矿机的设计,成为数字货币算法发展的一个主要应用方向。
2 c: h3 W  [3 H9 n! w  M" {; q' j
scrypt的参数
8 Q9 }2 @. l7 ]7 d" ~/ T  w& {" @  ~* Z9 d5 k
https://stackoverflow.com/questi ... scrypt-work-factors
8 }3 L, `+ y$ @5 h$ f3 E
! ^+ ]* N# P4 f4 F1 h$ I2 uCpercival mentioned in his slides from 2009 something around3 ~  y- t; u1 `$ @

" h  i0 E& p5 h& ?(N = 2^14, r = 8, p = 1) for
) W. Y0 _# y0 H- ^
& b. P$ x$ B% N6 h/ P# G9 y; f7 kscrypt特点& h$ E( c6 y+ Y! C2 [& s

$ s& D3 X" q: E$ k! H' C3 E% Dscrpyt的出名主要是因为莱特币为了抵抗比特币矿机采用的一个算法,可以指定内存和cpu的使用量,可以用参数确定hash的时间。' O# w. h0 Y+ A( M1 S& W7 w
& n1 i2 R+ U3 s/ _/ M3 q
Neo中如何使用scrypt. d! i/ p* V) B
0 q- |& J+ h$ R
// in NEP6Account
& w) ^! W* P5 m- d" R4 K
; v/ ~$ L! S; H1 \0 P/ @! H! ~   public NEP6Account(NEP6Wallet wallet,& K% [6 Q% ~  F$ [; f* N, m
  E& o1 h2 [3 i- @( k
              UInt160 scriptHash, KeyPair key, string password)
$ L2 F6 u2 O7 @9 s. d0 P
$ i4 Z/ d$ P) }& c6 r            : this(wallet,+ z4 d# I) S9 `* U
; i/ s. G6 M! E* a; Q6 O
              scriptHash,
1 c) D, c: u' t9 v4 e+ F3 I0 \5 S
& T! j+ c* M% ~& W9 V6 ~              key.Export(password, wallet.Scrypt.N, wallet.Scrypt.R, wallet.Scrypt.P))
. b; `8 b# L  x* z; j; ?* q) [6 p" V) S0 F. G& |
        {
9 w( n; U2 I* n" G5 T# @
0 X- e, E8 w( R7 N& w& i            this.key = key;/ X1 F+ F( `& ^1 ]. q: L
& n1 N1 I9 n! W3 X
        }
6 z% r/ r; Y/ s  y. ^4 X4 H# E1 Z* W* S5 p5 h
// in class KeyPair5 [+ C; w3 W/ g$ n0 L& w* A1 k

$ E2 E/ a& J' q" f- t0 mpublic string Export(string passphrase, int N = 16384, int r = 8, int p = 8): l7 c0 a8 r  R2 P& P6 _, Y/ e0 G

$ D- S3 t& e; ?. ?4 [{
* K' [% G- G" J% }) t$ u" @0 |+ ~9 x6 q# I
    using (Decrypt())
+ t6 u# S. Q/ N/ @6 ^* H
7 s' [( T4 }3 S    {
9 N& S. g1 H# |$ l  @& f% i/ S: _8 p; y: y! p! b+ h- R
        UInt160 script_hash = Contract.. r1 e0 I* L8 f
, u/ i# o$ E6 h3 Z! {* c& k( u
            CreateSignatureRedeemScript(PublicKey).ToScriptHash();% U) c/ j, ^- S6 F+ [

" K* i1 I9 M' k( r+ _/ U4 V" ]        % Y, s4 b2 l% N9 @5 y
: h- d/ u: b$ Q
        string address = Wallet.ToAddress(script_hash);6 c( Q& m3 I8 `8 W# f! X

8 _* ], \' J! b6 ?6 m" K: f( T  K. G        byte[] addresshash = Encoding.ASCII.GetBytes(address)
6 v$ ~+ d, t4 J& U* I  d. l9 W0 l* H/ k* v2 x  z
            .Sha256().Sha256().Take(4).ToArray();
7 m% y4 w1 T  h+ A& g+ X
+ B8 [2 d+ b3 U1 E$ E3 [% @$ `7 t        
& i4 X6 J6 M! I* V2 q: m6 Q' Y
0 O/ ^0 f* k/ {, N7 |: o: w        byte[] derivedkey = SCrypt.DeriveKey(5 A& d, X9 `& }' w. u! m% M4 U. I
2 n  i( p8 T0 N8 Z
            Encoding.UTF8.GetBytes(passphrase), addresshash, N, r, p, 64);5 m  _+ C, s) Q2 D1 W

6 u+ f- \5 u/ h. ^        # g( R0 n; K5 d( }& {! V. r
- L2 D, s0 z5 H* l
        byte[] derivedhalf1 = derivedkey.Take(32).ToArray();2 A2 O& B! D$ X$ N; ]7 ]
  E7 e7 U; b4 d, i+ `9 c8 P# Y6 ]
        byte[] derivedhalf2 = derivedkey.Skip(32).ToArray();3 C) C0 T2 N$ D3 f
$ T7 y/ ?; B* Y* Z
        
3 m4 L- u# R" N2 ]1 z; j" a. C( {1 Z3 x" G
        byte[] encryptedkey = XOR(PrivateKey, derivedhalf1)7 E2 ]4 g( j; h! B: L

* A* W" ?* c; _7 M1 ]            .AES256Encrypt(derivedhalf2);
1 e& z3 u8 X  j- Y* F+ r% k# [8 x5 C% ?9 m5 ?! Y5 K* x
        $ W' N$ h; ~$ @3 V7 {* X

1 D$ W; h* P5 }8 O( a        byte[] buffer = new byte[39];) f  P* c, [# W6 z1 C! a

# M6 W7 ^. v0 l& ~        buffer[0] = 0x01;
9 M" L) f! `" Q8 t5 w8 Q, I- ~0 @. K) D3 t+ P$ `
        buffer[1] = 0x42;
2 L. S% |4 m5 x* x$ ^
0 S6 \; Q5 L- K" V* C3 r        buffer[2] = 0xe0;
8 A4 T$ s0 |+ O+ y/ {" ]: B( A# V/ c7 ?" l9 i
        Buffer.BlockCopy(addresshash, 0, buffer, 3, addresshash.Length);! Y, `3 N# h3 a: @
5 r8 w+ M+ b. n* a: k+ G& V& O' c
        Buffer.BlockCopy(encryptedkey, 0, buffer, 7, encryptedkey.Length);
7 T, g) Z! C) Z' T2 s. {) p9 g. p& e) C
        return buffer.Base58CheckEncode();
$ L* a! X% V6 }% ?: p+ ?) q, t% P9 K% E" ?) }+ h7 V4 X" z" g
    }
. K5 b" X0 G. X6 i" g. N: Y3 S+ [2 _" e' E2 ?# r5 x8 S$ x/ v
}
1 \2 i2 C& ~- _; D2 r% Q
' X5 J/ u- ~/ H  L4 ~6 _% F) U4 l可见SCrypt.DeriveKey方法参与了加密密钥的生成过程。后面解密也必然使用到了这个hash算法。所以该hash算法参与了加密过程,而加密密钥用AES256Encrypt生成。可以确定的是,使用该算法的逆过程,可以解密出密钥来,这个比WIF要安全。
7 r! T; f. x0 r5 V8 k/ A; B9 A! ~/ \8 h1 v, D( ^/ b
Murmur3
% f2 e/ h! S0 @, b  r7 ]2 H( V, E; f- v5 A) _/ K* I
MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。[1][2][3]由Austin Appleby在2008年发明,[4][5] 并出现了多个变种,[6] 都已经发布到了公有领域(public domain)。与其它流行的哈希函数相比,对于规律性较强的key,MurmurHash的随机分布特征表现更良好。[7]- R5 o- H$ N0 V

0 L/ D- L: i% U8 Z% `Murmur3特点; G/ ]. {6 x4 F. X" u4 x: `
7 Y6 j( ^1 d7 K+ J) ?
1.碰撞率低
, k# |! y! j% ^' p
$ z7 b+ i8 n/ k  g4 J2.计算速度快
+ l5 f- e+ K5 b$ h$ P! S" T8 a7 v0 T8 y2 y& Z! Y
3.擅长大文件的hash& V9 r# I) K: p" ]1 G* u" b
( q7 N  t0 Z0 m1 f6 F! m' W- b! z% Y* d5 e
Neo中如何使用Murmur3) N9 l* q0 s* d* T/ O

$ K, u/ l/ z. ]) W3 zNeo中Murmur3# g- c" t3 C0 Y/ p
) L3 f  L: R( M4 E
Murmur3的具体算法,以后再研究,现在大致知道,Neo用Murmur3生成key,也在BloomFilter中使用了。
+ R5 s3 w6 }$ E$ B1 }6 B* E8 k
  G. ]: `. R3 k6 b! xRIPEMD-160
/ T, C) ~! ~( X3 b! ^5 g+ J$ u7 a
Neo中用这个算法来生成短一点的hash值,script hash就是用了这个算法。
; J) Y* @: f% p% f7 k1 Z# u/ d" t! L8 |. U# A/ U; X9 `
// in neo-compiler/neo/neo/Core/Helper.cs
" M! J2 V( f1 c9 i; f1 o# d$ E
: V% t- v- ]8 V1 r; rpublic static UInt160 ToScriptHash(this byte[] script)
* b6 u* y! s, }6 ]' i  X, y
0 e; ^4 h- I# K        {! V6 n% K) p0 n

% k; u, a" U, v8 ]  t$ Y            return new UInt160(Crypto.Default.Hash160(script));
3 k& _/ T, e. U; {# K8 |& u8 _; `: b, u6 A( ?! Q8 ^9 d
        }" a% W& {* Q/ l

! C: m& `; c! d& z7 O+ o5 WRIPEMD-160算法的特点6 l' A0 b5 u  a9 D) ~: I9 }
3 ?% E3 L  s- e
RIPEMD-160能表现出理想的 雪崩效应 (例如将 d 改成 c,即微小的变化就能产生一个完全不同的哈希值):
8 m( m$ j. z( g. F) F, t
4 U1 S; G8 |) }6 r加密算法体系9 P) {/ i5 U% z; w2 N

5 T. X9 N% }6 N+ }/ D7 d- m现代加密算法的典型组件包括:加解密算法、加密密钥、解密密钥。其中,加解密算法自身是固定不变的,一般是公开可见的;密钥则往往每次不同,并且需要保护起来,一般来说,对同一种算法,密钥长度越长,则加密强度越大。1 ?( k: I. K( e
! w: M1 o/ H$ K3 [3 r* V8 ~
加密过程中,通过加密算法和加密密钥,对明文进行加密,获得密文。
! X, W" ]' k0 ?( z
* _( K& x2 q4 I7 A2 X! `: O3 N解密过程中,通过解密算法和解密密钥,对密文进行解密,获得明文。
1 v6 d3 s' W. T8 ^9 L" T# N% i- }. B$ P9 y! v% w1 a
根据加解密的密钥是否相同,算法可以分为对称加密(symmetric cryptography,又称公共密钥加密,common-key cryptography)和非对称加密(asymmetric cryptography,又称公钥加密,public-key cryptography)。两种模式适用于不同的需求,恰好形成互补,很多时候也可以组合使用,形成混合加密机制。* d' s( K' w( w7 |

3 g; r* h/ M4 q% U  V- L并非所有加密算法的强度都可以从数学上进行证明。公认的高强度加密算法是在经过长时间各方面实践论证后,被大家所认可,不代表其不存在漏洞。但任何时候,自行发明加密算法都是一种不太明智的行为。
% c# |$ s1 O1 o! A
$ i* Z: Y( k) A9 b对称加密
1 @: V& }3 ?/ h9 H& x
$ R2 B( v( z+ x* a) q! o顾名思义,加解密的密钥是相同的。0 `4 u" h3 h$ M  b

: v: Z; o3 N8 @* s对称加密优缺点
5 A; U; S; S. H: A' |6 d" P) O% r. u8 N3 F
优点是加解密效率高(速度快,空间占用小),加密强度高。
( b2 X2 ~  K: D5 y7 A4 a
) [, ]% G. X/ B6 y# H/ v; M# y缺点是参与多方都需要持有密钥,一旦有人泄露则安全性被破坏;另外如何在不安全通道下分发密钥也是个问题。& h4 V! C1 o8 _, E$ B
% y* y1 ?5 O0 L+ d0 Q7 `1 _+ y  H
适用于大量数据的加解密;不能用于签名场景;需要提前分发密钥。
4 A& v( D+ T  M. u* J; V% j' ?! M; I# T7 |5 E5 N
对称加密实现' n; B& }. @- ]5 q! M: l
1 S5 w7 X! z6 k* z
对称密码从实现原理上可以分为两种:分组密码和序列密码。前者将明文切分为定长数据块作为加密单位,应用最为广泛。后者则只对一个字节进行加密,且密码不断变化,只用在一些特定领域,如数字媒介的加密等。: f5 X( I' B  L! J7 x# s  O
  h- I; w9 `: J/ x3 K8 G; d5 z
代表算法包括 DES、3DES、AES、IDEA 等。
& m+ u1 E& U3 |# T( u- F  R& J! Y8 a, S
DES(Data Encryption Standard):经典的分组加密算法,1977 年由美国联邦信息处理标准(FIPS)所采用 FIPS-46-3,将 64 位明文加密为 64 位的密文,其密钥长度为 56 位 + 8 位校验。现在已经很容易被暴力破解。" q' X9 W9 c  |1 M) B. p) F
9 Y$ r# F& |( o* E" n+ Q
3DES:三重 DES 操作:加密 –> 解密 –> 加密,处理过程和加密强度优于 DES,但现在也被认为不够安全。
" W1 @8 E/ H5 l5 B1 X9 D: Y
  e6 g* \( G% U% [8 R3 ~AES(Advanced Encryption Standard):美国国家标准研究所(NIST)采用取代 DES 成为对称加密实现的标准,1997~2000 年 NIST 从 15 个候选算法中评选 Rijndael 算法(由比利时密码学家 Joan Daemon 和 Vincent Rijmen 发明)作为 AES,标准为 FIPS-197。AES 也是分组算法,分组长度为 128、192、256 位三种。AES 的优势在于处理速度快,整个过程可以数学化描述,目前尚未有有效的破解手段。
* L0 ~4 i, [' z/ B4 B
6 q/ }6 L; J) r6 ]* Q( f注:分组加密每次只能处理固定长度的明文,因此过长的内容需要采用一定模式进行加密,《实用密码学》中推荐使用 密文分组链接(Cipher Block Chain,CBC)、计数器(Counter,CTR)模式。4 L) P6 U" \1 u: g5 ~8 C& D! Q) }: W
- u4 R! r0 s/ f; h2 d
Neo中的AES
+ e8 f3 ^' A, ?+ K* ^
( Y" T$ C5 g! v1 v# [) o9 B在钱包的加解密中,使用了该算法。9 Z. k/ j: Q- ^6 }( r' s: D, u

6 w6 W# D* R% A1 v' l$ }3 m: v下图的代码在/neo/Wallets/Wallet.cs中,NEP是neo enhancement proposal的意思。参数nep2就是符合这个格式的一个Neo钱包文件。- m+ u  ?9 h5 W& Y6 Q7 \: \/ H

. m. R! |6 }% B: B) T+ J8 q( b拿到私钥5 p5 D, }4 D" X! G6 x$ ?3 _
/ {0 g+ d5 p( I: j2 ?
具体的过程,后面再仔细研究分享出来。/ W: R+ J" i9 ?; S1 h3 Q7 u

+ N" _9 s7 F0 o  y非对称加密
1 C- q9 D! V+ u0 k
( R3 b2 o) ]! ~  }非对称加密是现代密码学历史上最为伟大的发明,可以很好的解决对称加密需要的提前分发密钥问题。顾名思义,加密密钥和解密密钥是不同的,分别称为公钥和私钥。公钥一般是公开的,人人可获取的,私钥一般是个人自己持有,不能被他人获取。
( u! I. f) K3 ~' g
5 W2 A# |+ s* o% g非对称加密优缺点% Q6 E  `! z- f" ?8 @

4 `5 e: |" K( G/ t& a+ g9 e优点是公私钥分开,不安全通道也可使用。
0 r9 m( ]1 f' V6 Q' f" c; j
0 e- {( K+ L( [( l缺点是加解密速度慢,一般比对称加解密算法慢两到三个数量级;同时加密强度相比对称加密要差。
  O. o3 r( s, R* h- I3 Q+ r) `/ b% A& Y5 H+ ~/ `
非对称加密代表算法/ G! m9 E; z! R2 M) e3 ?+ v4 @
% i" O- U8 L: ]* I  e0 f+ M
非对称加密算法的安全性往往需要基于数学问题来保障,目前主要有基于大数质因子分解、离散对数、椭圆曲线等几种思路。  P# X. b# P! l  A0 @; s8 P6 D7 P
7 w* s& o8 E! o, h7 y
代表算法包括:RSA、ElGamal、椭圆曲线(Elliptic Curve Crytosystems,ECC)系列算法。
& W0 y+ {, ^1 ]' [* q4 H6 u" R8 K3 n( b: M
RSA:经典的公钥算法,1978 年由 Ron Rivest、Adi Shamir、Leonard Adleman 共同提出,三人于 2002 年获得图灵奖。算法利用了对大数进行质因子分解困难的特性,但目前还没有数学证明两者难度等价,或许存在未知算法在不进行大数分解的前提下解密。" X1 Z$ l0 c% N1 }5 I" H% R; ?

. Q5 i" @8 \. j0 _Diffie-Hellman 密钥交换:基于离散对数无法快速求解,可以在不安全的通道上,双方协商一个公共密钥。
% E* X9 Y5 x9 v) x- s; I. X2 B5 O2 A, S9 @) o% d/ v0 U/ y; H+ f
ElGamal:由 Taher ElGamal 设计,利用了模运算下求离散对数困难的特性。被应用在 PGP 等安全工具中。2 B3 D5 t. g8 C4 k9 K) ^
( a. a! ?5 l" A2 o& L
椭圆曲线算法(Elliptic curve cryptography,ECC):现代备受关注的算法系列,基于对椭圆曲线上特定点进行特殊乘法逆运算难以计算的特性。最早在 1985 年由 Neal Koblitz 和 Victor Miller 分别独立提出。ECC 系列算法一般被认为具备较高的安全性,但加解密计算过程往往比较费时。一般适用于签名场景或密钥协商,不适于大量数据的加解密。( x  K: h0 [% I  \. s
" q: A& ?& @  E
RSA 算法等已被认为不够安全,一般推荐采用椭圆曲线系列算法。; n( x. e( v0 y0 @/ m+ l# \
5 g7 Y# w2 Q& j4 w& `
Neo中的数字签名算法$ |( C: }; X. V
1 b( c* C; X4 u' ]/ S
在Neo中,也使用了非对称加密算法,我们通过代码来看看是如何使用的。
) l- O6 H* W' |' E' d/ P
" n* L/ @' a3 N9 v# B/ Z( `% Jpublic virtual WalletAccount Import(X509Certificate2 cert)
, T% ^- _9 z/ I% i
( H8 e, `2 c+ b/ H6 g4 P, K2 Z        {5 s! [) k5 I. J! s
* D5 t% h. X% N
            byte[] privateKey;- |) r9 S3 m* G9 I8 y0 f( V
9 m6 K: y4 I$ k" \5 V2 I* r
            using (ECDsa ecdsa = cert.GetECDsaPrivateKey())4 ]3 ~3 A2 R8 d$ Y0 I' }1 E8 R
6 _$ d. C2 w7 i2 p( M
            {
( m7 E' h  F9 ^( Q6 V9 y9 J$ @& a! ?6 P, |
                privateKey = ecdsa.ExportParameters(true).D;3 J1 u; g5 }' ?% ~. c0 r- b" S

$ C- o; ]3 K! Q' e: I3 g7 U8 Q            }1 b/ z- I* j4 \8 X9 F

: x7 B+ W, p) h" m) f            WalletAccount account = CreateAccount(privateKey);2 x! ?5 [+ m  F+ n

) [' J  b5 J% n" z) u9 R( }            Array.Clear(privateKey, 0, privateKey.Length);5 r  h  |- j$ n: Y* U3 o! }
& r: |$ }/ l% k4 o7 q
            return account;9 s; m# c! K, l% x  \# d
. ^$ W3 K) i1 N) V) o1 @; B- u
        }2 Y9 ]# q- J& t  b9 h( p
& ]3 ^  v9 y  G' |
X509Certificate2是数字证书,和我们在https里面使用的是一样的,从里面拿出私钥后,创建钱包。
/ e* G' S, c$ D  v" u. T7 l) c/ O
总结
8 R- W$ j. d; X! {4 K0 n5 u
& y9 l+ S# {7 a: i/ v目前只是简单的介绍了一下Neo中加密算法的使用情况,这些加密算法的原理和实现也是很有意思的,后面看看怎么实现的,再分享出来。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

深圳林妙可 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    33