Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文
区块链是基于加密算法,共识算法,p2p网络和经济激励的一个系统,加密算法在里面起到了非常关键的作用,总结一下Neo使用到的加密算法吧。
$ h; k6 I& h$ _) j4 A- P1 \
/ d7 Z1 [0 R& H  ~' T关于区块链中密码学的介绍,yeasy大牛的文章已经介绍的非常好,下文主要通过和Neo结合,加上一些自己的理解,去讲述一下加密算法的使用方法。
1 b+ N; Q$ W5 ~* D
6 v3 A6 b9 _+ Y# vHash 算法
2 @% K- f, y* U: O, W/ v) m% x+ b0 m: m4 f& z7 @
Hash (哈希或散列)算法是信息技术领域非常基础也非常重要的技术。它能任意长度的二进制值(明文)映射为较短的固定长度的二进制值(Hash 值),并且不同的明文很难映射为相同的 Hash 值。
2 ~: l, D; U  ?$ }
( t2 R8 Y" y+ c! I" x) hhash函数的作用
8 h. e( T# ^- _8 q; Q% _! B& T
5 G8 y0 N' T  `5 p( A注意上一篇文章说明了如何将hash后的字符串保存到Neo的UInt256类型,其中一个前提就是结果集合在[0-15]之间。" [9 b3 |2 M3 K' X2 U

! Z* J6 ?0 }$ v4 `哈希完全不等于加密,很多时候开发人员都对用户表中的密码进行哈希后保存,实际上不叫做加密,只是相当于把密码的“特征指纹”保存下来,而对非法攻击者来说,在不知道真实的“密码”的情况下,得到有相同指纹的密码是极为困难的。
5 _3 n4 Q' w8 f- m# i
$ h6 p  y8 y5 O! o$ i一个优秀的 hash 算法,将能实现:* n1 _2 v# ?: i
7 P6 J% R. Q" W  ^
正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。% ]) |+ v& Q0 I

" T! p% e. C# g) @. }逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。
/ i: t2 c% D6 i3 z; o( G( v  I
* ^, ?0 K. r1 b% ~输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。
( z' T% G; e+ l8 e' ^) P- m
  v, t5 x0 x# v: A6 e& |  H+ J冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。' H, S/ m0 `  u
+ U/ k$ H- S  i
目前,一般认为 MD5 和 SHA1 已经不够安全,推荐至少使用 SHA2-256 算法。
  Z' R1 S3 c' Q0 Y& D2 c- ]
. @# _3 F; n4 u% w一般的,Hash 算法都是算力敏感型,意味着计算资源是瓶颈,主频越高的 CPU 进行 Hash 的速度也越快。5 t* M/ i, C8 V$ j
+ B# {0 R7 }6 H+ v
也有一些 Hash 算法不是算力敏感的,例如 scrypt,需要大量的内存资源,节点不能通过简单的增加更多 CPU 来获得 hash 性能的提升。
9 J; D/ [2 P8 E/ w7 i* O$ \/ A: D
9 x  L6 G- M/ @& nNeo中的hash算法+ X- X/ U; c2 C4 \$ h, D
2 v* @$ _$ E2 c' }% \" n5 Y
scrypt" z4 M, J- D* e) j& A6 N
2 a# j, @1 K1 v
scrpyt算法是由著名的FreeBSD黑客 Colin Percival为他的备份服务 Tarsnap开发的,当初的设计是为了降低CPU负荷,尽量少的依赖cpu计算,利用CPU闲置时间进行计算,因此scrypt不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利用rainbow table进行暴力攻击更加困难。scrypt没有在生产环境中大规模应用,并且缺乏仔细的审察和广泛的函数库支持。所以scrpyt一直没有推广开,但是由于其内存依赖的设计特别符合当时对抗专业矿机的设计,成为数字货币算法发展的一个主要应用方向。
, {& u3 T" U! g- m/ B8 n- X; v# V! R' i# R* S
scrypt的参数# a, B) @& q& D( P4 f& z& }( R
( E2 ]# y9 B% ~: i
https://stackoverflow.com/questi ... scrypt-work-factors# w3 x2 n3 F' R4 n2 |5 o: |! S# u

# o+ j- U6 ~, u, b' h& _7 ?Cpercival mentioned in his slides from 2009 something around
  i, j! T& [- Q. X; d# r, L; w; y) A& c$ K2 G
(N = 2^14, r = 8, p = 1) for) Z" K" L  s* _; N; Q7 U" T0 w$ m
0 C% e3 d% J# G3 B  R  z2 ^. D
scrypt特点
: n8 @! a9 _0 W% R6 ]& o* ~- J
: P& [$ ~* K0 rscrpyt的出名主要是因为莱特币为了抵抗比特币矿机采用的一个算法,可以指定内存和cpu的使用量,可以用参数确定hash的时间。3 N- ?9 Z' Q$ A( ~# Y: W& r

6 \0 A8 O+ O+ _Neo中如何使用scrypt! q6 I9 e5 H: M" ^: z

$ m4 z) v) e" g' v// in NEP6Account& g2 {9 I0 }8 y
) `4 j' r! I; T. K% ~0 T
   public NEP6Account(NEP6Wallet wallet,
) k; c" d: J% e0 f+ a( Z0 n) D0 M6 U5 b4 S
              UInt160 scriptHash, KeyPair key, string password)
( e: j& D# _/ I3 S4 z, ~- C$ T2 X3 O1 D- r5 }0 [3 `' a
            : this(wallet,
8 Y; B5 x' }6 ]# p/ \1 R8 G0 ?2 E; f3 k& h0 W: ?' H, S9 g9 w- H/ B4 @8 i
              scriptHash,, ]. C3 F5 ~2 @" n2 H

8 ^8 e' Q/ t: E8 G2 v  [              key.Export(password, wallet.Scrypt.N, wallet.Scrypt.R, wallet.Scrypt.P))$ ^8 a1 U  j( X( l+ k: L, x9 M9 w

3 ~( f! _+ H. D1 r        {
% m1 y- E% `- y$ t; n( L* W
  H  x/ {* @( }% L+ z! g6 ?! L  ^& a            this.key = key;
: P  ]) \5 R9 d% c) [
2 r3 n* C6 ~; C$ o$ N% X& A        }
7 P( \5 t- y/ i; Z
! R+ h& ?. i/ i+ Z# d& O2 A// in class KeyPair2 W) G- ?3 Z, ]: L# y3 I
, L1 E( F( C! C7 y
public string Export(string passphrase, int N = 16384, int r = 8, int p = 8)
/ p+ V! ~  J2 f. I# d! R3 K# s$ B2 a+ s3 P( q' |
{
+ h" B) C: l: F) I- f: S( s2 p$ h4 ]
    using (Decrypt())
" v/ U5 y% A5 n- K  U; H/ W' u4 d# w3 J! _; l3 M0 y
    {
6 j. A3 X7 N2 H  S
* M' E! ]6 N; i+ Q) ]  W        UInt160 script_hash = Contract.3 y9 {/ \" Z' ]; W5 C+ B% _

) _- \: U8 A" F2 n) I7 K' q            CreateSignatureRedeemScript(PublicKey).ToScriptHash();
# j, x% k9 Y& G+ S, Y( r# u  `8 @9 ]' E
        0 d1 h5 j# [1 x0 d

% F, e  U: l( g- `. [        string address = Wallet.ToAddress(script_hash);
: W% r: M$ ~: s5 C, ~+ l% \0 ~0 N6 }5 h7 [6 |! L6 Y: f, d
        byte[] addresshash = Encoding.ASCII.GetBytes(address)
6 w3 n$ K: e& I' k/ V/ F$ M1 i
1 ]% J. m# z! i  s# o* |            .Sha256().Sha256().Take(4).ToArray();% F) x( t' z  D, g, z) j
+ _. Y2 m, ]/ ?) b- M0 S$ a( _
        4 k; t8 i1 j$ y! y. v( o9 y& Y

5 C7 h$ @5 ^0 v* T& p        byte[] derivedkey = SCrypt.DeriveKey(4 I7 O* n& }  H' @3 Z; y* B, S

; l- }* j) f; i, _( U            Encoding.UTF8.GetBytes(passphrase), addresshash, N, r, p, 64);
4 ?  z$ j+ z, V/ x3 ~0 C4 R* [
7 n9 Y4 p9 b8 R4 N        ( _5 u: b6 T0 c% q
- x0 W) D2 L+ u2 E' E9 `  b
        byte[] derivedhalf1 = derivedkey.Take(32).ToArray();$ J9 z8 f, L0 @  G2 O6 I
4 l7 @% C: Z6 x* [4 P9 {: n* d
        byte[] derivedhalf2 = derivedkey.Skip(32).ToArray();! ~( [) E# e& h% L

) q5 L* C# U# y) U        - P1 H+ `2 o8 X% }: C

% }. b1 c  Z- V: i5 k- M4 V        byte[] encryptedkey = XOR(PrivateKey, derivedhalf1)% }' }' \* ?' g  O" U  Y
! E; k: d5 M; Y. s6 Y1 q4 N; b1 \
            .AES256Encrypt(derivedhalf2);
8 z& X$ ]( {+ L, r, m) l9 G  r
. M& R1 {. N5 a7 E+ }        
" {7 k* @2 a0 ]. t. N# {  p" ~4 V, c0 S* R+ T0 d  r
        byte[] buffer = new byte[39];& M1 L: ^9 f6 S5 w5 A. e
( b4 w& D  Z, {% K/ P2 q
        buffer[0] = 0x01;$ v: ~5 E& E7 o' x- e% }

3 P5 \  Y& a; Q# x" h        buffer[1] = 0x42;
! c4 O$ w8 A% U# R) `# ~4 [' _. c' T, h  q3 S9 N/ }  {
        buffer[2] = 0xe0;
( W! W- O: W  F/ g* e  k3 t
+ }$ |0 O5 I6 Z        Buffer.BlockCopy(addresshash, 0, buffer, 3, addresshash.Length);
0 c+ s; O/ C8 c$ B* M
2 i% ], h+ o+ @: {  z        Buffer.BlockCopy(encryptedkey, 0, buffer, 7, encryptedkey.Length);4 I/ O+ G, d* I1 L

$ u2 {( i3 B* J5 ?1 O) g% P( Q        return buffer.Base58CheckEncode();$ u0 X  {3 R. Y6 d
0 p( d: h) a% d+ C( i
    }/ q3 W" @# X. z3 E  k/ Y, s: c
  b4 z$ n2 d: V8 }- I) b0 }
}- \! I' D, n; t+ b
/ V5 F, c/ M/ a
可见SCrypt.DeriveKey方法参与了加密密钥的生成过程。后面解密也必然使用到了这个hash算法。所以该hash算法参与了加密过程,而加密密钥用AES256Encrypt生成。可以确定的是,使用该算法的逆过程,可以解密出密钥来,这个比WIF要安全。
* e2 n! W7 \* \4 O7 |3 G
4 }) x7 D$ B, o+ n9 G# _1 JMurmur3
+ e( v5 g" ]0 x( J5 ^$ w
( ^5 ]* X# Z; ~7 NMurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。[1][2][3]由Austin Appleby在2008年发明,[4][5] 并出现了多个变种,[6] 都已经发布到了公有领域(public domain)。与其它流行的哈希函数相比,对于规律性较强的key,MurmurHash的随机分布特征表现更良好。[7]
6 H" A1 w! p) v0 Q8 x: H- }5 s3 l: V6 ^1 w( v  |1 `
Murmur3特点" ]% P* {  x: o0 N
- P1 f9 e/ n5 F2 z( M
1.碰撞率低
0 I6 w- X/ G$ v: L/ Q. A4 s1 \- s7 b6 N; c* M
2.计算速度快& {, N% Z( T: C: A6 d, C% o

+ v" Z+ a# @; @6 e1 G9 X9 R. i; P0 s% }3.擅长大文件的hash
. `7 G/ H1 t) ]" P/ z5 l' i! O' w6 o7 Q5 ?5 ?  C; k
Neo中如何使用Murmur3
. d3 E& H4 {% }$ h8 n
0 T$ j* v( @+ ^: {8 i$ K. KNeo中Murmur3
" W+ k  J4 v( E0 {
3 E: w) I2 h) k/ AMurmur3的具体算法,以后再研究,现在大致知道,Neo用Murmur3生成key,也在BloomFilter中使用了。8 U3 t9 r/ o' v1 L, g9 q4 X
- q4 X! @; j7 w4 S0 s" s& {
RIPEMD-160( x$ B: Q4 [1 ~7 n. c' F& W

" }* e% r* B* N9 S6 eNeo中用这个算法来生成短一点的hash值,script hash就是用了这个算法。
+ `% a* u. B* l" a, P
& M: f- \3 Q9 @$ z// in neo-compiler/neo/neo/Core/Helper.cs
( K" C: x+ G) z4 u
- L2 q; b: D; [$ J9 opublic static UInt160 ToScriptHash(this byte[] script): C/ I2 _* j+ z9 G
5 ^- R6 l& D9 N
        {
' m. z# @9 J7 `3 n# g# q" m) b2 y6 {( h6 ]
            return new UInt160(Crypto.Default.Hash160(script));4 |! o9 `5 x- t% e$ f
9 Y# r3 p; ?  s& Z  z" ^2 i
        }
6 S/ c2 d3 k8 C( w  J) h) }  s! x
$ H2 B  w1 |, A8 F( w1 q& f' }- zRIPEMD-160算法的特点
$ E! E: F8 M" H
% |1 {5 ^$ g2 }! v- d9 w, r0 fRIPEMD-160能表现出理想的 雪崩效应 (例如将 d 改成 c,即微小的变化就能产生一个完全不同的哈希值):* ], W4 ~' C& U" H6 r+ O$ f

3 b; t) \: {( v加密算法体系4 v7 j" s9 [" t% z0 s0 p$ _# l
5 `- p( Q! d' @# Z
现代加密算法的典型组件包括:加解密算法、加密密钥、解密密钥。其中,加解密算法自身是固定不变的,一般是公开可见的;密钥则往往每次不同,并且需要保护起来,一般来说,对同一种算法,密钥长度越长,则加密强度越大。
9 e% P- a+ D9 t+ @+ K4 k6 @2 B/ r. U: P& U, {7 y
加密过程中,通过加密算法和加密密钥,对明文进行加密,获得密文。* ?3 W4 @6 g  N1 C- Q8 h  u

0 [# a) _+ H5 H) s3 ?5 @% S解密过程中,通过解密算法和解密密钥,对密文进行解密,获得明文。4 K# `7 y6 Q; t! q) \

+ v; @+ G' W9 N! K# [( |+ G根据加解密的密钥是否相同,算法可以分为对称加密(symmetric cryptography,又称公共密钥加密,common-key cryptography)和非对称加密(asymmetric cryptography,又称公钥加密,public-key cryptography)。两种模式适用于不同的需求,恰好形成互补,很多时候也可以组合使用,形成混合加密机制。
8 M1 d2 S+ q5 |( f6 |# u$ Y1 [( y3 O
并非所有加密算法的强度都可以从数学上进行证明。公认的高强度加密算法是在经过长时间各方面实践论证后,被大家所认可,不代表其不存在漏洞。但任何时候,自行发明加密算法都是一种不太明智的行为。% T, X0 p- h0 J/ G4 L% |
- G: m1 a, C7 ~. `8 f5 O+ t4 l2 w1 C
对称加密
7 d0 e' a/ P' H$ G7 S8 p# R
- q1 C  z- g2 Z顾名思义,加解密的密钥是相同的。4 o( J- ~& l" _3 y
: [. t. [0 o6 m, f0 z7 l* Q5 @$ Y
对称加密优缺点
2 H9 p8 r! g- c9 Q5 M5 x5 P
/ G% S& A# x+ r4 D$ d9 m4 L% F优点是加解密效率高(速度快,空间占用小),加密强度高。
: q* [& n+ ^/ q9 J! z% C: g( v) o* R/ D6 K5 W7 ^
缺点是参与多方都需要持有密钥,一旦有人泄露则安全性被破坏;另外如何在不安全通道下分发密钥也是个问题。
% x& [/ q, P2 v$ X3 M
+ `& \; {  @; u9 F5 u/ [适用于大量数据的加解密;不能用于签名场景;需要提前分发密钥。
* a' R+ d) j/ ]2 g! H" L: T
: p4 p1 M/ {2 u$ o2 _$ S对称加密实现0 X6 g3 {* }+ d9 a9 |
# l* O" _& [: e- ]# I' q9 O7 F
对称密码从实现原理上可以分为两种:分组密码和序列密码。前者将明文切分为定长数据块作为加密单位,应用最为广泛。后者则只对一个字节进行加密,且密码不断变化,只用在一些特定领域,如数字媒介的加密等。: G& `1 T6 [" l9 Q& O, N$ [/ ~
0 S. X7 F" F1 V& T" O) f9 x
代表算法包括 DES、3DES、AES、IDEA 等。% T7 L2 W3 T8 h$ p4 u
- W( |; s( X8 f, a3 M
DES(Data Encryption Standard):经典的分组加密算法,1977 年由美国联邦信息处理标准(FIPS)所采用 FIPS-46-3,将 64 位明文加密为 64 位的密文,其密钥长度为 56 位 + 8 位校验。现在已经很容易被暴力破解。
% X8 l, f% N1 i; T" N% {, Q
/ c, T6 [5 G0 O4 S  u  r3DES:三重 DES 操作:加密 –> 解密 –> 加密,处理过程和加密强度优于 DES,但现在也被认为不够安全。; D* I; v) H' B6 o5 M! P: c; C

; _* k" ]: I' Q0 b1 TAES(Advanced Encryption Standard):美国国家标准研究所(NIST)采用取代 DES 成为对称加密实现的标准,1997~2000 年 NIST 从 15 个候选算法中评选 Rijndael 算法(由比利时密码学家 Joan Daemon 和 Vincent Rijmen 发明)作为 AES,标准为 FIPS-197。AES 也是分组算法,分组长度为 128、192、256 位三种。AES 的优势在于处理速度快,整个过程可以数学化描述,目前尚未有有效的破解手段。5 G; r3 p( h. t
$ t* d* q# v/ L& n/ j' |
注:分组加密每次只能处理固定长度的明文,因此过长的内容需要采用一定模式进行加密,《实用密码学》中推荐使用 密文分组链接(Cipher Block Chain,CBC)、计数器(Counter,CTR)模式。! m( P1 i( \; ^# f

- A# n0 c  S9 m: `! d& T1 W3 oNeo中的AES: _+ R, Q2 h% {8 G

- p1 X, D- X) C/ L% c* J3 c在钱包的加解密中,使用了该算法。; Y' x& _; I% B7 Q4 o: e
. u# x; q/ `% n0 s: E3 w
下图的代码在/neo/Wallets/Wallet.cs中,NEP是neo enhancement proposal的意思。参数nep2就是符合这个格式的一个Neo钱包文件。
  h0 g# r+ G, n! T6 z
: e8 p0 F  @3 `- [拿到私钥
7 R% h% U( X( D5 t: W, P) `" o% r) F6 S
具体的过程,后面再仔细研究分享出来。
! C5 W3 U- W1 O) ^' P2 R0 C. ^- N# f
非对称加密; |' b- G" R( ~. X$ p1 ]: Y2 V% d

- E8 Z0 v+ |, x3 b, ~非对称加密是现代密码学历史上最为伟大的发明,可以很好的解决对称加密需要的提前分发密钥问题。顾名思义,加密密钥和解密密钥是不同的,分别称为公钥和私钥。公钥一般是公开的,人人可获取的,私钥一般是个人自己持有,不能被他人获取。
7 h6 _# M5 R/ M$ c/ J4 {
, _2 Q, |7 i  f# \  r% N非对称加密优缺点
1 a2 l3 T8 K8 k2 d: y- \: u# ~7 P, |
优点是公私钥分开,不安全通道也可使用。
8 e5 P( T& v: S$ M" `6 e! X6 u9 b2 y  ^" v+ d) n
缺点是加解密速度慢,一般比对称加解密算法慢两到三个数量级;同时加密强度相比对称加密要差。
/ x8 a" B4 }" |; L* J4 v5 [. t- {' q2 ]. `8 U2 Y. K
非对称加密代表算法1 x8 K$ _% ?2 K$ I# |2 @* c! {: x

) R) [; Q; P) k# S! Q非对称加密算法的安全性往往需要基于数学问题来保障,目前主要有基于大数质因子分解、离散对数、椭圆曲线等几种思路。3 x$ B# F; f8 [' N. q( A" I
1 m* U- g: ?8 l, w- g" V( [
代表算法包括:RSA、ElGamal、椭圆曲线(Elliptic Curve Crytosystems,ECC)系列算法。2 A7 o& u8 ?8 I/ n+ M7 Y

* d+ I4 {' _4 ]) mRSA:经典的公钥算法,1978 年由 Ron Rivest、Adi Shamir、Leonard Adleman 共同提出,三人于 2002 年获得图灵奖。算法利用了对大数进行质因子分解困难的特性,但目前还没有数学证明两者难度等价,或许存在未知算法在不进行大数分解的前提下解密。
3 e! K& e, m. H) c- n/ \) N$ L2 E5 B: R. A3 l1 d
Diffie-Hellman 密钥交换:基于离散对数无法快速求解,可以在不安全的通道上,双方协商一个公共密钥。
& L2 u6 i/ P4 R$ R
) Y7 V7 s) v; s* |' c. \* R% z: zElGamal:由 Taher ElGamal 设计,利用了模运算下求离散对数困难的特性。被应用在 PGP 等安全工具中。
- a; P% f* o8 e  Y" h/ m6 l$ ?% W+ N" h+ H4 p2 i  y+ A
椭圆曲线算法(Elliptic curve cryptography,ECC):现代备受关注的算法系列,基于对椭圆曲线上特定点进行特殊乘法逆运算难以计算的特性。最早在 1985 年由 Neal Koblitz 和 Victor Miller 分别独立提出。ECC 系列算法一般被认为具备较高的安全性,但加解密计算过程往往比较费时。一般适用于签名场景或密钥协商,不适于大量数据的加解密。
( I- _; H0 J2 N+ D* f$ j; H5 R; Y; n
RSA 算法等已被认为不够安全,一般推荐采用椭圆曲线系列算法。
" q8 P. f) I, l* O
# J) ~" X5 I' g$ ]7 vNeo中的数字签名算法
4 F9 p9 t+ o; q3 z8 c
! P4 R8 ?2 h9 W" f+ T在Neo中,也使用了非对称加密算法,我们通过代码来看看是如何使用的。3 r0 C" K, }# H6 ^! C

" }- v# A% h8 }  Z7 c; epublic virtual WalletAccount Import(X509Certificate2 cert)4 f9 X6 [/ l; o

, ~" x! m- a" `3 [# N& a4 _' g        {4 D, d8 C$ }9 ]( |

0 \' ], B7 \/ O( f            byte[] privateKey;
$ Y% f+ W. N0 e: o# t! D" O& V& T- t: u, Z
            using (ECDsa ecdsa = cert.GetECDsaPrivateKey())$ N/ K9 @$ d' c- K5 b
2 T# v) M% d  l! w) j
            {
' _$ U6 Q6 z/ S0 I, @
2 d$ Q3 L1 b2 g' z; i+ c0 ?2 B                privateKey = ecdsa.ExportParameters(true).D;
0 q) \* T( u; V: a& t  u% G2 \) T; }6 S& e/ Z
            }
  _. w4 }& Z3 j! B/ x
& j. }" A2 w0 v, q8 T            WalletAccount account = CreateAccount(privateKey);
% `. W2 l; j& n' W( V$ ?( M( P9 u  M
            Array.Clear(privateKey, 0, privateKey.Length);) k5 E% P/ a! b4 }. n9 I2 l
2 n6 k4 p& V, Q/ g* F3 J
            return account;
9 h7 p3 L* ]: w6 A4 g" f
+ n  l+ M3 O; N: Y+ o( C! A        }$ y" Y8 u9 b* m5 s" [
4 E$ L: F9 e. H
X509Certificate2是数字证书,和我们在https里面使用的是一样的,从里面拿出私钥后,创建钱包。
# z. Z% e& w8 U& n& U& U3 |. _
( c  m; C7 m& l# S2 k总结
$ [/ K4 G* L- u  Y6 e2 i2 Z0 `8 q8 H+ R7 u& A& E  A/ w. i
目前只是简单的介绍了一下Neo中加密算法的使用情况,这些加密算法的原理和实现也是很有意思的,后面看看怎么实现的,再分享出来。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

深圳林妙可 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    33