2019-2-20C#開發中經常使用加密解密方法解析

C#開發中經常使用加密解密方法解析
算法

1、MD5加密算法

我想這是你們都常聽過的算法,可能也用的比較多。那麼什麼是MD5算法呢?MD5全稱是數據庫

message-digest algorithm 5【|ˈmesidʒ|-|daiˈdʒest|-|ˈælɡəriðəm|】,簡單的說就是單向的加密,便是說沒法根據密文推導出明文。express

MD5主要用途:數組

一、對一段信息生成信息摘要,該摘要對該信息具備惟一性,能夠做爲數字簽名。安全

二、用於驗證文件的有效性(是否有丟失或損壞的數據),ide

三、對用戶密碼的加密,函數

四、在哈希函數中計算散列值ui

從上邊的主要用途中咱們看到,因爲算法的某些不可逆特徵,在加密應用上有較好的安全性。經過使用MD5加密算法,咱們輸入一個任意長度的字節串,都會生成一個128位的整數。因此根據這一點MD5被普遍的用做密碼加密。下面我就像你們演示一下怎樣進行密碼加密。編碼

先看下演示效果:加密

 

具體代碼以下:

首先須要引入命名空間:

using System.Security;
using System.Security.Cryptography;
private void btnmd5_Click(object sender, EventArgs e)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] palindata = Encoding.Default.GetBytes(txtyuan.Text);//將要加密的字符串轉換爲字節數組
byte[] encryptdata=md5.ComputeHash(palindata);//將字符串加密後也轉換爲字符數組
txtjiami.Text = Convert.ToBase64String(encryptdata);//將加密後的字節數組轉換爲加密字符串
}

這裏咱們須要注意的是,不管是在加密的過程當中,加密前要將加密字符串轉爲字節數組,加密後也要生成密文的字節數據,而後再轉化爲密文。

 

2、RSA加密算法

在談RSA加密算法以前,咱們須要先了解下兩個專業名詞,對稱加密非對稱加密

對稱加密即:含有一個稱爲密鑰的東西,在消息發送前使用密鑰對消息進行加密,在對方收到消息以後,使用相同的密鑰進行解密

非對稱加密即:加密和解密使用不一樣的密鑰的一類加密算法。這類加密算法一般有兩個密鑰A和B,使用密鑰A加密數據獲得的密文,只有密鑰B能夠進行解密操做(即便密鑰A也沒法解密),相反,使用了密鑰B加密數據獲得的密文,只有密鑰A能夠解密。這兩個密鑰分別稱爲私鑰和公鑰,顧名思義,私鑰就是你我的保留,不能公開的密鑰,而公鑰則是公開給加解密操做的另外一方的。根據不一樣用途,對數據進行加密所使用的密鑰也不相同(有時用公鑰加密,私鑰解密;有時相反用私鑰加密,公鑰解密)。非對稱加密的表明算法是RSA算法。

瞭解了這兩個名詞下面來說,RSA加密算法。RSA取名來自開發他們三者的名字。RSA是目前最有影響力的公鑰加密算法,多用於數據加密和數字簽名。雖然有這麼大的影響力,可是同時它也有一些弊端,它產生密鑰很麻煩,受到素數產生技術的限制,於是難以作到一次一密,分組長度太大等。

下面經過示例演示使用RSA加密、解密,引用名稱空間System.Security.Cryptography;

//加密
private string Encryption(string express)
{
CspParameters param = new CspParameters();
param.KeyContainerName = "oa_erp_dowork";//密匙容器的名稱,保持加密解密一致才能解密成功
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param))
{
byte[] plaindata = Encoding.Default.GetBytes(express);//將要加密的字符串轉換爲字節數組
byte[] encryptdata = rsa.Encrypt(plaindata, false);//將加密後的字節數據轉換爲新的加密字節數組
return Convert.ToBase64String(encryptdata);//將加密後的字節數組轉換爲字符串
}
}

//解密
private string Decrypt(string ciphertext)
{
CspParameters param = new CspParameters();
param.KeyContainerName = "oa_erp_dowork";
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param))
{
byte[] encryptdata = Convert.FromBase64String(ciphertext);
byte[] decryptdata = rsa.Decrypt(encryptdata, false);
return Encoding.Default.GetString(decryptdata);
}
}

  


下面我再經過一個示例向你們演示,經過使用RSA加密算法產出公匙和私匙

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
using (StreamWriter sw = new StreamWriter(Server.MapPath("PublicKey.xml")))//產生公匙
{
sw.WriteLine(rsa.ToXmlString(false));
}
using (StreamWriter sw = new StreamWriter(Server.MapPath("PrivateKey.xml")))//產生私匙(也包含私匙)
{
sw.WriteLine(rsa.ToXmlString(true));
}

  

 

3、DES加密

DES加密:使用一個 56 位的密鑰以及附加的 8 位奇偶校驗位,產生最大 64 位的分組大小。這是一個迭代的分組密碼,使用稱爲 Feistel 的技術,其中將加密的文本塊分紅兩半。使用子密鑰對其中一半應用循環功能,而後將輸出與另外一半進行「異或」運算;接着交換這兩半,這一過程會繼續下去,但最後一個循環不交換。DES 使用 16 個循環,使用異或,置換,代換,移位操做四種基本運算。額專業術語就看看得了,下面直接給你們演示一個小demo,以幫助你們的理解。

先定義一個全局的字節數組和實例化一個全局的DESCryptoServiceProvider對象

byte[] buffer;

DESCryptoServiceProvider DesCSP = new DESCryptoServiceProvider();

加密:

private void button2_Click(object sender, EventArgs e)
{
MemoryStream ms = new MemoryStream();//先建立 一個內存流
CryptoStream cryStream = new CryptoStream(ms, DesCSP.CreateEncryptor(), CryptoStreamMode.Write);//將內存流鏈接到加密轉換流
StreamWriter sw = new StreamWriter(cryStream);
sw.WriteLine(txtyuan.Text);//將要加密的字符串寫入加密轉換流
sw.Close();
cryStream.Close();
buffer = ms.ToArray();//將加密後的流轉換爲字節數組
txtjiami.Text =Convert.ToBase64String(buffer);//將加密後的字節數組轉換爲字符串
}

解密:

private void button1_Click(object sender, EventArgs e)
{
MemoryStream ms = new MemoryStream(buffer);//將加密後的字節數據加入內存流中
CryptoStream cryStream = new CryptoStream(ms, DesCSP.CreateDecryptor(), CryptoStreamMode.Read);//內存流鏈接到解密流中
StreamReader sr = new StreamReader(cryStream);
txthjiemi.Text = sr.ReadLine();//將解密流讀取爲字符串
sr.Close();
cryStream.Close();
ms.Close();
}

此外還有AES加密算法,可是AES加密是一個新的能夠用於保護電子數據的加密算法。其產生的密碼是迭代對稱的分組密碼,代加密使用一個循環結構,在該循環中重複置換和替換輸入數據。由於用的不是不少,在這裏就再也不作具體的演示了。

  1 //SHA-1算法
  2 string password = 
  3 System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(Password.Text, 
  4 "SHA1");
  5 //MD5算法
  6 string password1 = 
  7 System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(Password.Text, 
  8 "MD5");
  9 
 10 加密後生成不可逆密文保存到數據庫中。用戶登陸時用加密計算後的密文與數據庫中的密碼密文比較。一致則經過驗證,不一致則返回登陸錯誤。
 11 這種加密算法是不可逆的,因此除了用戶本身,其餘人沒法得知用戶的真實密碼內容。
 12 
 13 SHA-1算法和MD5算法的區別:
 14 SHA-1比MD5多32位密文,因此更安全。因爲一樣的緣由,MD5比SHA-1的運算速度更快。
 15 
 16 
 17 
 18 
 19 加密算法總彙
 20 方法一:
 21     
 22 //須添加對System.Web的引用 
 23     using System.Web.Security; 
 24      
 25     ... 
 26 
 27      
 28     /// <summary> 
 29     /// SHA1加密字符串 
 30     /// 
 31 </summary> 
 32     /// <param name="source">源字符串</param> 
 33 
 34     /// <returns>加密後的字符串</returns> 
 35     public string 
 36 SHA1(string source) 
 37     { 
 38         return 
 39 FormsAuthentication.HashPasswordForStoringInConfigFile(source, "SHA1"); 
 40     
 41 } 
 42 
 43 
 44     /// <summary> 
 45     /// MD5加密字符串 
 46     /// 
 47 </summary> 
 48     /// <param name="source">源字符串</param> 
 49 
 50     /// <returns>加密後的字符串</returns> 
 51     public string 
 52 MD5(string source) 
 53     { 
 54         return 
 55 FormsAuthentication.HashPasswordForStoringInConfigFile(source, "MD5");; 
 56     
 57 }
 58 
 59 
 60 方法二(可逆加密解密):
 61     using System.Security.Cryptography; 
 62      
 63 
 64     ... 
 65      
 66     public string Encode(string data) 
 67     { 
 68 
 69         byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64); 
 70 
 71         byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); 
 72 
 73      
 74         DESCryptoServiceProvider cryptoProvider = new 
 75 DESCryptoServiceProvider(); 
 76         int i = cryptoProvider.KeySize; 
 77 
 78         MemoryStream ms = new MemoryStream(); 
 79         CryptoStream cst = 
 80 new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), 
 81 CryptoStreamMode.Write); 
 82      
 83         StreamWriter sw = new 
 84 StreamWriter(cst); 
 85         sw.Write(data); 
 86         sw.Flush(); 
 87 
 88         cst.FlushFinalBlock(); 
 89         sw.Flush(); 
 90         return 
 91 Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); 
 92      
 93     } 
 94 
 95      
 96     public string Decode(string data) 
 97     { 
 98         byte[] 
 99 byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64); 
