DotNet中用到的加密算法總結

   1public class CryptUtil
   2     {
   3         public static string DecryptString(string input)
   4         {
   5             if (input.Equals(string.Empty))
   6             {
   7                 return input;
   8             }
   9
10             byte[] byKey = {0x63, 0x68, 0x65, 0x6E, 0x79, 0x75, 0x61, 0x6E};
11             byte[] IV = {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10};
12             byte[] inputByteArray = new Byte[input.Length];
13             DESCryptoServiceProvider des = new DESCryptoServiceProvider();
14             inputByteArray = Convert.FromBase64String(input);
15             MemoryStream ms = new MemoryStream();
16             CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);
17             cs.Write(inputByteArray, 0, inputByteArray.Length);
18             cs.FlushFinalBlock();
19             Encoding encoding = new UTF8Encoding();
20             return encoding.GetString(ms.ToArray());
21         }
22
23         public static string EncryptString(string input)
24         {
25             if (input.Equals(string.Empty))
26             {
27                 return input;
28             }
29
30             byte[] byKey = {0x63, 0x68, 0x65, 0x6E, 0x79, 0x75, 0x61, 0x6E};
31             byte[] IV = {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10};
32             DESCryptoServiceProvider des = new DESCryptoServiceProvider();
33             byte[] inputByteArray = Encoding.UTF8.GetBytes(input);
34             MemoryStream ms = new MemoryStream();
35             CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write);
36             cs.Write(inputByteArray, 0, inputByteArray.Length);
37             cs.FlushFinalBlock();
38             return Convert.ToBase64String(ms.ToArray());
39         }
40         /**//// <summary>
41         /// DES + Base64 加密
42         /// </summary>
43         /// <param name="input">明文字符串</param>
44         /// <returns>已加密字符串</returns>
45         public static string DesBase64Encrypt(string input)
46         {
47             System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
48             des.Mode = System.Security.Cryptography.CipherMode.ECB;
49             ICryptoTransform ct;
50             MemoryStream ms;
51             CryptoStream cs;
52             byte[] byt;
53             byte[] Key = new byte[8]{56,50,55,56,56,55,49,49};
54             byte[] IV = new byte[8]{0,0,0,0,0,0,0,0};
55
56             ct = des.CreateEncryptor(Key, IV);
57
58             byt = Encoding.GetEncoding("GB2312").GetBytes(input); //根據 GB2312 編碼對字符串處理,轉換成 byte 數組
59            
60             ms = new MemoryStream();
61             cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
62             cs.Write(byt, 0, byt.Length);
63             cs.FlushFinalBlock();
64
65             cs.Close();
66
67             byte[] answer = ms.ToArray();
68             for(int j=0;j<answer.Length;j++)
69             {
70                 Console.Write(answer[j].ToString()+ " ");
71             }
72             Console.WriteLine();
73             return Convert.ToBase64String(ms.ToArray()); // 將加密的 byte 數組依照 Base64 編碼轉換成字符串
74         }
75
76         /**//// <summary>
77         /// DES + Base64 解密
78         /// </summary>
79         /// <param name="input">密文字符串</param>
80         /// <returns>解密字符串</returns>
81         public static string DesBase64Decrypt(string input)
82         {
83             System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
84             des.Mode = System.Security.Cryptography.CipherMode.ECB;
85             ICryptoTransform ct;
86             MemoryStream ms;
87             CryptoStream cs;
88             byte[] byt;
89             byte[] Key = new byte[8]{56,50,55,56,56,55,49,49};
90             byte[] IV = new byte[8]{0,0,0,0,0,0,0,0};
91            
92             ct = des.CreateDecryptor(Key, IV);
93             byt = Convert.FromBase64String(input); // 將 密文 以 Base64 編碼轉換成 byte 數組
94
95             ms = new MemoryStream();
96             cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
97             cs.Write(byt, 0, byt.Length);
98             cs.FlushFinalBlock();
99
100             cs.Close();
101
102             return Encoding.GetEncoding("GB2312").GetString(ms.ToArray()); // 將 明文 以 GB2312 編碼轉換成字符串
103         }
104        
105        
106        
107         /**//// <summary>
108         /// DES + Base64 加密
109         /// </summary>
110         /// <param name="input">明文字符串</param>
111         /// <returns>已加密字符串</returns>
112         public static string DesBase64EncryptForID5(string input)
113         {
114             System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
115             des.Mode = System.Security.Cryptography.CipherMode.CBC;
116             ICryptoTransform ct;
117             MemoryStream ms;
118             CryptoStream cs;
119             byte[] byt;
120             byte[] Key = new byte[8]{56,50,55,56,56,55,49,49};
121             byte[] IV = new byte[8]{56,50,55,56,56,55,49,49};
122
123             ct = des.CreateEncryptor(Key, IV);
124
125             byt = Encoding.GetEncoding("GB2312").GetBytes(input); //根據 GB2312 編碼對字符串處理,轉換成 byte 數組
126            
127             ms = new MemoryStream();
128             cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
129             cs.Write(byt, 0, byt.Length);
130             cs.FlushFinalBlock();
131
132             cs.Close();
133
134             byte[] answer = ms.ToArray();
135             for(int j=0;j<answer.Length;j++)
136             {
137                 Console.Write(answer[j].ToString()+ " ");
138             }
139             Console.WriteLine();
140             return Convert.ToBase64String(ms.ToArray()); // 將加密的 byte 數組依照 Base64 編碼轉換成字符串
141         }
142        
143        
144         /**//// <summary>
145         /// DES + Base64 解密
146         /// </summary>
147         /// <param name="input">密文字符串</param>
148         /// <returns>解密字符串</returns>
149         public static string DesBase64DecryptForID5(string input)
150         {
151             System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
152             des.Mode = System.Security.Cryptography.CipherMode.CBC;
153             ICryptoTransform ct;
154             MemoryStream ms;
155             CryptoStream cs;
156             byte[] byt;
157             byte[] Key = new byte[8]{56,50,55,56,56,55,49,49};
158             byte[] IV = new byte[8]{56,50,55,56,56,55,49,49};
159            
160             ct = des.CreateDecryptor(Key, IV);
161             byt = Convert.FromBase64String(input); // 將 密文 以 Base64 編碼轉換成 byte 數組
162
163             ms = new MemoryStream();
164             cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
165             cs.Write(byt, 0, byt.Length);
166             cs.FlushFinalBlock();
167
168             cs.Close();
169
170             return Encoding.GetEncoding("GB2312").GetString(ms.ToArray()); // 將 明文 以 GB2312 編碼轉換成字符串
171         }
172        
173
174         /**//// <summary>
175         /// 3DES 加密 Byte[] to HEX string
176         /// </summary>
177         /// <param name="input">明文字符串</param>
178         /// <returns>已加密字符串</returns>
179         public static string ThreeDesEncryptHEX(string input)
180         {
181             string result = "";
182             System.Security.Cryptography.TripleDES des = System.Security.Cryptography.TripleDES.Create();
183             des.Mode = System.Security.Cryptography.CipherMode.CBC;
184             des.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
185             ICryptoTransform ct;
186             MemoryStream ms;
187             CryptoStream cs;
188             byte[] byt;
189             byte[] Key = new byte[24]{
190                                          1,2,3,4,5,6,
191                                          1,2,3,4,5,6,
192                                          1,2,3,4,5,6,
193                                          1,2,3,4,5,6
194                                      };
195             byte[] IV = new byte[8]{1,2,3,4,5,6,1,2};
196
197             ct = des.CreateEncryptor(Key, IV);
198
199             byt = Encoding.GetEncoding("GB2312").GetBytes(input); //根據 GB2312 編碼對字符串處理,轉換成 byte 數組
200            
201             ms = new MemoryStream();
202             cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
203             cs.Write(byt, 0, byt.Length);
204             cs.FlushFinalBlock();
205
206             cs.Close();
207
208             byte[] answer = ms.ToArray();
209             for(int j=0;j<answer.Length;j++)
210             {
211                 result += answer[j].ToString("x").PadLeft(2,'0');
212             }
213             return result;
214         }
215
216         /**//// <summary>
217         /// 3DES + HEX to byte[] 解密
218         /// </summary>
219         /// <param name="input">密文字符串</param>
220         /// <returns>解密字符串</returns>
221         public static string ThreeDesDecryptHEX(string input)
222         {
223             System.Security.Cryptography.TripleDES des = System.Security.Cryptography.TripleDES.Create();
224             des.Mode = System.Security.Cryptography.CipherMode.CBC;
225             des.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
226             ICryptoTransform ct;
227             MemoryStream ms;
228             CryptoStream cs;
229             byte[] Key = new byte[24]{
230                                          1,2,3,4,5,6,
231                                          1,2,3,4,5,6,
232                                          1,2,3,4,5,6,
233                                          1,2,3,4,5,6
234                                      };
235             byte[] IV = new byte[8]{1,2,3,4,5,6,1,2};
236            
237             ct = des.CreateDecryptor(Key, IV);
238             //byt = Convert.FromBase64String(input); // 將 密文 以 HEX to byte[]編碼轉換成 byte 數組
239             if(input.Length<=1)
240             {
241                 throw new Exception("encrypted HEX string is too short!");
242             }
243             byte[] byt = new byte[input.Length/2];
244             for(int i=0;i<byt.Length;i++)
245             {
246                 //Console.WriteLine(input.Substring(i*2,2));
247                 byt[i] = Convert.ToByte(input.Substring(i*2,2),16);
248             }
249
250             ms = new MemoryStream();
251             cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
252             cs.Write(byt, 0, byt.Length);
253             cs.FlushFinalBlock();
254
255             cs.Close();
256
257             return Encoding.GetEncoding("GB2312").GetString(ms.ToArray()); // 將 明文 以 GB2312 編碼轉換成字符串
258         }
259         /**//// <summary>
260         /// Base64解碼
261         /// </summary>
262         /// <param name="base64Str"></param>
263         /// <returns></returns>
264         public static string DecodingFromBase64(string base64Str)
265         {
266             Byte[] bytes = Convert.FromBase64String(base64Str);
267             return System.Text.Encoding.UTF8.GetString(bytes);
268         }
269         /**//// <summary>
270         /// Base64編碼
271         /// </summary>
272         /// <param name="str"></param>
273         /// <returns></returns>
274         public static string EncodingToBase64(string str)
275         {
276             return Convert.ToBase64String(Encoding.UTF8.GetBytes(str));
277         }
278         /**//// <summary>
279         /// 根據指定的編碼方式Base64解碼
280         /// </summary>
281         /// <param name="base64Str"></param>
282         /// <param name="strEncoding"></param>
283         /// <returns></returns>
284         public static string DecodingFromBase64(string base64Str,System.Text.Encoding strEncoding)
285         {
286             Byte[] bytes = Convert.FromBase64String(base64Str);
287             return strEncoding.GetString(bytes);
288         }
289         /**//// <summary>
290         /// 根據指定的編碼方式Base64編碼
291         /// </summary>
292         /// <param name="str"></param>
293         /// <param name="strEncoding"></param>
294         /// <returns></returns>
295         public static string EncodingToBase64(string str,System.Text.Encoding strEncoding)
296         {
297             return Convert.ToBase64String(strEncoding.GetBytes(str));
298         }
299     }
兩個常用的方法

1     /**//// <summary>
2         /// 通過字節數組形式的密鑰獲取字符串形式的密鑰
3         /// </summary>
4         void GetStringByByteArray()
5         {
6             byte[] Key = new byte[8]{56,50,55,56,56,55,49,49};
7             Response.Write(System.Text.Encoding.Default.GetString(Key));
8             Response.End();
9         }
10
11         /**//// <summary>
12         /// 通過字符串形式的密鑰獲取字節數組形式的密鑰
13         /// </summary>
14         void GetByteArrayByString()
15         {
16             string key = "82788711";
17             Response.Write(System.Text.Encoding.Default.GetBytes(key));
18             Response.End();
19            
20         }

 
發佈了14 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章