Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

Neo中hash算法,加密算法使用介绍

深圳林妙可
175 0 0
区块链是基于加密算法,共识算法,p2p网络和经济激励的一个系统,加密算法在里面起到了非常关键的作用,总结一下Neo使用到的加密算法吧。$ z$ Z! Y1 W$ L3 g5 T  R$ I# r

! \) \+ a' w. O* q& j关于区块链中密码学的介绍,yeasy大牛的文章已经介绍的非常好,下文主要通过和Neo结合,加上一些自己的理解,去讲述一下加密算法的使用方法。
+ h4 d4 I; s0 v8 n' P) H) Q  U: t; A! `# f
Hash 算法
5 o# K9 Z. |$ H8 W; D' K- p# y8 a. O" z+ p4 X% k! d2 X9 ]. C* \) r
Hash (哈希或散列)算法是信息技术领域非常基础也非常重要的技术。它能任意长度的二进制值(明文)映射为较短的固定长度的二进制值(Hash 值),并且不同的明文很难映射为相同的 Hash 值。# j; T8 s: \8 a) I+ Q6 M
4 ?6 o& Y( h$ @3 {8 g, q7 ~$ ?
hash函数的作用
/ c1 f3 q6 Q% \6 T7 p: U( W1 v! N& V8 c# a& E
注意上一篇文章说明了如何将hash后的字符串保存到Neo的UInt256类型,其中一个前提就是结果集合在[0-15]之间。: N2 z4 S. u7 i! x% L% A
" ~8 r( ]* Q3 x; A7 ?& n" `- a2 @
哈希完全不等于加密,很多时候开发人员都对用户表中的密码进行哈希后保存,实际上不叫做加密,只是相当于把密码的“特征指纹”保存下来,而对非法攻击者来说,在不知道真实的“密码”的情况下,得到有相同指纹的密码是极为困难的。
& X. I% S6 \3 m5 t8 N/ T- |" }: R% v3 O' I5 {# e/ ?; g' s
一个优秀的 hash 算法,将能实现:' r. j. k$ U9 }! A! W: R
' N4 K4 P) b) i: q# _
正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。6 F( Q% l& J) k, O( o

; o2 T3 D8 O& m9 l" x逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。) l  I& x1 i, T1 R# j# [0 m8 A
( @% q, G; f) }
输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。
$ f# o3 K1 r3 m" ^. J$ ^; X; l4 u5 ]' [8 K$ O4 m, i$ M6 O& z
冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。( w) H9 r) q  `+ [8 {5 \) O% t

' O' \2 p0 J% Z! C  M目前,一般认为 MD5 和 SHA1 已经不够安全,推荐至少使用 SHA2-256 算法。
/ K; {6 W7 y4 g7 A$ E: t2 {* q
2 v  H6 ^& Y- [5 [: M一般的,Hash 算法都是算力敏感型,意味着计算资源是瓶颈,主频越高的 CPU 进行 Hash 的速度也越快。; ?# V/ e, H3 y
5 V% R1 [. j) w* t+ T- V
也有一些 Hash 算法不是算力敏感的,例如 scrypt,需要大量的内存资源,节点不能通过简单的增加更多 CPU 来获得 hash 性能的提升。4 w7 p0 W9 A7 e, v# U6 {8 Y
( F/ V/ I1 \; P% c
Neo中的hash算法. _1 B1 B5 {, {" g, v- s

) i' t, w( l6 M3 z3 R+ V, Lscrypt
0 `2 {! s: E) ]1 n; u* n. q6 o
. J$ f! i/ w* ^/ o( i; Tscrpyt算法是由著名的FreeBSD黑客 Colin Percival为他的备份服务 Tarsnap开发的,当初的设计是为了降低CPU负荷,尽量少的依赖cpu计算,利用CPU闲置时间进行计算,因此scrypt不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利用rainbow table进行暴力攻击更加困难。scrypt没有在生产环境中大规模应用,并且缺乏仔细的审察和广泛的函数库支持。所以scrpyt一直没有推广开,但是由于其内存依赖的设计特别符合当时对抗专业矿机的设计,成为数字货币算法发展的一个主要应用方向。4 ?+ `8 V* K6 S" i2 @7 v" p2 W

: A/ e6 `7 O3 v0 k/ D! u+ t, w* Tscrypt的参数
4 G7 ^* t( @+ j/ [( \* a: C% ^5 `" h3 ?2 w7 f4 G% b% L5 {8 S( u+ e
https://stackoverflow.com/questi ... scrypt-work-factors
) l4 q. k4 k6 x1 a5 ]* d  Q8 [) a9 B: B. e  ^! i& H3 a  w
Cpercival mentioned in his slides from 2009 something around- C& f. v$ j3 o8 U
; X5 d5 z2 h+ }6 a5 X" s4 J3 Q
(N = 2^14, r = 8, p = 1) for
7 r% v2 }, L6 I* B4 m3 u3 X
! ~: E5 c9 c9 k8 \4 s% O  Vscrypt特点( i/ I" b6 }4 a

( G3 d- x: T% O2 \scrpyt的出名主要是因为莱特币为了抵抗比特币矿机采用的一个算法,可以指定内存和cpu的使用量,可以用参数确定hash的时间。
! h% t8 q; U; Y$ E0 ~5 }$ W+ Z- c2 W" i) K
Neo中如何使用scrypt$ e( {, O/ C, X1 d# W
& a: ]+ L+ B  W" w" G
// in NEP6Account
4 ]" a. V  s8 m  U3 ]0 t& w: T1 \' t, L8 I$ e( y: \# j
   public NEP6Account(NEP6Wallet wallet,
& |5 b6 S8 |) ]( d
( E# U  M5 |6 Q; M+ X1 r              UInt160 scriptHash, KeyPair key, string password)' Q1 |. L  V  s; `% _% h( t0 p, Y& i. I
1 H% R; M) e: u
            : this(wallet,7 q, U! Z9 ~: y9 k; M6 r2 ]

6 ]9 q! u0 \3 v1 y9 B2 M2 G  A1 c              scriptHash,
, o" N& B6 u! e' v) s/ F" T" f  u7 K# c! m  g8 D/ w$ H: W0 J/ o
              key.Export(password, wallet.Scrypt.N, wallet.Scrypt.R, wallet.Scrypt.P))! X, z8 a! s# j4 i+ o! Z* H+ U9 C. }
8 f' D' q& r/ ~! r! v3 s* ~
        {9 Z, N7 k9 j8 a0 s) d. y7 a

$ K+ R# \1 s' P: A3 F( f5 R            this.key = key;
# A3 U% A# g: U7 d' l  q" {4 Q9 F0 B9 J2 N
        }
, \0 {5 T2 ]  G" x# S, r* z* ?8 S" e4 X5 j
// in class KeyPair5 M* \% D; ]; U( f1 N
/ X1 N! i, c& L, `5 o; r( I3 {# s
public string Export(string passphrase, int N = 16384, int r = 8, int p = 8)$ h- j: J: g; N" X; D  H' C

% ]7 ?+ L  @' V! l* d{
" H0 u0 B$ n( M7 ]5 i" F
- T! X* F; `" {$ W2 X    using (Decrypt())
1 S& y  W  P* A* q' d$ p, s, x0 h8 w8 b; H6 g5 @: o! F7 o
    {
! w3 B, `% w* o0 s5 M+ a8 x
7 v9 `! }1 D3 S8 u4 {- v        UInt160 script_hash = Contract.& g; ]# l4 I$ R

) a, P& w8 {% k5 [# B7 u            CreateSignatureRedeemScript(PublicKey).ToScriptHash();
3 B( f' I: ^6 Z
2 V( j: u, v9 G) Z# D        
; e; O) N2 Q% {7 S3 K5 F
! P- q6 S% i& ^+ {8 L        string address = Wallet.ToAddress(script_hash);& I; }; f, }" N" g
9 h/ p6 k+ F, i) b1 g. q" Q
        byte[] addresshash = Encoding.ASCII.GetBytes(address)
+ Y% p; W2 |5 h" x0 k8 x6 W5 W. r8 G8 b# C- U: z1 `: \) t+ u* j9 W
            .Sha256().Sha256().Take(4).ToArray();( H$ N5 G* n" A. K6 y* g
: i# A2 i  m6 A! h) P
        & o, u  i$ c- R' |6 U, U
, L3 l, U, j- g; @4 f, \
        byte[] derivedkey = SCrypt.DeriveKey(
) M$ Y- C$ |# x4 a* f" \" S
) Y) |3 K; n4 x7 {7 n5 H            Encoding.UTF8.GetBytes(passphrase), addresshash, N, r, p, 64);5 e: L* W8 v9 j+ I. j8 L
! A! x" n" N. k+ Y( E( s& s
        
2 X3 s7 u2 s: r
- \  D, v% }  d2 O( }        byte[] derivedhalf1 = derivedkey.Take(32).ToArray();
2 S# f* V% q" l) u8 ^4 d, k+ |8 b9 O8 I3 X, m
        byte[] derivedhalf2 = derivedkey.Skip(32).ToArray();
8 G$ ~3 D$ U$ {9 E- \* V8 ~4 r5 [& v# B! C3 x0 ^
        
) q' k0 U; A3 _. b+ ^/ X) Z! X5 W. Y" O3 k/ B; h2 `
        byte[] encryptedkey = XOR(PrivateKey, derivedhalf1)
9 e1 ]& o8 d! K
* ^3 X2 r* N$ M! c            .AES256Encrypt(derivedhalf2);0 n7 |6 B4 ]: a0 _4 c% i  X. t

" F* d) M( z1 U& Y2 H+ r% i# q; R  O        
( c3 t+ ^" V  o
9 k( u* Y# @6 {        byte[] buffer = new byte[39];
) D  W( m8 t$ {) S7 P; M0 ?, L6 D4 o  S  U% s+ A; L" i( ~
        buffer[0] = 0x01;! j0 K3 @, F: Q3 E( @* E" `8 e
% u2 u4 L! V3 |! b: W9 m
        buffer[1] = 0x42;
) V3 |' I1 c0 X* A! K  Q9 y1 i3 A( l- P4 U+ O
        buffer[2] = 0xe0;
( \0 k9 n7 k8 F7 L5 e) G6 v8 S& i2 z- r: R0 p: D
        Buffer.BlockCopy(addresshash, 0, buffer, 3, addresshash.Length);: j3 v( c4 j' [& k+ a; t

! R& e( l6 n. a        Buffer.BlockCopy(encryptedkey, 0, buffer, 7, encryptedkey.Length);
7 i% f7 Z  H% O  E$ e/ s! F. U1 u" T; G% l
        return buffer.Base58CheckEncode();
. a$ w+ g( P( }# X% n6 j$ P) ^, W
    }
! S: \- T& R/ z* S7 `0 U% ^5 Y2 @  m" u+ K3 l
}
+ b" T6 O- j+ f  y, E* V
, ]9 \* G* Q' M4 \3 n. }可见SCrypt.DeriveKey方法参与了加密密钥的生成过程。后面解密也必然使用到了这个hash算法。所以该hash算法参与了加密过程,而加密密钥用AES256Encrypt生成。可以确定的是,使用该算法的逆过程,可以解密出密钥来,这个比WIF要安全。
% l9 H! ^4 K, R% p  p
, d% |5 f4 o" h4 v8 {" \$ TMurmur3. ^, h9 T6 W9 K' \% N. c( o

9 O" ?' p7 F# ^# B# k$ Y2 h( iMurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。[1][2][3]由Austin Appleby在2008年发明,[4][5] 并出现了多个变种,[6] 都已经发布到了公有领域(public domain)。与其它流行的哈希函数相比,对于规律性较强的key,MurmurHash的随机分布特征表现更良好。[7]3 J9 G0 g/ c4 M: m. c* r4 _6 J

* ~7 U4 H7 z" o! q/ mMurmur3特点
& u( A7 ?  h( O+ [$ }4 Q4 Q' ~* Y5 X5 b; V- l+ l. C5 F
1.碰撞率低
% J$ E% V  W5 S
. _. W  @# h* F4 |( L2.计算速度快
' {/ E+ ~$ c9 G+ c$ p' m
* z0 T) h: r+ G, P3.擅长大文件的hash
4 Z# @4 y; n2 X9 G, N) j3 i4 R/ v" V
/ {& M4 q+ N/ ~& w7 u  h% c7 }Neo中如何使用Murmur3/ m$ i" s6 L+ N7 v! O2 {) [, f
1 G+ H9 W3 ~) h  j  h
Neo中Murmur3- q" v8 F8 F  B# a) c

* D7 ?1 m7 ?( x& w$ `( UMurmur3的具体算法,以后再研究,现在大致知道,Neo用Murmur3生成key,也在BloomFilter中使用了。
2 C! e: J# Q, L7 Z  {9 o9 {
2 o1 O3 T$ o2 d( x# wRIPEMD-160
1 ?* y' l) {) U2 Q. n) T  O* }! o. r  Y4 s, ~" W% Q  S0 y
Neo中用这个算法来生成短一点的hash值,script hash就是用了这个算法。
* \7 b1 x) o4 f+ Z3 N4 @, h
+ q. _& B9 ]0 |- [// in neo-compiler/neo/neo/Core/Helper.cs7 t' A! [: E* }: p4 o+ U6 E, C- i. r

; a; E) q% P, l( Upublic static UInt160 ToScriptHash(this byte[] script)
- y. a1 l# e2 r9 C0 W# S
- t/ W7 H1 y9 S) g        {
9 p: `# J2 ~, S5 {( M- R# L: ?5 t7 O$ B! F; [4 c' k* z: L, k
            return new UInt160(Crypto.Default.Hash160(script));
3 e# k: o8 D1 X/ O2 A0 d
: C: T  K# x, S! p; L0 J2 H4 k" U$ o        }
5 u9 r/ x1 N' K1 ?
+ f* K1 D% I$ GRIPEMD-160算法的特点  G! o9 w" a% V8 j8 c5 H( i7 ^6 x  p
" \/ a- p" u+ X; ^9 {
RIPEMD-160能表现出理想的 雪崩效应 (例如将 d 改成 c,即微小的变化就能产生一个完全不同的哈希值):8 h" N; H- `/ a  j2 m1 K7 b3 x

" `) ?$ e4 h* u$ T1 i2 e6 G! V! [9 J加密算法体系
; f& Q6 h% M; J2 x# p6 `
4 n  Z. t% C  V! H& t- c现代加密算法的典型组件包括:加解密算法、加密密钥、解密密钥。其中,加解密算法自身是固定不变的,一般是公开可见的;密钥则往往每次不同,并且需要保护起来,一般来说,对同一种算法,密钥长度越长,则加密强度越大。
- I8 X% c0 D1 S/ @8 Y! R! z: f0 @; [# d" e! @0 l4 F1 d
加密过程中,通过加密算法和加密密钥,对明文进行加密,获得密文。, p& l) _5 h2 ~
! z: f- J6 O. s' l9 H
解密过程中,通过解密算法和解密密钥,对密文进行解密,获得明文。' Z. T  T# f8 \( i

  p. S4 N4 D# H/ D9 U' B9 c根据加解密的密钥是否相同,算法可以分为对称加密(symmetric cryptography,又称公共密钥加密,common-key cryptography)和非对称加密(asymmetric cryptography,又称公钥加密,public-key cryptography)。两种模式适用于不同的需求,恰好形成互补,很多时候也可以组合使用,形成混合加密机制。
5 g$ I, G4 J, ~3 x' t8 c( {: j  z, b  \7 l6 h- S. }0 m2 o
并非所有加密算法的强度都可以从数学上进行证明。公认的高强度加密算法是在经过长时间各方面实践论证后,被大家所认可,不代表其不存在漏洞。但任何时候,自行发明加密算法都是一种不太明智的行为。) Z+ w; O1 Z0 a  v- Y, G8 w% N# ]

- T! L0 `( x) p! j对称加密- k, h" }8 A$ c, K, L0 v+ {
. v/ P1 `" A- S( d- J
顾名思义,加解密的密钥是相同的。9 d/ k: h1 n* `6 g6 M! ]( M

, d( y$ L8 u1 O! e+ O对称加密优缺点
/ ~& x1 z9 B9 \+ `! K8 A
- t& y5 v: g$ B优点是加解密效率高(速度快,空间占用小),加密强度高。1 G& P8 J* w; `! I
- Q5 G1 ^" b1 H
缺点是参与多方都需要持有密钥,一旦有人泄露则安全性被破坏;另外如何在不安全通道下分发密钥也是个问题。5 W" a  n9 {7 a, h# ~
( g/ S" ]8 ~: c% e' ?9 t9 \' C& N
适用于大量数据的加解密;不能用于签名场景;需要提前分发密钥。
. c) g1 |8 ?. S$ E4 J* |& U" ~. e; u4 v8 Q7 i7 g; H
对称加密实现! F9 `' }$ V( v" F( a3 a) f/ ~- O

% K; Z( g* I" L对称密码从实现原理上可以分为两种:分组密码和序列密码。前者将明文切分为定长数据块作为加密单位,应用最为广泛。后者则只对一个字节进行加密,且密码不断变化,只用在一些特定领域,如数字媒介的加密等。3 l8 H. T+ ^  Q6 O2 @* b/ k1 f
/ u2 d9 e& m5 N, U4 N
代表算法包括 DES、3DES、AES、IDEA 等。) {- L1 T7 a  ^+ t4 i9 {. p: G

" C$ e0 Z3 {- ?4 ?9 E, R' f2 bDES(Data Encryption Standard):经典的分组加密算法,1977 年由美国联邦信息处理标准(FIPS)所采用 FIPS-46-3,将 64 位明文加密为 64 位的密文,其密钥长度为 56 位 + 8 位校验。现在已经很容易被暴力破解。1 Q$ Q( B3 d( D/ c; W- U0 [

" I0 ~: r. x2 |! ?. T6 `3DES:三重 DES 操作:加密 –> 解密 –> 加密,处理过程和加密强度优于 DES,但现在也被认为不够安全。
. t# |# m9 K+ i+ p7 d7 v+ Y5 U. N* \! e6 N( ]
AES(Advanced Encryption Standard):美国国家标准研究所(NIST)采用取代 DES 成为对称加密实现的标准,1997~2000 年 NIST 从 15 个候选算法中评选 Rijndael 算法(由比利时密码学家 Joan Daemon 和 Vincent Rijmen 发明)作为 AES,标准为 FIPS-197。AES 也是分组算法,分组长度为 128、192、256 位三种。AES 的优势在于处理速度快,整个过程可以数学化描述,目前尚未有有效的破解手段。& _5 y  B$ ?8 r" V" t8 b
: r# J5 [, p( F& ~2 U5 X
注:分组加密每次只能处理固定长度的明文,因此过长的内容需要采用一定模式进行加密,《实用密码学》中推荐使用 密文分组链接(Cipher Block Chain,CBC)、计数器(Counter,CTR)模式。
0 O$ _! w! r* ^2 n4 ?
- z: F) R- c1 B# vNeo中的AES
' ~- n- r2 A9 T( ~& D7 ]; E2 K  b" \: h
在钱包的加解密中,使用了该算法。
. u5 g4 b* o6 b4 P  `$ _0 l+ ^9 w
下图的代码在/neo/Wallets/Wallet.cs中,NEP是neo enhancement proposal的意思。参数nep2就是符合这个格式的一个Neo钱包文件。
0 r, i8 [! M- t" U- `% Z1 V7 n2 ?" h# n) a6 F" R
拿到私钥* _" Y; K3 n, t/ m

8 u7 t! v5 l! A6 k具体的过程,后面再仔细研究分享出来。0 b7 I& y% G/ S8 c6 I" Q- H0 c

5 F  `9 T7 x' O+ L( t非对称加密
* `  ?" N9 |% U5 O. X4 h8 N/ Y  i8 v& D% j3 o$ A
非对称加密是现代密码学历史上最为伟大的发明,可以很好的解决对称加密需要的提前分发密钥问题。顾名思义,加密密钥和解密密钥是不同的,分别称为公钥和私钥。公钥一般是公开的,人人可获取的,私钥一般是个人自己持有,不能被他人获取。
; e) j! f1 q: I. d" v" M
4 ~4 g) D4 x2 \( C( w2 D3 ]非对称加密优缺点
+ B. F3 H7 c, L9 s3 B- P( U" R
' C7 {; w& ]. }& S& ?# E优点是公私钥分开,不安全通道也可使用。
" g! r0 A( V7 S2 m7 K2 ?* V. \) E, }' F  N$ O) N( t: @5 s6 {
缺点是加解密速度慢,一般比对称加解密算法慢两到三个数量级;同时加密强度相比对称加密要差。
. j) y( \- `' D9 d0 Q5 b6 T  U6 |# e) \. t  _' O
非对称加密代表算法6 B: |5 p+ s2 Q" l" \8 U$ T

7 ?' {+ `2 X* o2 A. n# h, ~, \1 {; }6 G非对称加密算法的安全性往往需要基于数学问题来保障,目前主要有基于大数质因子分解、离散对数、椭圆曲线等几种思路。/ c: c  V1 }& W( _
% _) o) S0 l: m0 R: D9 R# o
代表算法包括:RSA、ElGamal、椭圆曲线(Elliptic Curve Crytosystems,ECC)系列算法。. j  w( _- x- `+ z4 G

$ r, _6 \5 G/ B. ^9 T" KRSA:经典的公钥算法,1978 年由 Ron Rivest、Adi Shamir、Leonard Adleman 共同提出,三人于 2002 年获得图灵奖。算法利用了对大数进行质因子分解困难的特性,但目前还没有数学证明两者难度等价,或许存在未知算法在不进行大数分解的前提下解密。
6 R, M$ ]: R2 n9 t
9 K' q. r4 ]9 R0 M, Q- E% P$ U. vDiffie-Hellman 密钥交换:基于离散对数无法快速求解,可以在不安全的通道上,双方协商一个公共密钥。
, z% h5 K+ k( L8 _5 n0 c, z9 G) K& p6 B1 C
ElGamal:由 Taher ElGamal 设计,利用了模运算下求离散对数困难的特性。被应用在 PGP 等安全工具中。+ d6 j4 y, \" n

0 Y, v/ y7 u, N8 F9 w$ J2 i4 m椭圆曲线算法(Elliptic curve cryptography,ECC):现代备受关注的算法系列,基于对椭圆曲线上特定点进行特殊乘法逆运算难以计算的特性。最早在 1985 年由 Neal Koblitz 和 Victor Miller 分别独立提出。ECC 系列算法一般被认为具备较高的安全性,但加解密计算过程往往比较费时。一般适用于签名场景或密钥协商,不适于大量数据的加解密。/ h/ W9 b0 H) Y0 b
/ r  t7 R  O. C' x, \
RSA 算法等已被认为不够安全,一般推荐采用椭圆曲线系列算法。+ @% j8 [9 E9 [% e) X( |# s
  q& L6 w1 I  Y6 @5 l3 F( M2 y
Neo中的数字签名算法
) j8 T" {6 l0 Y1 x2 s% J& w: l4 p0 u
在Neo中,也使用了非对称加密算法,我们通过代码来看看是如何使用的。
$ n, a% y, K. J$ K& \9 ^5 K. K" l
" [2 s( U; R, {7 epublic virtual WalletAccount Import(X509Certificate2 cert); x; P- \0 l& S& W/ ?' {' F, C* j

& H  {3 c* n. |) A3 ~5 |        {
; ]; p  O% L3 H9 \) j' D& F' U. z2 l" w6 M/ Z
            byte[] privateKey;
" ~3 `, c4 K& |2 p1 T" |  M& p9 C% Z% q" {9 L) M  [& ?# M: H
            using (ECDsa ecdsa = cert.GetECDsaPrivateKey())
: o. X" n& J% m0 i9 S6 l
; i- W6 s7 B. M3 P$ Z# j7 W            {
8 J' y- F& T3 ~' e, ~$ ]- G5 {- q+ O  |7 h. X: V. {9 W0 _
                privateKey = ecdsa.ExportParameters(true).D;
9 z( y! v3 [; m7 b3 z3 a! y
- n, h: }* e* F6 ^            }
: R) W" P$ J- C- s8 w1 k+ z
4 R4 W2 W2 b- D' g* ~6 t            WalletAccount account = CreateAccount(privateKey);
: ^# J3 `+ ?4 b' E( ^% @4 E: `$ H7 g, Z
            Array.Clear(privateKey, 0, privateKey.Length);- y6 E2 H1 X$ y% X- k4 j
# g1 P9 O4 E* t7 a5 T
            return account;
0 F- [/ m% L  u5 M4 {# U, s# d/ U  L8 B' b
        }5 K: d4 @: F7 f/ N9 p  _

8 d5 \: }0 y7 U" M; m7 j: G& I0 ~X509Certificate2是数字证书,和我们在https里面使用的是一样的,从里面拿出私钥后,创建钱包。! q' Q+ E. E6 L. `! @7 ~

. R; f- u/ q5 I& T总结
6 e6 ?* y, y. k) @1 O2 F% M/ Y1 r0 o* n; ?5 ?# {1 |0 d+ Z, p% z
目前只是简单的介绍了一下Neo中加密算法的使用情况,这些加密算法的原理和实现也是很有意思的,后面看看怎么实现的,再分享出来。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

深圳林妙可 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    33