Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文
区块链是基于加密算法,共识算法,p2p网络和经济激励的一个系统,加密算法在里面起到了非常关键的作用,总结一下Neo使用到的加密算法吧。/ G# x8 W3 c4 o+ ]
" i$ Y9 G: ]/ M6 V2 \
关于区块链中密码学的介绍,yeasy大牛的文章已经介绍的非常好,下文主要通过和Neo结合,加上一些自己的理解,去讲述一下加密算法的使用方法。
  o$ V1 |  V) ]1 Y! r7 ]- D- r& d* o* K& v
Hash 算法
% `+ ~7 i/ J  b9 a
# ~" y: M" J$ o( w$ CHash (哈希或散列)算法是信息技术领域非常基础也非常重要的技术。它能任意长度的二进制值(明文)映射为较短的固定长度的二进制值(Hash 值),并且不同的明文很难映射为相同的 Hash 值。
5 ]6 F1 ]! a& u" E% {
3 J& Z, Q! |! H: @# j# Shash函数的作用
( x+ g; F. R' J
- O1 V/ J# X2 D- e2 M1 c* ^注意上一篇文章说明了如何将hash后的字符串保存到Neo的UInt256类型,其中一个前提就是结果集合在[0-15]之间。
: A% p2 {) ], w% E( N) V/ U" M, b  D
哈希完全不等于加密,很多时候开发人员都对用户表中的密码进行哈希后保存,实际上不叫做加密,只是相当于把密码的“特征指纹”保存下来,而对非法攻击者来说,在不知道真实的“密码”的情况下,得到有相同指纹的密码是极为困难的。8 N, Z/ C+ O6 {. a" Z

. e; p  F- J) D( e0 J5 K9 S/ I一个优秀的 hash 算法,将能实现:
6 e5 v) k1 G# l7 m6 i1 x# g( u* M9 J! k0 P% Q- K3 |" l9 T! c+ r
正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。
' P$ I  I5 B0 [; `2 J/ e: s. f0 |
逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。
) X! L; V3 f% R6 @
0 b; a# t& r4 ]: V输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。3 h2 _) g/ c3 Z: e* H
. R$ b2 {6 C; H" w3 n8 K% T. ~
冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。# Y, ^- M1 e' f" f/ j2 G. }/ l) \
3 F9 b3 C: e: G
目前,一般认为 MD5 和 SHA1 已经不够安全,推荐至少使用 SHA2-256 算法。* @" B' s" Y" N0 w( R. {1 o) B+ m6 s
% h' j; H, r' c2 j" }# |: j
一般的,Hash 算法都是算力敏感型,意味着计算资源是瓶颈,主频越高的 CPU 进行 Hash 的速度也越快。1 o/ C: q( C  P. W* X% j

0 ~6 }5 e' m# }& L( K( s/ z也有一些 Hash 算法不是算力敏感的,例如 scrypt,需要大量的内存资源,节点不能通过简单的增加更多 CPU 来获得 hash 性能的提升。
. O- x1 x- i5 b. |, M3 c/ i, }/ @0 h8 Y# f  L
Neo中的hash算法! w# i) E5 G1 @& q

) S. s$ A( t- B7 {, cscrypt
  {* x  e! B8 v6 ]" j
9 t. T+ z% Y  ^- |3 xscrpyt算法是由著名的FreeBSD黑客 Colin Percival为他的备份服务 Tarsnap开发的,当初的设计是为了降低CPU负荷,尽量少的依赖cpu计算,利用CPU闲置时间进行计算,因此scrypt不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利用rainbow table进行暴力攻击更加困难。scrypt没有在生产环境中大规模应用,并且缺乏仔细的审察和广泛的函数库支持。所以scrpyt一直没有推广开,但是由于其内存依赖的设计特别符合当时对抗专业矿机的设计,成为数字货币算法发展的一个主要应用方向。
9 j. y; N) c2 N4 [* O' S
$ ]4 R* R# h- j% vscrypt的参数
+ i! \) p6 ?3 [6 r/ g/ N
9 g7 h$ n0 o8 f4 l$ ^* T- }https://stackoverflow.com/questi ... scrypt-work-factors
$ y3 _$ |: h$ _# Q  f$ l$ h4 i* e: U5 o4 W
Cpercival mentioned in his slides from 2009 something around
/ A; P7 h) }" ?* V5 P7 k) U$ _0 t/ F& P- D0 Q$ W5 g" D  K
(N = 2^14, r = 8, p = 1) for
4 ~& f( u8 [% W- J, p+ a8 Q' ], [
scrypt特点
+ o( F" X$ B; A, q. h# c. Q+ q$ ]/ a4 F, @
scrpyt的出名主要是因为莱特币为了抵抗比特币矿机采用的一个算法,可以指定内存和cpu的使用量,可以用参数确定hash的时间。
- V/ H9 e. J6 B5 c2 c! V, Q$ C: D2 \" L1 k4 p3 c, A+ E' {( j* z
Neo中如何使用scrypt% s# D: d3 s. \4 F& m. e7 R5 F$ O
- i1 u6 p; ^+ y' b) g" d/ e% d3 q( v
// in NEP6Account
+ i2 Q0 A4 |3 w. d/ P/ C5 K! w- G
   public NEP6Account(NEP6Wallet wallet,
  d  l) _4 B- L. O4 S' O5 {( U6 A7 C' _& n0 f
              UInt160 scriptHash, KeyPair key, string password)
. U# Y! E" c. E/ ~! A
& L1 v" h: I8 s' r% n            : this(wallet,
7 L$ N# a6 j& T* s3 R
' y8 G$ f+ t, S' [, D' Y, C. P+ p              scriptHash,4 U+ x( c; R1 I6 Y$ V

& i0 o1 j( H7 U# [2 u              key.Export(password, wallet.Scrypt.N, wallet.Scrypt.R, wallet.Scrypt.P))
# `9 y) q$ Y* E1 Q, K/ e2 \! d2 M. ]2 U7 {* K: P
        {
" X4 E) `; v- T$ G$ K9 ?6 p
# `& y. I9 e6 _& r2 V7 g            this.key = key;
- m1 X# t0 ^, a1 S) p% S% Y
- m5 ^5 p) f, h1 C# o        }; e0 p( ], C; ^  x

3 D+ o! f' z2 h8 C+ i4 T4 h// in class KeyPair  G3 |" M9 Z; n6 z8 q
) F' w" E6 M) m" n) m( h
public string Export(string passphrase, int N = 16384, int r = 8, int p = 8)8 [+ L; a: F6 p1 A# _& |) |/ m
! I3 j! z  M" c* h  X3 [
{* G) N9 ~) Q  s6 h$ D2 D8 W( j

+ p8 }4 z5 I- G. `: @3 x    using (Decrypt())0 Y2 j- j: b% l$ G" w- `, T

2 V$ [8 C' Y3 n  T0 v    {% G: A, {, f3 u# Y3 ~- m9 W9 z

1 b& e1 s) u' j8 U7 a1 }/ f6 E) y" G        UInt160 script_hash = Contract.
  S" Z: G4 a; u. B$ \* B/ d6 K) S% J+ X
7 w# p# J7 H; }# J6 l  K            CreateSignatureRedeemScript(PublicKey).ToScriptHash();
' A; Z; ~9 ?$ z- R1 W% L6 N! y* a. C; K% M2 r
        
& z. l# W- D# B& V+ i0 T1 }( q, r5 \5 h; {/ n0 ]6 e, i1 {
        string address = Wallet.ToAddress(script_hash);
& ?) K0 v* h% U, r! A) o. x
8 Y8 N& r/ E# n        byte[] addresshash = Encoding.ASCII.GetBytes(address)
2 r7 M2 X8 B6 F0 h/ x0 x
6 l6 W' a. b0 N9 |; S            .Sha256().Sha256().Take(4).ToArray();$ R0 i+ {1 J6 g  k: J1 l
1 p* t' b) W7 F$ f" Z0 S
        
* Y# P' j# n& Z9 q4 V; v# @+ M. b
        byte[] derivedkey = SCrypt.DeriveKey(" b, Z2 h+ f4 k, R

) \$ c3 a; E2 m) n5 }1 Q% r            Encoding.UTF8.GetBytes(passphrase), addresshash, N, r, p, 64);
( Q1 z( ]) H: a* n$ o' e$ a8 C4 _* O5 V
        + f) @# k% |# O+ k4 I' O9 J" }( g
