DES加密解密与AES加密解密
生活随笔
收集整理的這篇文章主要介紹了
DES加密解密与AES加密解密
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
×
目錄
[1]AES加密算法和DES加密算法的效率比較 [2]AES和DES加密解密代碼? ? ? 隨著開發時間的變長,當初認為比較難的東西,現在漸漸也就變的不那么難了!特別對于一些經常很少使用的類,時間長了之后漸漸就陌生了。所以在這里寫一些日后可能會用到的加密與解密。
?
一.AES加密算法和DES加密算法的效率比較:
?下面是在網上看到的一段關于“ES加密程序和一個AES加密程序,比較兩個程序進行大文件加密的效率”:
- 實驗步驟:
- 實驗結果:
- 結果分析:
當文件很小時,兩個程序加密的時間差不多。但是當文件變大時,DES對文件的加密效率低于AES對文件的加密效率。可見AES具有比DES更好的安全性,效率!
二.AES和DES加密解密代碼:
?
========DES加密======== /// <summary>/// DES加密/// </summary>/// <param name="pToEncrypt">要加密的內容</param>/// <param name="sKey">密鑰</param>/// <param name="StrMs">輸出加密后的字符串</param>/// <returns>加密后的byte數組</returns>public static byte[] Encrypt(string pToEncrypt, string sKey, out string StrMs){//訪問數據加密標準(DES)算法的加密服務提供程序 (CSP) 版本的包裝對象DESCryptoServiceProvider des = new DESCryptoServiceProvider();des.Mode = CipherMode.ECB;des.Padding = PaddingMode.PKCS7;des.Key = Encoding.UTF8.GetBytes(sKey); //建立加密對象的密鑰和偏移量//des.IV = Encoding.UTF8.GetBytes(sKey); // 如果是用ECB模式,則IV不管是什么都不會影響加密/解密的結果byte[] inputByteArray = Encoding.UTF8.GetBytes(pToEncrypt);//把字符串放到byte數組中 MemoryStream ms = new MemoryStream();//創建其支持存儲區為內存的流 CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);//定義將數據流鏈接到加密轉換的流cs.Write(inputByteArray, 0, inputByteArray.Length);//上面已經完成了把加密后的結果放到內存中去 cs.FlushFinalBlock(); StringBuilder ret = new StringBuilder();foreach (byte b in ms.ToArray()){ret.AppendFormat("{0:X2}", b);}StrMs = ret.ToString();return ms.ToArray();}/// <summary>/// DEs 解密過程/// </summary>/// <param name="pToDecrypt">被解密的字符串</param>/// <param name="sKey">密鑰(只支持8個字節的密鑰,同前面的加密密鑰相同)</param>/// <returns>返回被解密的字符串</returns>public static string Decrypt(string pToDecrypt, string sKey){DESCryptoServiceProvider des = new DESCryptoServiceProvider();des.Mode = CipherMode.ECB;des.Padding = PaddingMode.PKCS7;byte[] inputByteArray = new byte[pToDecrypt.Length / 2];for (int x = 0; x < pToDecrypt.Length / 2; x++){int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));inputByteArray[x] = (byte)i;}des.Key = Encoding.UTF8.GetBytes(sKey); //建立加密對象的密鑰和偏移量,此值重要,不能修改//des.IV = Encoding.UTF8.GetBytes(sKey);// 如果是用ECB模式,則IV不管是什么都不會影響加密/解密的結果MemoryStream ms = new MemoryStream();CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);cs.Write(inputByteArray, 0, inputByteArray.Length);cs.FlushFinalBlock();return System.Text.Encoding.UTF8.GetString(ms.ToArray());}?
/// <summary>/// AES加密/// </summary>/// <param name="toEncrypt">要加密的內容</param>/// <param name="strKey">密鑰(16或者32位)</param>/// <returns>Base64轉碼后的密文</returns>public static string Encrypt(string toEncrypt, string strKey){byte[] keyArray = UTF8Encoding.UTF8.GetBytes(strKey);byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);RijndaelManaged rDel = new RijndaelManaged();//using System.Security.Cryptography; rDel.Key = keyArray;rDel.Mode = CipherMode.ECB;//using System.Security.Cryptography; rDel.Padding = PaddingMode.PKCS7;//using System.Security.Cryptography; ICryptoTransform cTransform = rDel.CreateEncryptor();//using System.Security.Cryptography; byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);return Convert.ToBase64String(resultArray, 0, resultArray.Length);}/// <summary>/// AES解密/// </summary>/// <param name="toDecrypt">要解密的內容</param>/// <param name="strKey">密鑰(16或者32位)</param>/// <returns>解密后的明文</returns>public static string Decrypt(string toDecrypt, string strKey){byte[] keyArray = UTF8Encoding.UTF8.GetBytes(strKey);byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);RijndaelManaged rDel = new RijndaelManaged();rDel.Key = keyArray;rDel.Mode = CipherMode.ECB;rDel.Padding = PaddingMode.PKCS7;ICryptoTransform cTransform = rDel.CreateDecryptor();byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);return UTF8Encoding.UTF8.GetString(resultArray);}#endregion AES解密 }?
轉載于:https://www.cnblogs.com/fengxuehuanlin/p/5266362.html
總結
以上是生活随笔為你收集整理的DES加密解密与AES加密解密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql group by 排序问题
- 下一篇: 五、线程管理————GCD