WEB开发网
开发学院WEB开发ASP.NET DotNet中用到的加密算法总结 阅读

DotNet中用到的加密算法总结

 2007-01-23 17:20:28 来源:WEB开发网   
核心提示: 1public class CryptUtil 2 { 3 public static string DecryptString(string input) 4 { 5 if (input.Equals(string.Empty)) 6 { 7 return input; 8 } 9

  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     }

有这里没包括的,欢迎回复,大家一起总结一下~~
http://www.cnblogs.com/goody9807/archive/2007/01/23/627785.html

Tags:DotNet 用到 加密

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接