100         byte[] 
101 byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); 
102      
103         
104 byte[] byEnc; 
105         try
106         { 
107             byEnc = 
108 Convert.FromBase64String(data); 
109         } 
110         catch
111         { 
112 
113             return null; 
114         } 
115      
116         
117 DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); 
118 
119         MemoryStream ms = new MemoryStream(byEnc); 
120         CryptoStream 
121 cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), 
122 CryptoStreamMode.Read); 
123         StreamReader sr = new StreamReader(cst); 
124 
125         return sr.ReadToEnd(); 
126     }
127 
128 方法三(MD5不可逆):
129     using 
130 System.Security.Cryptography; 
131      
132     ... 
133      
134     //MD5不可逆加密 
135 
136      
137     //32位加密 
138      
139     public string GetMD5_32(string s, 
140 string _input_charset) 
141     { 
142         MD5 md5 = new 
143 MD5CryptoServiceProvider(); 
144         byte[] t = 
145 md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s)); 
146         
147 StringBuilder sb = new StringBuilder(32); 
148         for (int i = 0; i < 
149 t.Length; i++) 
150         { 
151             
152 sb.Append(t[i].ToString("x").PadLeft(2, '0')); 
153         } 
154         return 
155 sb.ToString(); 
156     } 
157      
158     //16位加密 
159     public static string 
160 GetMd5_16(string ConvertString) 
161     { 
162         MD5CryptoServiceProvider 
163 md5 = new MD5CryptoServiceProvider(); 
164         string t2 = 
165 BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)), 
166 4, 8); 
167         t2 = t2.Replace("-", ""); 
168         return t2; 
169     
170 }
171 
172 方法四(對稱加密):
173     using System.IO; 
174     using 
175 System.Security.Cryptography; 
176      
177     ... 
178      
179     private 
180 SymmetricAlgorithm mobjCryptoService; 
181     private string Key; 
182     /// 
183 <summary>    
184     /// 對稱加密類的構造函數    
185     /// </summary>    
186 
187     public SymmetricMethod() 
188     { 
189         mobjCryptoService = new 
190 RijndaelManaged(); 
191         Key = 
192 "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7"; 
193 
194     } 
195     /// <summary>    
196     /// 得到密鑰    
197     /// 
198 </summary>    
199     /// <returns>密鑰</returns>    
200     
201 private byte[] GetLegalKey() 
202     { 
203         string sTemp = Key; 
204 
205         mobjCryptoService.GenerateKey(); 
206         byte[] bytTemp = 
207 mobjCryptoService.Key; 
208         int KeyLength = bytTemp.Length; 
209         
210 if (sTemp.Length > KeyLength) 
211             sTemp = sTemp.Substring(0, 
212 KeyLength); 
213         else if (sTemp.Length < KeyLength) 
214             
215 sTemp = sTemp.PadRight(KeyLength, ' '); 
216         return 
217 ASCIIEncoding.ASCII.GetBytes(sTemp); 
218     } 
219     /// <summary>    
220 
221     /// 得到初始向量IV    
222     /// </summary>    
223     /// 
224 <returns>初試向量IV</returns>    
225     private byte[] GetLegalIV() 
226 
227     { 
228         string sTemp = 
229 "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk"; 
230 
231         mobjCryptoService.GenerateIV(); 
232         byte[] bytTemp = 
233 mobjCryptoService.IV; 
234         int IVLength = bytTemp.Length; 
235         if 
236 (sTemp.Length > IVLength) 
237             sTemp = sTemp.Substring(0, 
238 IVLength); 
239         else if (sTemp.Length < IVLength) 
240             
241 sTemp = sTemp.PadRight(IVLength, ' '); 
242         return 
243 ASCIIEncoding.ASCII.GetBytes(sTemp); 
244     } 
245     /// <summary>    
246 
247     /// 加密方法    
248     /// </summary>    
249     /// <param 
250 name="Source">待加密的串</param>    
251     /// 
252 <returns>通過加密的串</returns>    
253     public string Encrypto(string 
254 Source) 
255     { 
256         byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source); 
257 
258         MemoryStream ms = new MemoryStream(); 
259         
260 mobjCryptoService.Key = GetLegalKey(); 
261         mobjCryptoService.IV = 
262 GetLegalIV(); 
263         ICryptoTransform encrypto = 
264 mobjCryptoService.CreateEncryptor(); 
265         CryptoStream cs = new 
266 CryptoStream(ms, encrypto, CryptoStreamMode.Write); 
267         cs.Write(bytIn, 
268 0, bytIn.Length); 
269         cs.FlushFinalBlock(); 
270         ms.Close(); 
271 
272         byte[] bytOut = ms.ToArray(); 
273         return 
274 Convert.ToBase64String(bytOut); 
275     } 
276     /// <summary>    
277     
278 /// 解密方法    
279     /// </summary>    
280     /// <param 
281 name="Source">待解密的串</param>    
282     /// 
283 <returns>通過解密的串</returns>    
284     public string Decrypto(string 
285 Source) 
286     { 
287         byte[] bytIn = Convert.FromBase64String(Source); 
288 
289         MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length); 
290 
291         mobjCryptoService.Key = GetLegalKey(); 
292         
293 mobjCryptoService.IV = GetLegalIV(); 
294         ICryptoTransform encrypto = 
295 mobjCryptoService.CreateDecryptor(); 
296         CryptoStream cs = new 
297 CryptoStream(ms, encrypto, CryptoStreamMode.Read); 
298         StreamReader sr = 
299 new StreamReader(cs); 
300         return sr.ReadToEnd(); 
301     
302 }
303 
304 方法五:
305     using System.IO; 
306     using 
307 System.Security.Cryptography; 
308     using System.Text; 
309      
310     ... 
311 
312      
313     //默認密鑰向量 
314     private static byte[] Keys = { 0x12, 0x34, 
315 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; 
316     /// <summary> 
317     /// 
318 DES加密字符串 
319     /// </summary> 
320     /// <param 
321 name="encryptString">待加密的字符串</param> 
322     /// <param 
323 name="encryptKey">加密密鑰,要求爲8位</param> 
324     /// 
325 <returns>加密成功返回加密後的字符串,失敗返回源串</returns> 
326     public static string 
327 EncryptDES(string encryptString, string encryptKey) 
328     { 
329         
330 try
331         { 
332             byte[] rgbKey = 
333 Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8)); 
334             byte[] rgbIV 
335 = Keys; 
336             byte[] inputByteArray = 
337 Encoding.UTF8.GetBytes(encryptString); 
338             DESCryptoServiceProvider 
339 dCSP = new DESCryptoServiceProvider(); 
340             MemoryStream mStream = 
341 new MemoryStream(); 
342             CryptoStream cStream = new 
343 CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), 
344 CryptoStreamMode.Write); 
345             cStream.Write(inputByteArray, 0, 
346 inputByteArray.Length); 
347             cStream.FlushFinalBlock(); 
348 
349             return Convert.ToBase64String(mStream.ToArray()); 
350         } 
351 
352         catch
353         { 
354             return encryptString; 
355         
356 } 
357     } 
358      
359     /// <summary> 
360     /// DES解密字符串 
361     
362 /// </summary> 
363     /// <param 
364 name="decryptString">待解密的字符串</param> 
365     /// <param 
366 name="decryptKey">解密密鑰,要求爲8位,和加密密鑰相同</param> 
367     /// 
368 <returns>解密成功返回解密後的字符串,失敗返源串</returns> 
369     public static string 
370 DecryptDES(string decryptString, string decryptKey) 
371     { 
372         
373 try
374         { 
375             byte[] rgbKey = 
376 Encoding.UTF8.GetBytes(decryptKey); 
377             byte[] rgbIV = Keys; 
378 
379             byte[] inputByteArray = Convert.FromBase64String(decryptString); 
380 
381             DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider(); 
382 
383             MemoryStream mStream = new MemoryStream(); 
384             
385 CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, 
386 rgbIV), CryptoStreamMode.Write); 
387             cStream.Write(inputByteArray, 
388 0, inputByteArray.Length); 
389             cStream.FlushFinalBlock(); 
390 
391             return Encoding.UTF8.GetString(mStream.ToArray()); 
392         } 
393 
394         catch
395         { 
396             return decryptString; 
397         
398 } 
399     }
400 
401 方法六(文件加密):
402     using System.IO; 
403     using 
404 System.Security.Cryptography; 
405     using System.Text; 
406      
407     ... 
408 
409      
410     //加密文件 
411     private static void EncryptData(String inName, 
412 String outName, byte[] desKey, byte[] desIV) 
413     { 
414         //Create the 
415 file streams to handle the input and output files. 
416         FileStream fin = 
417 new FileStream(inName, FileMode.Open, FileAccess.Read); 
418         FileStream 
419 fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write); 
420 
421         fout.SetLength(0); 
422      
423         //Create variables to help 
424 with read and write. 
425         byte[] bin = new byte[100]; //This is 
426 intermediate storage for the encryption. 
427         long rdlen = 
428 0;              //This is the total number of bytes written. 
429         long 
430 totlen = fin.Length;    //This is the total length of the input file. 
431 
432         int len;                     //This is the number of bytes to be 
433 written at a time. 
434      
435         DES des = new 
436 DESCryptoServiceProvider(); 
437         CryptoStream encStream = new 
438 CryptoStream(fout, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write); 
439 
440      
441         //Read from the input file, then encrypt and write to the 
442 output file. 
443         while (rdlen < totlen) 
444         { 
445             
446 len = fin.Read(bin, 0, 100); 
447             encStream.Write(bin, 0, len); 
448 
449             rdlen = rdlen + len; 
450         } 
451      
452         
453 encStream.Close(); 
454         fout.Close(); 
455         fin.Close(); 
456     } 
457 
458      
459     //解密文件 
460     private static void DecryptData(String inName, 
461 String outName, byte[] desKey, byte[] desIV) 
462     { 
463         //Create the 
464 file streams to handle the input and output files. 
465         FileStream fin = 
466 new FileStream(inName, FileMode.Open, FileAccess.Read); 
467         FileStream 
468 fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write); 
469 
470         fout.SetLength(0); 
471      
472         //Create variables to help 
473 with read and write. 
474         byte[] bin = new byte[100]; //This is 
475 intermediate storage for the encryption. 
476         long rdlen = 
477 0;              //This is the total number of bytes written. 
478         long 
479 totlen = fin.Length;    //This is the total length of the input file. 
480 
481         int len;                     //This is the number of bytes to be 
482 written at a time. 
483      
484         DES des = new 
485 DESCryptoServiceProvider(); 
486         CryptoStream encStream = new 
487 CryptoStream(fout, des.CreateDecryptor(desKey, desIV), CryptoStreamMode.Write); 
488 
489      
490         //Read from the input file, then encrypt and write to the 
491 output file. 
492         while (rdlen < totlen) 
493         { 
494             
495 len = fin.Read(bin, 0, 100); 
496             encStream.Write(bin, 0, len); 
497 
498             rdlen = rdlen + len; 
499         } 
500      
501         
502 encStream.Close(); 
503         fout.Close(); 
504         fin.Close(); 
505 
506 
507 }
508 
509 using System;
510 using 
511 System.Security.Cryptography;//這個是處理文字編碼的前提
512 using System.Text;
513 using 
514 System.IO;
515 /// <summary>
516 /// DES加密方法
517 /// </summary>
518 /// 
519 <param name="strPlain">明文</param>
520 /// <param 
521 name="strDESKey">密鑰</param>
522 /// <param 
523 name="strDESIV">向量</param>
524 /// 
525 <returns>密文</returns>
526 public string DESEncrypt(string 
527 strPlain,string strDESKey,string strDESIV)
528 {
529 //把密鑰轉換成字節數組
530 byte[] 
531 bytesDESKey=ASCIIEncoding.ASCII.GetBytes(strDESKey);
532 //把向量轉換成字節數組
533 byte[] 
534 bytesDESIV=ASCIIEncoding.ASCII.GetBytes(strDESIV);
535 //聲明1個新的DES對象
536 DESCryptoServiceProvider 
537 desEncrypt=new DESCryptoServiceProvider();
538 //開闢一塊內存流
539 MemoryStream 
540 msEncrypt=new MemoryStream();
541 //把內存流對象包裝成加密流對象
542 CryptoStream 
543 csEncrypt=new 
544 CryptoStream(msEncrypt,desEncrypt.CreateEncryptor(bytesDESKey,bytesDESIV),CryptoStreamMode.Write);
545 //把加密流對象包裝成寫入流對象
546 StreamWriter 
547 swEncrypt=new 
548 StreamWriter(csEncrypt);
549 //寫入流對象寫入明文
550 swEncrypt.WriteLine(strPlain);
551 //寫入流關閉
552 swEncrypt.Close();
553 //加密流關閉
554 csEncrypt.Close();
555 //把內存流轉換成字節數組,內存流如今已是密文了
556 byte[] 
557 bytesCipher=msEncrypt.ToArray();
558 //內存流關閉
559 msEncrypt.Close();
560 //把密文字節數組轉換爲字符串,並返回
561 return 
562 UnicodeEncoding.Unicode.GetString(bytesCipher);
563 }
564 
565 
566 
567 
568 /// 
569 <summary>
570 /// DES解密方法
571 /// </summary>
572 /// <param 
573 name="strCipher">密文</param>
574 /// <param 
575 name="strDESKey">密鑰</param>
576 /// <param 
577 name="strDESIV">向量</param>
578 /// 
579 <returns>明文</returns>
580 public string DESDecrypt(string 
581 strCipher,string strDESKey,string strDESIV)
582 {
583 //把密鑰轉換成字節數組
584 byte[] 
585 bytesDESKey=ASCIIEncoding.ASCII.GetBytes(strDESKey);
586 //把向量轉換成字節數組
587 byte[] 
588 bytesDESIV=ASCIIEncoding.ASCII.GetBytes(strDESIV);
589 //把密文轉換成字節數組
590 byte[] 
591 bytesCipher=UnicodeEncoding.Unicode.GetBytes(strCipher);
592 //聲明1個新的DES對象
593 DESCryptoServiceProvider 
594 desDecrypt=new 
595 DESCryptoServiceProvider();
596 //開闢一塊內存流,並存放密文字節數組
597 MemoryStream 
598 msDecrypt=new MemoryStream(bytesCipher);
599 //把內存流對象包裝成解密流對象
600 CryptoStream 
601 csDecrypt=new 
602 CryptoStream(msDecrypt,desDecrypt.CreateDecryptor(bytesDESKey,bytesDESIV),CryptoStreamMode.Read);
603 //把解密流對象包裝成讀出流對象
604 StreamReader 
605 srDecrypt=new StreamReader(csDecrypt);
606 //明文=讀出流的讀出內容
607 string 
608 strPlainText=srDecrypt.ReadLine();
609 //讀出流關閉
610 srDecrypt.Close();
611 //解密流關閉
612 csDecrypt.Close();
613 //內存流關閉
614 msDecrypt.Close();
615 //返回明文
616 return 
617 strPlainText;
618 }
加密代碼彙總
相關文章
相關標籤/搜索