.NET C# DES入門淺析
C# DES加密應(yīng)該是最基礎(chǔ)的加密算法,為了搞清楚它在.NET C#里面的用法,我費(fèi)了不少功夫,希望有心人能看到。C# DES一共就有4個(gè)參數(shù)參與運(yùn)作:明文、密文、密鑰、向量。為了初學(xué)者容易理解,可以把4個(gè)參數(shù)的關(guān)系寫成:密文=明文+密鑰+向量;明文=密文-密鑰-向量。為什么要向量這個(gè)參數(shù)呢?因?yàn)槿绻幸黄恼?,有幾個(gè)詞重復(fù),那么這個(gè)詞加上密鑰形成的密文,仍然會(huì)重復(fù),這給破解者有機(jī)可乘,破解者可以根據(jù)重復(fù)的內(nèi)容,猜出是什么詞,然而一旦猜對(duì)這個(gè)詞,那么,他就能算出密鑰,整篇文章就被破解了!加上向量這個(gè)參數(shù)以后,每塊文字段都會(huì)依次加上一段值,這樣,即使相同的文字,加密出來的密文,也是不一樣的,算法的安全性大大提高!
下面C# DES的應(yīng)用實(shí)例:
- using System;
 - //這個(gè)是使用DES的基礎(chǔ)
 - using System.Security.Cryptography;
 - //這個(gè)是處理文字編碼的前提
 - using System.Text;
 - //以“流”的形式處理文字,也是微軟DES算法要求的
 - using System.IO;
 - ///
 - /// C# DES加密方法
 - ///
 - /// 明文
 - /// 密鑰
 - /// 向量
 - ///
 密文 - public string DESEncrypt(string strPlain,
 - string strDESKey,string strDESIV)
 - {
 - //把密鑰轉(zhuǎn)換成字節(jié)數(shù)組
 - byte[] bytesDESKey=ASCIIEncoding.ASCII.GetBytes(strDESKey);
 - //把向量轉(zhuǎn)換成字節(jié)數(shù)組
 - byte[] bytesDESIV=ASCIIEncoding.ASCII.GetBytes(strDESIV);
 - //聲明1個(gè)新的DES對(duì)象
 - DESCryptoServiceProvider desEncrypt=new DESCryptoServiceProvider();
 - //開辟一塊內(nèi)存流
 - MemoryStream msEncrypt=new MemoryStream();
 - //把內(nèi)存流對(duì)象包裝成加密流對(duì)象
 - CryptoStream csEncrypt=new CryptoStream(
 - msEncrypt,desEncrypt.CreateEncryptor(
 - bytesDESKey,bytesDESIV),CryptoStreamMode.Write);
 - //把加密流對(duì)象包裝成寫入流對(duì)象
 - StreamWriter swEncrypt=new StreamWriter(csEncrypt);
 - //寫入流對(duì)象寫入明文
 - swEncrypt.WriteLine(strPlain);
 - //寫入流關(guān)閉
 - swEncrypt.Close();
 - //加密流關(guān)閉
 - csEncrypt.Close();
 - //把內(nèi)存流轉(zhuǎn)換成字節(jié)數(shù)組,內(nèi)存流現(xiàn)在已經(jīng)是密文了
 - byte[] bytesCipher=msEncrypt.ToArray();
 - //內(nèi)存流關(guān)閉
 - msEncrypt.Close();
 - //把密文字節(jié)數(shù)組轉(zhuǎn)換為字符串,并返回
 - return UnicodeEncoding.Unicode.GetString(bytesCipher);
 - }
 - ///
 - /// C# DES解密方法
 - ///
 - /// 密文
 - /// 密鑰
 - /// 向量
 - ///
 明文 - public string DESDecrypt(string strCipher,
 - string strDESKey,string strDESIV)
 - {
 - //把密鑰轉(zhuǎn)換成字節(jié)數(shù)組
 - byte[] bytesDESKey=ASCIIEncoding.ASCII.GetBytes(strDESKey);
 - //把向量轉(zhuǎn)換成字節(jié)數(shù)組
 - byte[] bytesDESIV=ASCIIEncoding.ASCII.GetBytes(strDESIV);
 - //把密文轉(zhuǎn)換成字節(jié)數(shù)組
 - byte[] bytesCipher=UnicodeEncoding.Unicode.GetBytes(strCipher);
 - //聲明1個(gè)新的DES對(duì)象
 - DESCryptoServiceProvider desDecrypt=new DESCryptoServiceProvider();
 - //開辟一塊內(nèi)存流,并存放密文字節(jié)數(shù)組
 - MemoryStream msDecrypt=new MemoryStream(bytesCipher);
 - //把內(nèi)存流對(duì)象包裝成解密流對(duì)象
 - CryptoStream csDecrypt=new CryptoStream(
 - msDecrypt,desDecrypt.CreateDecryptor(
 - bytesDESKey,bytesDESIV),CryptoStreamMode.Read);
 - //把解密流對(duì)象包裝成讀出流對(duì)象
 - StreamReader srDecrypt=new StreamReader(csDecrypt);
 - //明文=讀出流的讀出內(nèi)容
 - string strPlainText=srDecrypt.ReadLine();
 - //讀出流關(guān)閉
 - srDecrypt.Close();
 - //解密流關(guān)閉
 - csDecrypt.Close();
 - //內(nèi)存流關(guān)閉
 - msDecrypt.Close();
 - //返回明文
 - return strPlainText;
 - }
 
C# DES的應(yīng)用及入門的基本內(nèi)容就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)C# DES有所幫助。
【編輯推薦】















 
 
 
 
 
 
 