- using System;
- //這個是使用DES的基礎
- using System.Security.Cryptography;
- //這個是處理文字編碼的前提
- using System.Text;
- //以“流”的形式處理文字,也是微軟DES算法要求的
- using System.IO;
- /// <summary>
- /// DES加密方法
- /// </summary>
- /// <param name="strPlain">明文</param>
- /// <param name="strDESKey">密鑰</param>
- /// <param name="strDESIV">向量</param>
- /// <returns>密文</returns>
- public string DESEncrypt(string strPlain,string strDESKey,string strDESIV)
- {
- //把密鑰轉換成字節數組
- byte[] bytesDESKey=ASCIIEncoding.ASCII.GetBytes(strDESKey);
- //把向量轉換成字節數組
- byte[] bytesDESIV=ASCIIEncoding.ASCII.GetBytes(strDESIV);
- //聲明1個新的DES對象
- DESCryptoServiceProvider desEncrypt=new DESCryptoServiceProvider();
- //開闢一塊內存流
- MemoryStream msEncrypt=new MemoryStream();
- //把內存流對象包裝成加密流對象
- CryptoStream csEncrypt=new CryptoStream(msEncrypt,desEncrypt.CreateEncryptor(bytesDESKey,bytesDESIV),CryptoStreamMode.Write);
- //把加密流對象包裝成寫入流對象
- StreamWriter swEncrypt=new StreamWriter(csEncrypt);
- //寫入流對象寫入明文
- swEncrypt.WriteLine(strPlain);
- //寫入流關閉
- swEncrypt.Close();
- //加密流關閉
- csEncrypt.Close();
- //把內存流轉換成字節數組,內存流現在已經是密文了
- byte[] bytesCipher=msEncrypt.ToArray();
- //內存流關閉
- msEncrypt.Close();
- //把密文字節數組轉換爲字符串,並返回
- return UnicodeEncoding.Unicode.GetString(bytesCipher);
- }
- /// <summary>
- /// DES解密方法
- /// </summary>
- /// <param name="strCipher">密文</param>
- /// <param name="strDESKey">密鑰</param>
- /// <param name="strDESIV">向量</param>
- /// <returns>明文</returns>
- public string DESDecrypt(string strCipher,string strDESKey,string strDESIV)
- {
- //把密鑰轉換成字節數組
- byte[] bytesDESKey=ASCIIEncoding.ASCII.GetBytes(strDESKey);
- //把向量轉換成字節數組
- byte[] bytesDESIV=ASCIIEncoding.ASCII.GetBytes(strDESIV);
- //把密文轉換成字節數組
- byte[] bytesCipher=UnicodeEncoding.Unicode.GetBytes(strCipher);
- //聲明1個新的DES對象
- DESCryptoServiceProvider desDecrypt=new DESCryptoServiceProvider();
- //開闢一塊內存流,並存放密文字節數組
- MemoryStream msDecrypt=new MemoryStream(bytesCipher);
- //把內存流對象包裝成解密流對象
- CryptoStream csDecrypt=new CryptoStream(msDecrypt,desDecrypt.CreateDecryptor(bytesDESKey,bytesDESIV),CryptoStreamMode.Read);
- //把解密流對象包裝成讀出流對象
- StreamReader srDecrypt=new StreamReader(csDecrypt);
- //明文=讀出流的讀出內容
- string strPlainText=srDecrypt.ReadLine();
- //讀出流關閉
- srDecrypt.Close();
- //解密流關閉
- csDecrypt.Close();
- //內存流關閉
- msDecrypt.Close();
- //返回明文
- return strPlainText;
- }