C# DES加密解密演算法
#region DES Class<br />/// <summary><br />/// ClassName: DES 加密類<br />/// DES加密、解密類庫,字串加密結果使用BASE64編碼返回,支援檔案的加密和解密<br />/// Time:2010-04-30<br />/// Auther:Hyey.wl<br />/// DES 的摘要說明。<br />/// </summary><br />public sealed class DES<br />{<br /> /// <summary><br /> /// myiv is iv<br /> /// </summary><br /> string myiv = "Hyey20100430";<br /> /// <summary><br /> /// mykey is key<br /> /// </summary><br /> string mykey = "HyeyWl30";</p><p> /// <summary><br /> /// DES加密位移量<br /> /// 必須是>=8位長的字串<br /> /// </summary><br /> public string IV<br /> {<br /> get { return myiv; }<br /> set { myiv = value; }<br /> }</p><p> /// <summary><br /> /// DES加密的私密金鑰<br /> /// 必須是8位長的字串<br /> /// </summary><br /> public string Key<br /> {<br /> get { return mykey; }<br /> set { mykey = value; }<br /> }</p><p> public DES()<br /> {<br /> //<br /> // TODO: 在此處添加建構函式邏輯<br /> //<br /> }</p><p> /// <summary><br /> /// 對字串進行DES加密<br /> /// Encrypts the specified sourcestring.<br /> /// </summary><br /> /// <param name="sourcestring">The sourcestring.待加密的字串</param><br /> /// <returns>加密後的BASE64編碼的字串</returns><br /> public string Encrypt(string sourceString)<br /> {<br /> byte[] btKey = Encoding.Default.GetBytes(mykey);<br /> byte[] btIV = Encoding.Default.GetBytes(myiv);<br /> DESCryptoServiceProvider des = new DESCryptoServiceProvider();<br /> using (MemoryStream ms = new MemoryStream())<br /> {<br /> byte[] inData = Encoding.Default.GetBytes(sourceString);<br /> try<br /> {<br /> using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))<br /> {<br /> cs.Write(inData, 0, inData.Length);<br /> cs.FlushFinalBlock();<br /> }<br /> return Convert.ToBase64String(ms.ToArray());<br /> }<br /> catch<br /> {<br /> throw;<br /> }<br /> }<br /> }</p><p> /// <summary><br /> /// Decrypts the specified encrypted string.<br /> /// 對DES加密後的字串進行解密<br /> /// </summary><br /> /// <param name="encryptedString">The encrypted string.待解密的字串</param><br /> /// <returns>解密後的字串</returns><br /> public string Decrypt(string encryptedString)<br /> {<br /> byte[] btKey = Encoding.Default.GetBytes(mykey);<br /> byte[] btIV = Encoding.Default.GetBytes(myiv);<br /> DESCryptoServiceProvider des = new DESCryptoServiceProvider();</p><p> using (MemoryStream ms = new MemoryStream())<br /> {<br /> byte[] inData = Convert.FromBase64String(encryptedString);<br /> try<br /> {<br /> using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))<br /> {<br /> cs.Write(inData, 0, inData.Length);<br /> cs.FlushFinalBlock();<br /> }<br /> return Encoding.Default.GetString(ms.ToArray());<br /> }<br /> catch<br /> {<br /> throw;<br /> }<br /> }</p><p> }</p><p> /// <summary><br /> /// Encrypts the file.<br /> /// 對檔案內容進行DES加密<br /> /// </summary><br /> /// <param name="sourceFile">The source file.待加密的檔案絕對路徑</param><br /> /// <param name="destFile">The dest file.加密後的檔案儲存的絕對路徑</param><br /> public void EncryptFile(string sourceFile, string destFile)<br /> {<br /> if (!File.Exists(sourceFile)) throw new FileNotFoundException("指定的檔案路徑不存在!", sourceFile);</p><p> byte[] btKey = Encoding.Default.GetBytes(mykey);<br /> byte[] btIV = Encoding.Default.GetBytes(myiv);<br /> DESCryptoServiceProvider des = new DESCryptoServiceProvider();<br /> byte[] btFile = File.ReadAllBytes(sourceFile);</p><p> using (FileStream fs = new FileStream(destFile, FileMode.Create, FileAccess.Write))<br /> {<br /> try<br /> {<br /> using (CryptoStream cs = new CryptoStream(fs, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))<br /> {<br /> cs.Write(btFile, 0, btFile.Length);<br /> cs.FlushFinalBlock();<br /> }<br /> }<br /> catch<br /> {<br /> throw;<br /> }</p><p> finally<br /> {<br /> fs.Close();<br /> }<br /> }<br /> }</p><p> /// <summary><br /> /// Encrypts the file.<br /> /// 對檔案內容進行DES加密,加密後覆蓋掉原來的檔案<br /> /// </summary><br /> /// <param name="sourceFile">The source file.待加密的檔案的絕對路徑</param><br /> public void EncryptFile(string sourceFile)<br /> {<br /> EncryptFile(sourceFile, sourceFile);<br /> }</p><p> /// <summary><br /> /// Decrypts the file.<br /> /// 對檔案內容進行DES解密<br /> /// </summary><br /> /// <param name="sourceFile">The source file.待解密的檔案絕對路徑</param><br /> /// <param name="destFile">The dest file.解密後的檔案儲存的絕對路徑</param><br /> public void DecryptFile(string sourceFile, string destFile)<br /> {<br /> if (!File.Exists(sourceFile)) throw new FileNotFoundException("指定的檔案路徑不存在!", sourceFile);<br /> byte[] btKey = Encoding.Default.GetBytes(mykey);<br /> byte[] btIV = Encoding.Default.GetBytes(myiv);<br /> DESCryptoServiceProvider des = new DESCryptoServiceProvider();<br /> byte[] btFile = File.ReadAllBytes(sourceFile);</p><p> using (FileStream fs = new FileStream(destFile, FileMode.Create, FileAccess.Write))<br /> {<br /> try<br /> {<br /> using (CryptoStream cs = new CryptoStream(fs, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))<br /> {<br /> cs.Write(btFile, 0, btFile.Length);<br /> cs.FlushFinalBlock();<br /> }<br /> }<br /> catch<br /> {<br /> throw;<br /> }<br /> finally<br /> {<br /> fs.Close();<br /> }<br /> }<br /> }</p><p> /// <summary><br /> /// Decrypts the file.<br /> /// 對檔案內容進行DES解密,加密後覆蓋掉原來的檔案.<br /> /// </summary><br /> /// <param name="sourceFile">The source file.待解密的檔案的絕對路徑.</param><br /> public void DecryptFile(string sourceFile)<br /> {<br /> DecryptFile(sourceFile, sourceFile);<br /> }<br />}<br />#endregion
源:http://www.cnblogs.com/Leo_wl/archive/2010/04/30/1725168.html