首先开一个控制台,然后封装DES加密的代码
1 /// <summary> 2 /// 将字符串进行DES加密 3 /// </summary> 4 /// <param name="encryString">准备要加密的字符串</param> 5 /// <param name="encryKey">加密字符串时的密钥</param> 6 /// <returns>返回一个加密后的字符串,若失败则返回原字符串</returns> 7 public static string strEncryEDS(string encryString,string encryKey) 8 { 9 try 10 { 11 byte[] rgbKey = Encoding.UTF8.GetBytes(encryKey.Substring(0, 8)); 12 byte[] rgbIV = Encoding.UTF8.GetBytes(encryKey.Substring(0, 8)); 13 byte[] inputByteArry = Encoding.UTF8.GetBytes(encryString); 14 DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 15 MemoryStream ms = new MemoryStream(); 16 CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(rgbKey, rgbIV) 17 , CryptoStreamMode.Write); 18 cs.Write(inputByteArry, 0, inputByteArry.Length); 19 cs.FlushFinalBlock(); 20 return Convert.ToBase64String(ms.ToArray()); 21 } 22 catch (Exception) 23 { 24 25 return encryString; 26 } 27 }
对已经加密的字符串进行解密
1 /// <summary> 2 /// DES解密 3 /// </summary> 4 /// <param name="pToDecrypt">加密后的字符串</param> 5 /// <param name="key">加密时的密钥</param> 6 /// <returns>返回一个解密后的字符串,若失败则返回原字符串并给出错误信息</returns> 7 public static string DESDecrtpt(string pToDecrypt,string key) 8 { 9 try 10 { 11 byte[] inputByteArray = Convert.FromBase64String(pToDecrypt); 12 DESCryptoServiceProvider desc = new DESCryptoServiceProvider(); 13 MemoryStream ms = new MemoryStream(); 14 desc.Key = Encoding.UTF8.GetBytes(key); 15 desc.IV = Encoding.UTF8.GetBytes(key); 16 CryptoStream cs = new CryptoStream(ms, desc.CreateDecryptor(), CryptoStreamMode.Write); 17 cs.Write(inputByteArray, 0, inputByteArray.Length); 18 cs.FlushFinalBlock(); 19 return Encoding.UTF8.GetString(ms.ToArray()); 20 } 21 catch (Exception ex) 22 { 23 24 return pToDecrypt+ex.Message; 25 }
在Main方法中进行测试,可随便写一个8位的字符串作为密钥,这里的密钥为12345678
static void Main(string[] args) { string result = strEncryEDS("如何提供加密算法", "12345678"); Console.WriteLine("加密"+result); string rr = DESDecrtpt(result, "12345678"); Console.WriteLine("解密" + rr); Console.Read(); }
其结果如下图所示: