一. 編碼解碼
1.編碼
將信息從一種格式(人能識別)轉換成另一種形式(計算機能識別)的過程。 常見的編碼:Base64
2.解碼
計算機能識別的形式轉換成人能識別的形式。
3.字符集和字符編碼
(1).字符集(Charset):是一個系統支持的所有抽象字符的集合。字符是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。
(2).字符編碼(Character Encoding):是一套法則,使用該法則能夠對自然語言的字符的一個集合(如字母表或音節表),與其他東西的一個集合(如號碼或電脈沖)進行配對。 即在符號集合與數字系統之間建立對應關系,它是信息處理的一項基本技術。通常人們用符號集合(一般情況下就是文字)來表達信息。而以計算機為基礎的信息處理系統則是 利用元件(硬件)不同狀態的組合來存儲和處理信息的。元件不同狀態的組合能代表數字系統的數字,因此字符編碼就是將符號轉換為計算機可以接受的數字系統的數,稱為數字代碼。
常見的字符集:ASCII、GB2312、BIG5、GB18030 和 Unicode(UTF-32/ UTF-16/ UTF-8) 字符集
詳見參考:https://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html
1 string pwd = "123456"; 2 byte[] bytes1 = Encoding.Default.GetBytes(pwd); 3 string baseString = Convert.ToBase64String(bytes1); 4 Console.WriteLine($"編碼:{baseString}"); 5 byte[] bytes2 = Convert.FromBase64String(baseString); 6 var str = Encoding.Default.GetString(bytes2); 7 Console.WriteLine($"解碼:{str}");
二. 各種算法及其實現(微軟的實現)
下面的各種算法微軟都有實現,都是基於 【System.Security.Cryptography.Algorithms】這個程序集實現的。
文檔地址:https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography?view=netcore-3.1
源碼地址:https://github.com/dotnet/corefx/tree/master/src/System.Security.Cryptography.Algorithms
1.哈希(散列摘要)算法
Hash,一般翻譯做散列,音譯為哈希,是把任意長度的輸入通過散列算法變換成固定長度的輸出,該輸出就是散列值。 簡單的說就是一種將任意長度的消息壓縮到某一
固定長度的消息摘要的算法或者函數,有時也叫摘要算法。
主流的 Hash 算法有:MD4、MD5 和 SHA系列,其中SHA家族有5個算法:SHA-1,SHA-224,SHA-256,SHA-384 和 SHA-512,其中后 4 者總稱 SHA2 算法。 使用的程序集:【System.Security.Cryptography.Algorithms】(微軟),代碼見下,和后面開源庫的實現相比多了些 -,可以利用replace去掉
用途:文件校驗、數字簽名 和 鑒權協議,建議以后用SHA系列.
PS.
哈希函數的理解:https://www.jianshu.com/p/bba9b61b80e7
哈希一致性算法理解:https://www.jianshu.com/p/6f13156573f4 (了解)
1 //MD5 2 { 3 var srcString = "ypf001"; 4 //(和后面開源庫的實現相比多了些 -,可以利用replace去掉) 5 var md5 = MD5.Create(); 6 byte[] result = md5.ComputeHash(Encoding.UTF8.GetBytes(srcString)); 7 string md5String= BitConverter.ToString(result).Replace("-",""); 8 } 9 //SHA系列 10 { 11 var srcString = "ypf001"; 12 //SHA-256,SHA-384 和 SHA-512 用法類似(和后面開源庫的實現相比多了些-,可以利用replace去掉) 13 var sha1 = SHA1.Create(); 14 byte[] result = sha1.ComputeHash(Encoding.UTF8.GetBytes(srcString)); 15 string sha1HashString = BitConverter.ToString(result).Replace("-", ""); 16 }
2. HMAC算法
HMAC是具密鑰的哈希算法,以一個密鑰和一個消息為輸入,生成摘要作為輸出,消息 + 密鑰 + 算法 ==》 輸出摘要包括:HMAC-MD5、HMAC-SHA1、HMAC-SHA256、HMAC-SHA384、HMAC-SHA512,使用的程序集:【System.Security.Cryptography.Algorithms】(微軟),代碼見下,和后面開源庫的實現相比多了些 -,可以利用replace去掉。
1 //HMAC相關 2 { 3 var secretKey = "sflkasfkksfs"; 4 var srcString = "ypf001"; 5 //HMAC-SHA384、HMAC-SHA512的用法類似 (和后面開源庫的實現相比多了些-,可以利用replace去掉) 6 HMACSHA1 hmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(secretKey)); 7 HMACSHA256 hmacsha2 = new HMACSHA256(Encoding.UTF8.GetBytes(secretKey)); 8 byte[] bytes1 = hmacsha1.ComputeHash(Encoding.UTF8.GetBytes(srcString)); 9 byte[] bytes2 = hmacsha2.ComputeHash(Encoding.UTF8.GetBytes(srcString)); 10 string hmacSha1String = BitConverter.ToString(bytes1).Replace("-", ""); 11 string hmacSha2String = BitConverter.ToString(bytes2).Replace("-", ""); 12 }
3.對稱加密算法
采用單鑰密碼系統的加密方法,同一個密鑰可以同時用作信息的加密和解密加密,也稱為單密鑰加密。 常見的對稱加解密算法:AES、DES、RC2、TripleDES 和 Rijndael 算法。