7 d  M+ l/ S$ ~7 @
        byte[] derivedhalf1 = derivedkey.Take(32).ToArray();9 }$ p/ R$ ~+ D. `
) e8 Y. F: ?3 l& G2 J" n2 ?
        byte[] derivedhalf2 = derivedkey.Skip(32).ToArray();
5 Y  G7 A/ `) |1 h" x
+ r1 M% @0 P. q7 H        
& m7 ?! A* c; ]5 `! J& M
2 x5 `5 C1 k9 T; W% T        byte[] encryptedkey = XOR(PrivateKey, derivedhalf1)8 v4 M& l, O0 S7 N: C

7 Y' B" C, t* o* M) s            .AES256Encrypt(derivedhalf2);
+ K5 a9 o' b/ o4 b* i3 _! \+ C/ I6 H9 ~
        ! P  F8 T8 P" W6 W9 J

' P% R% ^* ]0 R  E        byte[] buffer = new byte[39];3 I# X# W$ I6 g) R. V& P+ x

! f& E" n' r+ w, }' R: W0 X; F; h        buffer[0] = 0x01;
  `, @. N1 P" x# z# f& F" u. e* }$ c
( F( A" l+ s) `5 P7 T& @2 b: [        buffer[1] = 0x42;1 j, c0 }! H" \4 m7 M0 |; ?! H
& m# r' x. E/ k0 q$ S- [
        buffer[2] = 0xe0;3 E$ y& y6 j  l
3 p3 t4 Z5 D+ H: E. {& C
        Buffer.BlockCopy(addresshash, 0, buffer, 3, addresshash.Length);
8 v8 B  I9 c( D  C6 D, ?  q0 j9 A& _9 h  M% V* P, s, i' z: U9 O
        Buffer.BlockCopy(encryptedkey, 0, buffer, 7, encryptedkey.Length);
( m) l4 Z* i& b
/ N1 }" m2 u7 R1 r" j" |        return buffer.Base58CheckEncode();
7 l) }; Y# a/ ^* M3 X2 p3 ~6 `' Z$ f: s/ y6 y
    }$ K1 d* b8 w- t0 a. j
( N; c+ [5 z% c0 U; N9 K
}1 R4 T  e) r9 H/ x" L7 G$ J

3 p% E. F3 L2 j9 [" `可见SCrypt.DeriveKey方法参与了加密密钥的生成过程。后面解密也必然使用到了这个hash算法。所以该hash算法参与了加密过程,而加密密钥用AES256Encrypt生成。可以确定的是,使用该算法的逆过程,可以解密出密钥来,这个比WIF要安全。
: ^" P* X- r' v( @
  O# _+ G# s1 l1 h+ fMurmur3
' v4 E. @' h" I2 H/ l9 @8 a: [& o3 k; H3 C
MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。[1][2][3]由Austin Appleby在2008年发明,[4][5] 并出现了多个变种,[6] 都已经发布到了公有领域(public domain)。与其它流行的哈希函数相比,对于规律性较强的key,MurmurHash的随机分布特征表现更良好。[7]
4 l9 y7 ^7 r& c
9 F) v! [2 r: U2 yMurmur3特点* ?. p' _$ `% K8 \

$ v! V3 p8 D/ \, E" g4 D/ ~1.碰撞率低
, o* h, p5 e& q+ B' e2 q) P6 j
9 }/ L  ~' S) e: y1 f% w7 X& V, e2.计算速度快3 H& e) M) F5 s8 {. \# K* y6 Z
+ [5 Q3 S" W5 \: Q0 c! Z, n
3.擅长大文件的hash) g& e3 {. D8 y0 t3 o
1 c4 g) e) @) \
Neo中如何使用Murmur3
9 n/ `+ v4 S$ x0 Y1 H7 n
7 _  Y& q( ~3 F+ W4 s1 D$ C3 o4 ANeo中Murmur3+ K/ k, V6 [1 Q. P* s# z
% o" E. p8 @) P" [; c$ ?
Murmur3的具体算法,以后再研究,现在大致知道,Neo用Murmur3生成key,也在BloomFilter中使用了。
$ n9 U* C) E8 B. ?( `& ^/ T! k* X$ j" \9 l; L$ B9 O5 }/ R
RIPEMD-160
: w* v5 y& g$ B0 i) R; N; Q$ v' A
0 |" ]/ ^/ p6 M* FNeo中用这个算法来生成短一点的hash值,script hash就是用了这个算法。  U* e& O& L1 Z; q" z* e) \+ X
) a, O0 E- r0 i, M( q+ q
// in neo-compiler/neo/neo/Core/Helper.cs
9 l5 i; [: N8 ?' ]& G$ u) X! R
( \$ q+ o. S8 \public static UInt160 ToScriptHash(this byte[] script)# f& f# B; Q. @3 `  q
/ Q4 v% `& K' t* A1 c1 a; y
        {
% H# M, [8 J* f- ^. c0 o& ^. ~! ]9 t8 U: {
            return new UInt160(Crypto.Default.Hash160(script));
+ E3 t- W3 N4 C2 f2 w6 F, \; I$ z% F) d; ]. V& Z8 r
        }
9 `1 w9 M0 [% o" Y. G
! c# a4 W, u- S$ r2 g3 Y- ^RIPEMD-160算法的特点
9 R% G$ G: l( A% {' G, p+ T* |' }# i3 `$ v0 m3 e
RIPEMD-160能表现出理想的 雪崩效应 (例如将 d 改成 c,即微小的变化就能产生一个完全不同的哈希值):6 i/ a! E2 ?9 R$ U% N5 t, W# W$ N' }

8 ~& W6 y( |+ d2 B# K$ @加密算法体系: X6 I0 ^2 f; Q' w
+ z% ~5 |; ?1 f; e7 [3 o, S
现代加密算法的典型组件包括:加解密算法、加密密钥、解密密钥。其中,加解密算法自身是固定不变的,一般是公开可见的;密钥则往往每次不同,并且需要保护起来,一般来说,对同一种算法,密钥长度越长,则加密强度越大。1 V( J3 J) q- p
$ c" H4 ^3 O+ V6 w$ C3 v
加密过程中,通过加密算法和加密密钥,对明文进行加密,获得密文。- N/ }/ G* n9 k8 @; F

% n9 G' M5 B% N9 K  ]解密过程中,通过解密算法和解密密钥,对密文进行解密,获得明文。
: k+ W# \' n% b# O) a  p( v( p
" z$ R/ o# D/ y根据加解密的密钥是否相同,算法可以分为对称加密(symmetric cryptography,又称公共密钥加密,common-key cryptography)和非对称加密(asymmetric cryptography,又称公钥加密,public-key cryptography)。两种模式适用于不同的需求,恰好形成互补,很多时候也可以组合使用,形成混合加密机制。
% Y) ~# F% h5 @. t7 @
4 i* D3 G  Z2 F8 S! n6 |+ u并非所有加密算法的强度都可以从数学上进行证明。公认的高强度加密算法是在经过长时间各方面实践论证后,被大家所认可,不代表其不存在漏洞。但任何时候,自行发明加密算法都是一种不太明智的行为。+ k6 v6 G! H6 T
! K( J7 n$ i4 }5 c6 l. ?, ^
对称加密) H" h' Q+ ]  v2 Q9 m1 B

: O+ g1 V& f, b( ^- x2 F1 B9 b顾名思义,加解密的密钥是相同的。( H* A. E, d1 U1 @' }0 X

- w3 |3 g* k" x7 u) ~对称加密优缺点
* O+ X& W! p: |- T
  L% i) R  r# s! Q) U8 S. M  I优点是加解密效率高(速度快,空间占用小),加密强度高。5 l' d. c" l  {7 x
9 j4 y& q0 `; S
缺点是参与多方都需要持有密钥,一旦有人泄露则安全性被破坏;另外如何在不安全通道下分发密钥也是个问题。
7 O4 N' k! Q2 F* q! q* \9 c! G* a
适用于大量数据的加解密;不能用于签名场景;需要提前分发密钥。
0 h' v0 g! l0 t/ G: G  o& }
1 M3 n2 ?, C/ y对称加密实现' R4 I( R2 P2 x: F# o( h
+ C* W9 \' K5 y( g3 `+ m
对称密码从实现原理上可以分为两种:分组密码和序列密码。前者将明文切分为定长数据块作为加密单位,应用最为广泛。后者则只对一个字节进行加密,且密码不断变化,只用在一些特定领域,如数字媒介的加密等。$ x7 n& D8 w9 e" z! A6 ~

% @7 J4 b/ h5 a8 L$ B代表算法包括 DES、3DES、AES、IDEA 等。
7 s( o& A; o( W4 r
$ g* a; j" N9 u# f% g0 I! {DES(Data Encryption Standard):经典的分组加密算法,1977 年由美国联邦信息处理标准(FIPS)所采用 FIPS-46-3,将 64 位明文加密为 64 位的密文,其密钥长度为 56 位 + 8 位校验。现在已经很容易被暴力破解。- H( [& k; v3 G, F# S& M& P8 N' O* }

) @* h7 }9 h; m3DES:三重 DES 操作:加密 –> 解密 –> 加密,处理过程和加密强度优于 DES,但现在也被认为不够安全。
  S( i& j; m! m8 X! U+ q& v, D6 @& N. z; Q
AES(Advanced Encryption Standard):美国国家标准研究所(NIST)采用取代 DES 成为对称加密实现的标准,1997~2000 年 NIST 从 15 个候选算法中评选 Rijndael 算法(由比利时密码学家 Joan Daemon 和 Vincent Rijmen 发明)作为 AES,标准为 FIPS-197。AES 也是分组算法,分组长度为 128、192、256 位三种。AES 的优势在于处理速度快,整个过程可以数学化描述,目前尚未有有效的破解手段。
" [; r' ~0 x( x  u
: O6 T0 |! Y; o" z$ X4 y& q0 E注:分组加密每次只能处理固定长度的明文,因此过长的内容需要采用一定模式进行加密,《实用密码学》中推荐使用 密文分组链接(Cipher Block Chain,CBC)、计数器(Counter,CTR)模式。& A. f5 g5 ^: A, t: E4 L
& B5 F0 |& {' }# Q( Q
Neo中的AES, ^* z. e3 ?* A' D, z# l" |% e. e
% K4 j) w) |. p' J
在钱包的加解密中,使用了该算法。) q# W5 a3 N( w6 K- @' |# I
2 S: _5 l# r$ q) e: t
下图的代码在/neo/Wallets/Wallet.cs中,NEP是neo enhancement proposal的意思。参数nep2就是符合这个格式的一个Neo钱包文件。8 ]1 V+ F. d! P: x7 Q" m7 q% [

9 W# `1 q* w+ k' A; M1 A5 ^. r, A) r1 @拿到私钥
2 r; \# M3 I: p! q
( \/ i) T! l7 S1 b4 H  }+ E% V7 \- L9 E具体的过程,后面再仔细研究分享出来。
& E. s% [3 U3 N* y, ]" z
$ N0 W, M9 c2 j非对称加密
7 x! }# i- q) `0 `  @7 h
& h# p, `) x# J* R非对称加密是现代密码学历史上最为伟大的发明,可以很好的解决对称加密需要的提前分发密钥问题。顾名思义,加密密钥和解密密钥是不同的,分别称为公钥和私钥。公钥一般是公开的,人人可获取的,私钥一般是个人自己持有,不能被他人获取。
& }& i* Y5 v4 r  P7 r* T( Y
, D5 W# A. \1 _! |6 K' {3 m3 b, A非对称加密优缺点
2 M; a' g5 h: v, x
& m, D7 {" z: u8 a) e4 ^优点是公私钥分开,不安全通道也可使用。* G+ `' Y/ F. ~: H: e- _0 R3 t# T0 {

- O3 _& Q2 ~* ?, Z1 y( f* f缺点是加解密速度慢,一般比对称加解密算法慢两到三个数量级;同时加密强度相比对称加密要差。
% V- Z7 s0 e7 E5 Q6 J* \: g$ l; ]/ ?8 Z: L" L
非对称加密代表算法) l. [. p, n5 X7 v& W" i2 W
, E6 x" T% T( E- j5 h! x5 o* Z3 \
非对称加密算法的安全性往往需要基于数学问题来保障,目前主要有基于大数质因子分解、离散对数、椭圆曲线等几种思路。
1 w- [1 m. E- H) `1 P3 P
: @9 e* a/ ]# V% _* |$ o8 a代表算法包括:RSA、ElGamal、椭圆曲线(Elliptic Curve Crytosystems,ECC)系列算法。2 D. }2 U* P  _1 a$ A  a

  b6 e$ m1 D4 I& mRSA:经典的公钥算法,1978 年由 Ron Rivest、Adi Shamir、Leonard Adleman 共同提出,三人于 2002 年获得图灵奖。算法利用了对大数进行质因子分解困难的特性,但目前还没有数学证明两者难度等价,或许存在未知算法在不进行大数分解的前提下解密。" I. j6 B' A, P# o

) d( W7 z) L$ o- bDiffie-Hellman 密钥交换:基于离散对数无法快速求解,可以在不安全的通道上,双方协商一个公共密钥。5 M9 _1 C5 `/ D

: D8 S9 A" G- R% \- H1 F& G" fElGamal:由 Taher ElGamal 设计,利用了模运算下求离散对数困难的特性。被应用在 PGP 等安全工具中。3 {1 z6 J6 z8 I6 o4 W; \/ b7 ~+ z
9 ^0 o! R$ [* ]3 ?' @, t! p
椭圆曲线算法(Elliptic curve cryptography,ECC):现代备受关注的算法系列,基于对椭圆曲线上特定点进行特殊乘法逆运算难以计算的特性。最早在 1985 年由 Neal Koblitz 和 Victor Miller 分别独立提出。ECC 系列算法一般被认为具备较高的安全性,但加解密计算过程往往比较费时。一般适用于签名场景或密钥协商,不适于大量数据的加解密。" S: [5 Y7 O  p; \5 i$ a6 n
' p" g9 O& f  w1 I. \0 ~4 \( P
RSA 算法等已被认为不够安全,一般推荐采用椭圆曲线系列算法。
' E3 N: k/ u% ]- l, O" a! V. {! w) V
Neo中的数字签名算法0 `1 q: B& H. O$ Y
2 Q# \* ^# }) l- h
在Neo中,也使用了非对称加密算法,我们通过代码来看看是如何使用的。5 i6 e: H7 Q  x' A+ e, W
# P& m. U$ {. B
public virtual WalletAccount Import(X509Certificate2 cert)
+ s' O" |% @4 i0 M- Q. e: j
* Q' J1 n: i( Y. s. L        {
; W% n, r4 z/ {8 o" B( S0 z. F/ ?  @" L4 w! x; S
            byte[] privateKey;: o2 W: J" G- b5 M
4 [1 a8 L  q( [4 v6 M" s
            using (ECDsa ecdsa = cert.GetECDsaPrivateKey())3 p" g! X2 W8 t9 g7 l
( `. ^* N6 W' K9 p" |( @" ?
            {
$ @+ Z" P  T' |
* X1 z8 m; Z4 c1 u                privateKey = ecdsa.ExportParameters(true).D;
. \3 u. U3 F1 C
4 U: d& C2 l, _2 Y0 V+ u' u9 h; J            }
5 e& Y+ k9 a1 g! o5 ?7 M
" Y) r! V  w" }* V            WalletAccount account = CreateAccount(privateKey);# T) d7 ]/ u. A" u$ c1 l( G4 C' m
3 M# A$ p' B, }" C
            Array.Clear(privateKey, 0, privateKey.Length);
" n" y1 d% k" z
+ g  g9 r  S* N            return account;
" C) D" z: D. U" K, v
7 s& p. d' V* t2 R        }8 Y! J# J' X1 v) p0 P) ^# b/ ~' ?
' I& I7 r& I. l. ?! H& ~& N
X509Certificate2是数字证书,和我们在https里面使用的是一样的,从里面拿出私钥后,创建钱包。  Z$ L( N$ K8 f- m9 h8 u! T

0 ]0 C7 ?/ e$ X. V: B1 r: K总结4 Z' j: A0 y' }
5 n- c* w% m3 V0 [( E
目前只是简单的介绍了一下Neo中加密算法的使用情况,这些加密算法的原理和实现也是很有意思的,后面看看怎么实现的,再分享出来。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

深圳林妙可 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    33