1. 程式人生 > >MD5加密、Base64和DES可加密解密

MD5加密、Base64和DES可加密解密

在做專案的過程中,一般都會涉及到使用者名稱和密碼。而這個時候密碼就需要加密一下,在這裡我就用Md5加密了。而很多人會有這個疑問,Md5可以線上轉換,是的,的確可以線上轉換,那麼你可以試試多加密幾次,這樣線上工具解密的難度就會大大增大。而Base64和DES可加密也可解密,上程式碼。

1、Md5加密。

複製程式碼
 1 static void Main(string[] args)
 2 {
 3     //在這裡我加密了3次。
 4     string str =Encrypt(Encrypt(Encrypt(Encrypt("123456"))));
 5     Console.WriteLine(str);
6 Console.ReadLine(); 7 } 8 9 /// <summary> 10 /// 此方法用於加密字串。 11 /// </summary> 12 /// <param name="str">加密的字串。</param> 13 /// <returns>返回加密後的字串。</returns> 14 public static string Encrypt(string str) 15 { 16 //建立Md5。 17 MD5 md5 = MD5.Create(); 18 //將要加密的字串轉換成位元組陣列。 19
byte[] buffer = UTF8Encoding.UTF8.GetBytes(str); 20 //通過ComputeHash函式進行加密,加密後返回的是位元組陣列。 21 byte[] result = md5.ComputeHash(buffer); 22 //宣告一個字串,用於儲存解析後的加密字串。 23 StringBuilder sb = new StringBuilder(); 24 //迴圈遍歷將位元組陣列轉換為字串。 25 foreach (byte item in result) 26 { 27 //累加。
28 sb.Append(item.ToString("X2")); 29 } 30 //返回加密後的字串。 31 return sb.ToString(); 32 }
複製程式碼

 2、Base64加密解密。

複製程式碼
 1 /// <summary>
 2 /// Base64加密。
 3 /// </summary>
 4 /// <param name="encryptStr">要加密的字串。</param>
 5 /// <returns>返回加密後的字串。</returns>
 6 public static string Base64Encrypt(string encryptStr)
 7 {
 8     //將字串轉換成位元組陣列。
 9     byte[] buffer = Encoding.UTF8.GetBytes(encryptStr);
10     //ToBase64String():將8位無符號整數的陣列轉換為其用 Base64 數字編碼的等效字串表示形式
11     return Convert.ToBase64String(buffer);
12 }
13 
14 /// <summary>
15 /// Base64解密。
16 /// </summary>
17 /// <param name="decryptStr">要解密的字串。</param>
18 /// <returns>將解密後的字串返回。</returns>
19 public static string Base64Decrypt(string decryptStr)
20 {
21     //將指定的字串(它將二進位制資料編碼為 Base64 數字)轉換為等效的 8 位無符號整數陣列。
22     byte[] buffer = Convert.FromBase64String(decryptStr);
23     //將加密後的資料解密後返回出去。
24     return Encoding.UTF8.GetString(buffer);
25 }    
複製程式碼

3、Des加密解密。

複製程式碼
 1 /// <summary>
 2 /// 加密值key,這個地方一定是4個字元的,如果寫成tes就會報錯,報錯內容為【指定鍵的大小對於此演算法無效】
 3 /// </summary>
 4 public static string encryptKey = "test";
 5 
 6 /// <summary>
 7 /// Des加密。
 8 /// </summary>
 9 /// <param name="encryptStr">要加密的字串。</param>
10 /// <returns>返回加密後的字串。</returns>
11 public static string DesEncrypt(string encryptStr)
12 {
13     using (DESCryptoServiceProvider desCSP = new DESCryptoServiceProvider())
14     {
15         byte[] keyByte = Encoding.Unicode.GetBytes(encryptKey);
16         //定義位元組陣列,用於儲存要解密的字串。
17         byte[] dataByte = Encoding.Unicode.GetBytes(encryptStr);
18         //例項化一個流。
19         using (MemoryStream memoryStream = new MemoryStream())
20         {
21             //使用記憶體流例項化加密物件。
22             using (CryptoStream cs = new CryptoStream(memoryStream, desCSP.CreateEncryptor(keyByte, keyByte), CryptoStreamMode.Write))
23             {
24                 //加密流中寫入資料。
25                 cs.Write(dataByte, 0, dataByte.Length);
26             }
27             //返回加密後的資料。
28             return Convert.ToBase64String(memoryStream.ToArray());
29         }    
30     }        
31 }    
32     
33 /// <summary>
34 /// Des解密。
35 /// </summary>
36 /// <param name="decryptStr">要解密的字串。</param>
37 /// <returns>返回解密後的字串。</returns>
38 public static string DesDecrypt(string decryptStr)
39 {
40     using (DESCryptoServiceProvider desCSP = new DESCryptoServiceProvider())
41     {
42         //定義位元組陣列,用來儲存金鑰。
43         byte[] keyByte = Encoding.Unicode.GetBytes(encryptKey);
44         //定義位元組陣列,用來儲存要解密的字串。
45         byte[] dataByte = Convert.FromBase64String(decryptStr);
46         //例項化一個流。
47         using (MemoryStream memoryStream = new MemoryStream())
48         {
49             //使用記憶體流例項化加密物件。
50             using (CryptoStream cs = new CryptoStream(memoryStream, desCSP.CreateDecryptor(keyByte, keyByte), CryptoStreamMode.Write))
51             {
52                 //加密流中寫入資料。
53                 cs.Write(dataByte, 0, dataByte.Length);
54             }
55             //返回解密後的字串。
56             return Encoding.Unicode.GetString(memoryStream.ToArray()); 
57         }
58     }
59 } 
複製程式碼

End。