1 public class DesEncrypt 2 { 3 //8位長度 4 private static byte[] rgbKey = ASCIIEncoding.ASCII.GetBytes("ioeruwoe"); //密鑰(轉為byte數組) 5 private static byte[] rgbIV = ASCIIEncoding.ASCII.GetBytes("ypf00001"); //矢量(配合密鑰更加安全) 6 7 #region 01-DES加密 8 /// <summary> 9 /// DES 加密 10 /// </summary> 11 /// <param name="strValue">需要加密的字符串</param> 12 /// <returns></returns> 13 public static string Encrypt(string strValue) 14 { 15 DESCryptoServiceProvider dsp = new DESCryptoServiceProvider(); 16 using (MemoryStream memStream = new MemoryStream()) 17 { 18 CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write); 19 byte[] buffer = Encoding.Default.GetBytes(strValue); 20 crypStream.Write(buffer, 0, buffer.Length); 21 crypStream.FlushFinalBlock(); 22 memStream.Flush(); 23 return Convert.ToBase64String(memStream.GetBuffer(), 0, (int)memStream.Length); 24 } 25 } 26 #endregion 27 28 #region 02-DES解密 29 /// <summary> 30 /// DES解密 31 /// </summary> 32 /// <param name="EncValue">加密后的結果</param> 33 /// <returns></returns> 34 public static string Decrypt(string EncValue) 35 { 36 DESCryptoServiceProvider dsp = new DESCryptoServiceProvider(); 37 byte[] buffer = Convert.FromBase64String(EncValue); 38 39 using (MemoryStream memStream = new MemoryStream()) 40 { 41 CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write); 42 crypStream.Write(buffer, 0, buffer.Length); 43 crypStream.FlushFinalBlock(); 44 return ASCIIEncoding.UTF8.GetString(memStream.ToArray()); 45 } 46 } 47 #endregion 48 }
1 //DES算法 2 { 3 //具體實現詳見:DesEncrypt 4 string msg1 = "mr1"; 5 //密鑰寫在DesEncrypt類中了 6 string result1 = DesEncrypt.Encrypt(msg1); 7 string result2 = DesEncrypt.Decrypt(result1); 8 }
4.非對稱加密算法
非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那么只有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。
非對稱加密算法實現機密信息交換的基本過程是:甲方生成一對密鑰並將其中的一把作為公用密鑰向其它方公開;得到該公用密鑰的乙方使用該密鑰對機密信息進行加密后再發送給甲方;甲方再用自己保存的另一把專用密鑰對加密后的信息進行解密。
常見的非對稱加解密算法:DSA 和 RSA

1 public class RsaEncrypt 2 { 3 #region 01-生成公鑰和私鑰 4 /// <summary> 5 /// 生成公鑰和私鑰 6 /// </summary> 7 /// <returns></returns> 8 public static KeyValuePair<string, string> GetKeyPair() 9 { 10 RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); 11 string publicKey = RSA.ToXmlString(false); 12 string privateKey = RSA.ToXmlString(true); 13 return new KeyValuePair<string, string>(publicKey, privateKey); 14 } 15 #endregion 16 17 #region 02-加密(傳入內容和公鑰) 18 /// <summary> 19 /// 加密:內容+公鑰,事先需要生成公鑰和私鑰 20 /// </summary> 21 /// <param name="content">加密內容</param> 22 /// <param name="publicKey">公鑰</param> 23 /// <returns></returns> 24 public static string Encrypt(string content, string publicKey) 25 { 26 RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 27 rsa.FromXmlString(publicKey); 28 UnicodeEncoding ByteConverter = new UnicodeEncoding(); 29 byte[] DataToEncrypt = ByteConverter.GetBytes(content); 30 byte[] resultBytes = rsa.Encrypt(DataToEncrypt, false); 31 return Convert.ToBase64String(resultBytes); 32 } 33 #endregion 34 35 #region 03-加密(並返回公鑰和私鑰) 36 /// <summary> 37 /// 加密(並返回公鑰和私鑰),在該方法中生成了公鑰和私鑰,並返回 38 /// </summary> 39 /// <param name="content">加密內容</param> 40 /// <param name="publicKey">返還公鑰</param> 41 /// <param name="privateKey">返回密鑰</param> 42 /// <returns>加密后結果</returns> 43 public static string Encrypt(string content, out string publicKey, out string privateKey) 44 { 45 RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(); 46 publicKey = rsaProvider.ToXmlString(false); 47 privateKey = rsaProvider.ToXmlString(true); 48 UnicodeEncoding ByteConverter = new UnicodeEncoding(); 49 byte[] DataToEncrypt = ByteConverter.GetBytes(content); 50 byte[] resultBytes = rsaProvider.Encrypt(DataToEncrypt, false); 51 return Convert.ToBase64String(resultBytes); 52 } 53 #endregion 54 55 #region 04-解密(內容+私鑰) 56 /// <summary> 57 /// 解密-內容+私鑰 58 /// </summary> 59 /// <param name="content"></param> 60 /// <param name="privateKey"></param> 61 /// <returns></returns> 62 public static string Decrypt(string content, string privateKey) 63 { 64 byte[] dataToDecrypt = Convert.FromBase64String(content); 65 RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); 66 RSA.FromXmlString(privateKey); 67 byte[] resultBytes = RSA.Decrypt(dataToDecrypt, false); 68 UnicodeEncoding ByteConverter = new UnicodeEncoding(); 69 return ByteConverter.GetString(resultBytes); 70 } 71 #endregion 72 73 74 }
1 //RSA算法 2 { 3 //具體實現詳見 RsaEncrypt 4 //方式一:先生成公鑰和私鑰,然后加密和解密 5 //KeyValuePair是一個鍵值對, myKey.Key 代表的公鑰;myKey.Value 代表的私鑰 6 KeyValuePair<string, string> myKey = RsaEncrypt.GetKeyPair(); 7 string msg1 = "mr1"; 8 //加密 9 string result1 = RsaEncrypt.Encrypt(msg1, myKey.Key); 10 //解密 11 string result2 = RsaEncrypt.Decrypt(result1, myKey.Value); 12 }
三. 各種算法開源庫(NETCore.Encrypt)
說明:通過Nuget安裝:【NETCore.Encrypt】,版本為【2.0.8】,需要依賴Newtonsoft.json的版本 大於等於:12.0.1,包括的算法有:Base64、MD5、SHA系列、HAMC系列、AES、DES、RSA。
開源地址:https://github.com/myloveCc/NETCore.Encrypt
PS:還支持MD5、SHA系列、HMAC系列 對於String類型的擴展,如:var hashed3 = "ypf".MD5(); 大部分算法支持 string和byte[] 兩種格式。
推薦使用這個第三方庫,已經封裝好了,直接調用即可
1 { 2 //1. Base64的編碼和解碼 3 var srcString = "ypf001"; 4 var hashed1 = EncryptProvider.Base64Encrypt(srcString); //default encoding is UTF-8 5 var hashed2 = EncryptProvider.Base64Encrypt(srcString, Encoding.ASCII); //按照ascii進行編碼 6 var strValue1 = EncryptProvider.Base64Decrypt(hashed1); //default encoding is UTF-8 7 var strValue2 = EncryptProvider.Base64Decrypt(hashed2, Encoding.ASCII); //按照ascii進行解碼 8 } 9 { 10 //2. MD5 11 var srcString = "ypf001"; 12 var hashed1 = EncryptProvider.Md5(srcString); //默認32位 13 var hashed2 = EncryptProvider.Md5(srcString, MD5Length.L16); //16位 14 Console.WriteLine($"ypf001的MD5加密(32位):{hashed1}"); 15 Console.WriteLine($"ypf002的MD5加密(64位):{hashed2}"); 16 //擴展用法 17 var hashed3 = srcString.MD5(); 18 } 19 { 20 //3. SHA相關 21 var srcString = "ypf001"; 22 var hashed1 = EncryptProvider.Sha1(srcString); 23 var hashed2 = EncryptProvider.Sha256(srcString); 24 var hashed3 = EncryptProvider.Sha384(srcString); 25 var hashed4 = EncryptProvider.Sha512(srcString); 26 //擴展用法(如下,其余類似) 27 var extHash = srcString.SHA1(); 28 } 29 { 30 //4. HAMC相關 31 var secretKey = "sflkasfkksfs"; 32 var srcString = "ypf001"; 33 var hashed1 = EncryptProvider.HMACMD5(srcString, secretKey); 34 var hashed2 = EncryptProvider.HMACSHA1(srcString, secretKey); 35 var hashed3 = EncryptProvider.HMACSHA256(srcString, secretKey); 36 var hashed4 = EncryptProvider.HMACSHA384(srcString, secretKey); 37 var hashed5 = EncryptProvider.HMACSHA512(srcString, secretKey); 38 //擴展用法(如下,其余類似) 39 var extHash = srcString.HMACSHA1(secretKey); 40 } 41 { 42 //5. AES 43 //利用算法生成key和iv(32位和16位),當然這里可以自己指定並保存好 44 //var aesKey = EncryptProvider.CreateAesKey(); 45 //var key = aesKey.Key; 46 //var iv = aesKey.IV; 47 var secretKey = "asdfjketjnddkkaakkuyerbdsbgrtsaw"; //這里的key得32位 48 var iv = "ioeruwoeruo2aqwe"; //加密和解密的過程中可以加上iv矢量,使其安全性更高,這里的iv得16位 49 var srcString = "ypf001"; 50 //加密 51 var encrypted1 = EncryptProvider.AESEncrypt(srcString, secretKey); 52 var encrypted2 = EncryptProvider.AESEncrypt(srcString, secretKey, iv); 53 //解密 54 var decrypted1 = EncryptProvider.AESDecrypt(encrypted1, secretKey); 55 var decrypted2 = EncryptProvider.AESDecrypt(encrypted2, secretKey, iv); 56 //PS:這里除了string加密,還可以對byte數組加密 57 } 58 { 59 //6. DES 60 //利用算法生成key(24位),當然這里可以自己指定並保存好 61 //var desKey = EncryptProvider.CreateDesKey(); 62 var secretKey = "asdfjketjnddkkaakkuyerbd"; //這里的key得24位 63 var srcString = "ypf001"; 64 //加密 65 var encrypted1 = EncryptProvider.DESEncrypt(srcString, secretKey); 66 //解密 67 var decrypted1 = EncryptProvider.DESDecrypt(encrypted1, secretKey); 68 //PS:這里除了string加密,還可以對byte數組加密 69 } 70 { 71 //7.RSA 72 //利用算法生成公鑰和私鑰,然后保存;當然這里可以自己指定並保存好 73 var rsaKey = EncryptProvider.CreateRsaKey(); //default is 2048 74 // var rsaKey = EncryptProvider.CreateRsaKey(RsaSize.R3072); 75 var publicKey = rsaKey.PublicKey; 76 var privateKey = rsaKey.PrivateKey; 77 var srcString = "ypf001"; 78 //加密 79 var encrypted1 = EncryptProvider.RSAEncrypt(publicKey, srcString); //公鑰加密 80 //解密 81 var decrypted = EncryptProvider.RSADecrypt(privateKey, encrypted1); //私鑰解密 82 } 83 public enum RsaSize 84 { 85 R2048 = 2048, 86 R3072 = 3072, 87 R4096 = 4096 88 }
框架封裝

1 /// <summary> 2 /// 各種加密解密算法 3 /// 依賴程序集【NETCore.Encrypt】 4 /// </summary> 5 public class SecurityHelp 6 { 7 /// <summary> 8 /// Base64編碼 9 /// </summary> 10 /// <param name="srcString">需要編碼的字符串</param> 11 /// <returns></returns> 12 public static string Base64Encrypt(string srcString) 13 { 14 return EncryptProvider.Base64Encrypt(srcString); //default encoding is UTF-8 15 } 16 17 /// <summary> 18 /// Base64編碼 19 /// </summary> 20 /// <param name="encString">需要解碼的字符串</param> 21 /// <returns></returns> 22 public static string Base64Decrypt(string encString) 23 { 24 return EncryptProvider.Base64Decrypt(encString); //default encoding is UTF-8 25 } 26 27 28 /// <summary> 29 /// MD5加密 30 /// </summary> 31 /// <param name="srcString">需要加密的字符串</param> 32 /// <param name="num">位數,默認為32位,也可以是16位</param> 33 /// <returns></returns> 34 public static string Md5(string srcString, int num = 32) 35 { 36 if (num == 32) 37 { 38 return EncryptProvider.Md5(srcString); //默認32位 39 } 40 else 41 { 42 return EncryptProvider.Md5(srcString, MD5Length.L16); //16位 43 } 44 } 45 46 47 /// <summary> 48 /// SHA系列算法 49 /// </summary> 50 /// <param name="srcString">需要加密的字符串</param> 51 /// <param name="kind">類型</param> 52 /// <returns></returns> 53 public static string SHA(string srcString, string kind = "Sha512") 54 { 55 if (kind.Equals("Sha1")) 56 { 57 return EncryptProvider.Sha1(srcString); 58 } 59 else if (kind.Equals("Sha256")) 60 { 61 return EncryptProvider.Sha256(srcString); 62 } 63 else if (kind.Equals("Sha384")) 64 { 65 return EncryptProvider.Sha384(srcString); 66 } 67 else 68 { 69 return EncryptProvider.Sha512(srcString); 70 } 71 } 72 73 /// <summary> 74 /// HMAC系列算法 75 /// </summary> 76 /// <param name="srcString">需要加密的字符串</param> 77 /// <param name="secretKey">密鑰</param> 78 /// <param name="kind">類型</param> 79 /// <returns></returns> 80 public static string HMAC(string srcString, string secretKey, string kind = "HMACSHA512") 81 { 82 if (kind.Equals("HMACMD5")) 83 { 84 return EncryptProvider.HMACMD5(srcString, secretKey); 85 } 86 else if (kind.Equals("HMACSHA1")) 87 { 88 return EncryptProvider.HMACSHA1(srcString, secretKey); 89 } 90 else if (kind.Equals("HMACSHA256")) 91 { 92 return EncryptProvider.HMACSHA256(srcString, secretKey); 93 } 94 else if (kind.Equals("HMACSHA384")) 95 { 96 return EncryptProvider.HMACSHA384(srcString, secretKey); 97 } 98 else 99 { 100 return EncryptProvider.HMACSHA512(srcString, secretKey); 101 } 102 } 103 104 105 /// <summary> 106 /// 生成AES算法所需的Key和iv 107 /// (當然這里可以自己指定並保存好) 108 /// </summary> 109 /// <param name="key">加密所需的key</param> 110 /// <param name="iv">加密所需的矢量</param> 111 public static void CreateAesKey(ref string key, ref string iv) 112 { 113 //利用算法生成key和iv(32位和16位),當然這里可以自己指定並保存好 114 var aesKey = EncryptProvider.CreateAesKey(); 115 key = aesKey.Key; 116 iv = aesKey.IV; 117 } 118 119 /// <summary> 120 /// AES加密算法 121 /// </summary> 122 /// <param name="srcString">需要加密的字符串</param> 123 /// <param name="secretKey">密鑰</param> 124 /// <param name="iv">矢量(可以不填)</param> 125 /// <returns></returns> 126 public static string AESEncrypt(string srcString, string secretKey, string iv = "") 127 { 128 if (string.IsNullOrEmpty(iv)) 129 { 130 return EncryptProvider.AESEncrypt(srcString, secretKey); //表示不需要iv矢量的AES加密算法 131 } 132 else 133 { 134 return EncryptProvider.AESEncrypt(srcString, secretKey, iv); //表示需要iv矢量的AES加密算法 135 } 136 } 137 138 139 /// <summary> 140 /// AES解密算法 141 /// </summary> 142 /// <param name="encString">需要解密的字符串</param> 143 /// <param name="secretKey">密鑰</param> 144 /// <param name="iv">矢量(可以不填)</param> 145 /// <returns></returns> 146 public static string AESDecrypt(string encString, string secretKey, string iv = "") 147 { 148 if (string.IsNullOrEmpty(iv)) 149 { 150 return EncryptProvider.AESDecrypt(encString, secretKey); //表示不需要iv矢量的AES解密算法 151 } 152 else 153 { 154 return EncryptProvider.AESDecrypt(encString, secretKey, iv); //表示需要iv矢量的AES解密算法 155 } 156 } 157 158 159 /// <summary> 160 /// DES加密算法 161 /// </summary> 162 /// <param name="srcString">需要加密的字符串</param> 163 /// <param name="secretKey">密鑰(這里的密鑰需要是24位)</param> 164 /// <returns></returns> 165 public static string EDSEncrypt(string srcString, string secretKey) 166 { 167 return EncryptProvider.DESEncrypt(srcString, secretKey); 168 } 169 170 171 /// <summary> 172 /// DES解密算法 173 /// </summary> 174 /// <param name="encString">需要解密的字符串</param> 175 /// <param name="secretKey">密鑰</param> 176 /// <returns></returns> 177 public static string DESDecrypt(string encString, string secretKey) 178 { 179 return EncryptProvider.DESDecrypt(encString, secretKey); 180 } 181 182 183 184 /// <summary> 185 /// 生成RSA算法所需的Key和iv 186 /// (當然這里可以自己指定並保存好) 187 /// </summary> 188 /// <param name="PublicKey">公鑰</param> 189 /// <param name="PrivateKey">私鑰</param> 190 public static void CreateRsaKey(ref string PublicKey, ref string PrivateKey) 191 { 192 //利用算法生成公鑰和私鑰,然后保存;當然這里可以自己指定並保存好 193 var rsaKey = EncryptProvider.CreateRsaKey(); //default is 2048 194 // var rsaKey = EncryptProvider.CreateRsaKey(RsaSize.R3072); 195 PublicKey = rsaKey.PublicKey; 196 PrivateKey = rsaKey.PrivateKey; 197 } 198 199 200 201 /// <summary> 202 /// RSA加密算法 203 /// </summary> 204 /// <param name="srcString">需要加密的字符串</param> 205 /// <param name="publicKey">公鑰 加密</param> 206 /// <returns></returns> 207 public static string RSAEncrypt(string srcString, string publicKey) 208 { 209 return EncryptProvider.RSAEncrypt(publicKey, srcString); //公鑰加密 210 } 211 212 213 /// <summary> 214 /// RSA解密算法 215 /// </summary> 216 /// <param name="encString">需要解密的字符串</param> 217 /// <param name="privateKey">私鑰 解密</param> 218 /// <returns></returns> 219 public static string RSADecrypt(string encString, string privateKey) 220 { 221 return EncryptProvider.RSADecrypt(privateKey, encString); //私鑰解密 222 } 223 224 225 226 } 227 228 229 230 public enum RsaSize 231 { 232 R2048 = 2048, 233 R3072 = 3072, 234 R4096 = 4096 235 }
!
- 作 者 : Yaopengfei(姚鵬飛)
- 博客地址 : http://www.cnblogs.com/yaopengfei/
- 聲 明1 : 本人才疏學淺,用郭德綱的話說“我是一個小學生”,如有錯誤,歡迎討論,請勿謾罵^_^。
- 聲 明2 : 原創博客請在轉載時保留原文鏈接或在文章開頭加上本人博客地址,否則保留追究法律責任的權利。