DES加密應該是最基礎的加密算法,為了搞清楚它在.NET C#里面的用法,我費了不少功夫,希望有心人能看到。
DES一共就有4個參數參與運作:明文、密文、密鑰、向量。為了初學者容易理解,可以把4個參數的關系寫成:密文=明文+密鑰+向量;明文=密文-密鑰-向量。為什么要向量這個參數呢?因為如果有一篇文章,有幾個詞重復,那么這個詞加上密鑰形成的密文,仍然會重復,這給破解者有機可乘,破解者可以根據重復的內容,猜出是什么詞,然而一旦猜對這個詞,那么,他就能算出密鑰,整篇文章就被破解了!加上向量這個參數以后,每塊文字段都會依次加上一段值,這樣,即使相同的文字,加密出來的密文,也是不一樣的,算法的安全性大大提高!
/// <summary> /// 進行DES加密。 /// </summary> /// <param name="pToEncrypt">要加密的字符串。</param> /// <param name="sKey">密鑰,且必須為8位。</param> /// <returns>以Base64格式返回的加密字符串。</returns> public string Encrypt(string pToEncrypt, string sKey) { using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) { byte[] inputByteArray = Encoding.UTF8.GetBytes(pToEncrypt); des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); System.IO.MemoryStream ms = new System.IO.MemoryStream(); using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)) { cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); cs.Close(); } string str = Convert.ToBase64String(ms.ToArray()); ms.Close(); return str; } } // <summary> // 進行DES解密。 // </summary> // <param name="pToDecrypt">要解密的以Base64</param> // <param name="sKey">密鑰,且必須為8位。</param> // <returns>已解密的字符串。</returns> public string Decrypt(string pToDecrypt, string sKey) { byte[] inputByteArray = Convert.FromBase64String(pToDecrypt); using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) { des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); System.IO.MemoryStream ms = new System.IO.MemoryStream(); using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write)) { cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); cs.Close(); } string str = Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); return str; } }