這是什麼加密?能夠吃嗎?算法
今天的給你們分享的應該是BASE64、MD5、AES算法共同實現的吧,不過加密後體積會變大些,他不能夠吃ide
加密的流程大概就是醬紫的:測試
原文→BASE64編碼編碼
→AES加密 獲得密文加密
密碼→MD5加密spa
解密的流程大概是醬紫:code
密碼 → MD5加密orm
→ BASE64解密 獲得原文blog
密文 → AES解密教程
按照上面的流程,首先須要對原文進行BASE64編碼:
var bt = Encoding.你的編碼格式.GetBytes(原文); var base64Str = Convert.ToBase64String(bt);
接下來就到對密碼進行MD5加密,由於AES加密須要32位密碼,使用MD5正好能夠知足這一條件。
1 public class MD5 2 { 3 public static byte[] EncryptToMD5(string str) 4 { 5 MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); 6 byte[] str1 = System.Text.Encoding.UTF8.GetBytes(str); 7 byte[] str2 = md5.ComputeHash(str1, 0, str1.Length); 8 md5.Clear(); 9 (md5 as IDisposable).Dispose(); 10 return str2; 11 } 12 public static string EncryptToMD5string(string str) 13 { 14 byte[] bytHash = EncryptToMD5(str); 15 string sTemp = ""; 16 for (int i = 0; i < bytHash.Length; i++) 17 { 18 sTemp += bytHash[i].ToString("X").PadLeft(2, '0'); 19 } 20 return sTemp.ToLower(); 21 } 22 }
調用方法:
1 MD5.EncryptToMD5string("你的密碼");
接下來就是使用他們進行AES加密:(使用ECB和PKCS7)
1 private string TextEncrypt(string encryptStr, string key) 2 { 3 byte[] keyArray = Encoding.UTF8.GetBytes(key); 4 byte[] toEncryptArray = Encoding.UTF8.GetBytes(encryptStr); 5 RijndaelManaged rDel = new RijndaelManaged(); 6 rDel.Key = keyArray; 7 rDel.Mode = CipherMode.ECB; 8 rDel.Padding = PaddingMode.PKCS7; 9 ICryptoTransform cTransform = rDel.CreateEncryptor(); 10 byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); 11 return Convert.ToBase64String(resultArray, 0, resultArray.Length); 12 }
使用方法:
1 var str = TextEncrypt("原文BASE64編碼後","密碼MD5加密後");
獲得的str就是加密後的密文,這樣就完成了加密的工做。
既然有加密,就要有解密,接下來就是解密工做啦
按照流程,首先須要對密碼進行MD5加密,關於MD5加密的方法在上面已經說明,此處就再也不多說啦。
接下來是對密文進行AES解密:
1 private string TextDecrypt(string decryptStr, string key) 2 { 3 byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key); 4 byte[] toEncryptArray = Convert.FromBase64String(decryptStr); 5 RijndaelManaged rDel = new RijndaelManaged(); 6 rDel.Key = keyArray; 7 rDel.Mode = CipherMode.ECB; 8 rDel.Padding = PaddingMode.PKCS7; 9 ICryptoTransform cTransform = rDel.CreateDecryptor(); 10 byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); 11 return UTF8Encoding.UTF8.GetString(resultArray); 12 }
使用方法:
1 TextDecrypt("密文","密碼MD5處理後")
最後要對處理後的文本進行BASE64解密:
var str = Convert.FromBase64String(處理後的文本);
var sd = Encoding.你的編碼格式.GetString(str);
最終獲得的str就是咱們解密後的原文惹(QωQ)
完整代碼:
1 class Program 2 { 3 public static string TextEncrypt(string encryptStr, string key) 4 { 5 byte[] keyArray = Encoding.UTF8.GetBytes(key); 6 byte[] toEncryptArray = Encoding.UTF8.GetBytes(encryptStr); 7 RijndaelManaged rDel = new RijndaelManaged(); 8 rDel.Key = keyArray; 9 rDel.Mode = CipherMode.ECB; 10 rDel.Padding = PaddingMode.PKCS7; 11 ICryptoTransform cTransform = rDel.CreateEncryptor(); 12 byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); 13 return Convert.ToBase64String(resultArray, 0, resultArray.Length); 14 } 15 public static string TextDecrypt(string decryptStr, string key) 16 { 17 byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key); 18 byte[] toEncryptArray = Convert.FromBase64String(decryptStr); 19 RijndaelManaged rDel = new RijndaelManaged(); 20 rDel.Key = keyArray; 21 rDel.Mode = CipherMode.ECB; 22 rDel.Padding = PaddingMode.PKCS7; 23 ICryptoTransform cTransform = rDel.CreateDecryptor(); 24 byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); 25 return UTF8Encoding.UTF8.GetString(resultArray); 26 } 27 static void Main(string[] args) 28 { 29 Console.WriteLine("輸入加密的文本"); 30 var s = Console.ReadLine(); 31 var bt = Encoding.Default.GetBytes(s); 32 var base64Str = Convert.ToBase64String(bt); 33 Console.WriteLine("輸入加密的密碼"); 34 var psw = MD5.EncryptToMD5string(Console.ReadLine()); 35 var sw = TextEncrypt(base64Str, psw); 36 Console.WriteLine(sw); 37 Console.WriteLine("加密完成"); 38 Console.ReadLine(); 39 Console.WriteLine("正在解密"); 40 var td = TextDecrypt(sw, psw); 41 var str = Convert.FromBase64String(td); 42 var sd = Encoding.Default.GetString(str); 43 Console.WriteLine(sd); 44 Console.ReadLine(); 45 46 } 47 } 48 public class MD5 49 { 50 public static byte[] EncryptToMD5(string str) 51 { 52 MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); 53 byte[] str1 = System.Text.Encoding.UTF8.GetBytes(str); 54 byte[] str2 = md5.ComputeHash(str1, 0, str1.Length); 55 md5.Clear(); 56 (md5 as IDisposable).Dispose(); 57 return str2; 58 } 59 public static string EncryptToMD5string(string str) 60 { 61 byte[] bytHash = EncryptToMD5(str); 62 string sTemp = ""; 63 for (int i = 0; i < bytHash.Length; i++) 64 { 65 sTemp += bytHash[i].ToString("X").PadLeft(2, '0'); 66 } 67 return sTemp.ToLower(); 68 } 69 }
測試成功!o(* ̄▽ ̄*)ブ
此次的教程到這裏就結束啦,歡迎你們關注我哦!