C# 的 DES 加密和解密方法(轉)


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;
 }
}  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM