第二十四節:編碼、解碼、加密算法概念及實現(Base64、MD5、SHA、HMAC、DES、AES、RSA)


一. 編碼解碼

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     }
View Code
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     }
View Code
 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     }
View Code

 

 

 

 

 

 

!

  • 作       者 : Yaopengfei(姚鵬飛)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 聲     明1 : 本人才疏學淺,用郭德綱的話說“我是一個小學生”,如有錯誤,歡迎討論,請勿謾罵^_^。
  • 聲     明2 : 原創博客請在轉載時保留原文鏈接或在文章開頭加上本人博客地址,否則保留追究法律責任的權利。
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM