MD5加密、Base64和DES可加密解密
阿新 • • 發佈:2019-02-12
在做專案的過程中,一般都會涉及到使用者名稱和密碼。而這個時候密碼就需要加密一下,在這裡我就用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 //將要加密的字串轉換成位元組陣列。 19byte[] 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。