【 摘 要 】 以微軟基類庫(kù)為基礎(chǔ),設(shè)計(jì)和實(shí)現(xiàn)了一種基于MS.NET的RSA、DES加密應(yīng)用。信息安全愈來(lái)愈在經(jīng)濟(jì)社會(huì)中占有和發(fā)揮重要影響,信息管理專業(yè)中加密解密教學(xué)要貼近實(shí)際。這要求教學(xué)過(guò)程中須特別注意實(shí)踐動(dòng)手能力培養(yǎng),單純講解理論是不夠的。首先分析了RSA、DES的基本特征和可借用平臺(tái),然后基于.NET討論了實(shí)現(xiàn)的主要步驟和關(guān)鍵技術(shù),給出了核心部分代碼。經(jīng)驗(yàn)表明,只要引導(dǎo)科學(xué),學(xué)生能夠在高級(jí)平臺(tái)上,借助已有類庫(kù)撐握和實(shí)現(xiàn)對(duì)稱加密和RSA算法基本應(yīng)用。本文可供相關(guān)專業(yè)學(xué)習(xí)者在進(jìn)行加密學(xué)習(xí)時(shí)參考。
【 關(guān)鍵詞 】 微軟基類庫(kù);RSA;DES;教學(xué)
【 中圖分類號(hào) 】 TP393 【 文獻(xiàn)標(biāo)識(shí)碼 】 A
1 引言
加密解密是主動(dòng)信息安全中的重要內(nèi)容。加密解密部分不但需要對(duì)基本原理了解,更要能熟練撐握應(yīng)用現(xiàn)有編程平臺(tái)進(jìn)行加密解密程序的設(shè)計(jì)實(shí)現(xiàn)。但公開(kāi)文獻(xiàn)中對(duì)加密算法優(yōu)化改進(jìn)的多,對(duì)具體操作實(shí)現(xiàn)進(jìn)行討論的少,相關(guān)具有較高參考價(jià)值且操作性強(qiáng)的分析和研究更不多見(jiàn)。本文將選擇其中最為基礎(chǔ)和最重要的DES和RSA算法,探討實(shí)現(xiàn)方法與步驟。
由Riverst、Shami、Allandeman(RSA)所設(shè)計(jì)的基于大數(shù)分解困難的非對(duì)稱加密算法RSA,是當(dāng)今仍有較高可靠性且仍在廣泛使用的加密算法,也是非對(duì)稱算法中的重要代表。在非對(duì)稱加密算法中RSA是基礎(chǔ)性知識(shí),能應(yīng)用RSA進(jìn)行機(jī)密消息加密就能夠進(jìn)一步推廣到其他算法如DSA。對(duì)稱算法中,雖然DES(Data Encryption Standard)存在密鑰空間小、明文分段小,容易出現(xiàn)密文重復(fù)導(dǎo)致猜解等種種不足,似乎針以DES攻擊償試從來(lái)就斷過(guò),但其他如3DES算法核心思想是一致的。故當(dāng)前對(duì)稱算法中原理仍然以DES為主。
掌握DES、RSA后,就能夠舉一反三學(xué)習(xí)其他對(duì)稱、非對(duì)稱加密方法,因此建立DES、RSA算法及其應(yīng)用是必要的。本文首先分析了微軟.NET框架對(duì)加密解密部分的設(shè)計(jì)思路,介紹了實(shí)現(xiàn)DES和RSA的類庫(kù)原型,然后基于MS.NET類庫(kù)設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)分別應(yīng)用RSA和DES算法的加密解密程序。
2 加密算法和微軟加密基類庫(kù)
在Java和C#兩大主流開(kāi)發(fā)方向上,盡管C#因?yàn)楸仨氂玫轿④浕悗?kù)且屬商業(yè)化非開(kāi)源軟件,而受到諸多限制。但鑒于國(guó)內(nèi)Windows居于絕對(duì)統(tǒng)治地位,還是有相當(dāng)部分國(guó)內(nèi)軟件開(kāi)發(fā)是基于Windows平臺(tái),微軟加密服務(wù)的研究和用應(yīng)都不少。加密技術(shù)隨著互聯(lián)網(wǎng)和商業(yè)系統(tǒng)安全問(wèn)題的日益突出和國(guó)內(nèi)對(duì)系統(tǒng)安全重要性的認(rèn)識(shí),已經(jīng)逐步在各種實(shí)際應(yīng)用中開(kāi)展。在部分非計(jì)算機(jī)專業(yè)中學(xué)習(xí)加密解密,選C#在NET框架下開(kāi)發(fā)是可行的,也幾乎是唯一選項(xiàng)。私鑰加密算法使用單密鑰來(lái)加密和解密數(shù)據(jù)。私鑰加密算法的速度快(與公鑰算法相比),主要適用于對(duì)較大的數(shù)據(jù)流進(jìn)行加密轉(zhuǎn)換,在可加密數(shù)據(jù)容量方面基本沒(méi)有局限。
同一密鑰既能加密也同時(shí)能解密,密鑰本身的安全性及信任機(jī)制就非常重要。微軟在.NET加密命名空間中提供的私鑰加密算法主要有:AesManaged、DES、RC2、RijndaelManaged、TripleDES。其中DES是教材中講授內(nèi)容,AESmanaged、3DES與DES原理使用方法基本相同,掌握其中一種即能觸類旁通。
公鑰加密算法使用一個(gè)保密的私鑰和一個(gè)公開(kāi)的公鑰進(jìn)行加密解密數(shù)據(jù),因其密鑰不同又稱用非對(duì)稱密鑰算法。公鑰和私鑰相互對(duì)應(yīng),用公鑰加密的數(shù)據(jù)只能用私鑰解密,而用私鑰加密(簽名)的數(shù)據(jù)只能用公鑰解密(驗(yàn)證),二者能互換。加密命名空間提供的公鑰算法主要有:DSA、RSA、ECDiffieHellman,其中最有代表性的即RSA。RSA 允許同時(shí)進(jìn)行加密和簽名,但 DSA 只能用于簽名,Diffie-Hellman 只能用于生成密鑰。通常情況下,公鑰算法比私鑰算法具有更多的使用限制。
3 基本實(shí)現(xiàn)方法
3.1 DES實(shí)現(xiàn)關(guān)鍵技術(shù)
DES是IBM在20世紀(jì)70年應(yīng)美國(guó)家標(biāo)準(zhǔn)局征集設(shè)計(jì)出的56位短密鑰分塊對(duì)稱加密方法,效率高,實(shí)現(xiàn)容易。1976年被國(guó)家標(biāo)準(zhǔn)局采納,作為非機(jī)密領(lǐng)域數(shù)據(jù)加密。盡管現(xiàn)在看來(lái)DES密鑰空間太小,易遭受暴力攻擊,但DES開(kāi)創(chuàng)了依附密鑰保密而不是算法保密的時(shí)代,DES是第一種進(jìn)入社會(huì)生活的對(duì)稱加密算法。通常在學(xué)習(xí)對(duì)稱加密時(shí)都會(huì)以DES為對(duì)象詳細(xì)分析和學(xué)習(xí)其算法。
有關(guān)DES算法的流程眾多文獻(xiàn)中都有,這里不再?gòu)?fù)述。下面以微軟加密命名空間為基礎(chǔ),討論其實(shí)現(xiàn)過(guò)程。首先定義加密明文和密文的文件流,定義分塊加密時(shí)所用的暫存緩沖區(qū)。
FileStream FSin = new FileStream(inName, FileMode.Open, FileAccess.Read);
FileStream FSout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
FSout.SetLength(0); byte[] buff = new byte[100];
long FileInLen = FSin.Length; //明文總長(zhǎng).
int m; long enLen = 0; //已完成加密的明文長(zhǎng)度。
然后實(shí)例化DES加密類DES Crypto Service Provider,再將實(shí)參:加密輸現(xiàn)數(shù)據(jù)流,初始化參數(shù)等傳入加密對(duì)象。依次將明文分塊讀入已設(shè)計(jì)好的加密實(shí)例中,并將密文同步輸出到密文流,就能夠最終得到密文。
DES des = new DESCryptoServiceProvider();
CryptoStream encStream = new CryptoStream(FSout, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write);endprint
while (enLen < FileInLen )
{ m = FSin.Read(buff, 0, 100);
encStream.Write(buff, 0, len);enLen+=m;
}
DES的防猜測(cè)改進(jìn):關(guān)于desIV。前述DES加密中原型中,desKey為加密密鑰的二進(jìn)制, 但desIV在教材和DES算法中并未提及。這由DES算法本身的脆弱性及應(yīng)用特點(diǎn)決定。
DES算法因簡(jiǎn)單高效,主要用于大塊數(shù)據(jù)加密,加密過(guò)程明文被分割成均等大小的塊,每一塊單獨(dú)應(yīng)用DES算法。這樣,如果明文中存在重復(fù)塊,則輸出的密文流中也必然存在重復(fù)塊。如果明文是純文本,則由概率猜解推知原文的風(fēng)險(xiǎn)就非常之大,非法用戶獲知純文本塊結(jié)構(gòu)的任何信息,就可以利用該信息來(lái)解密已知的密碼文本塊,并有可能進(jìn)一步獲知密鑰。為了防范此風(fēng)險(xiǎn),實(shí)際應(yīng)用的DES算法中將前一個(gè)塊中的信息混合到下一個(gè)塊的加密過(guò)程中,這樣兩個(gè)相同的純文本塊的輸出就變得不同。因此,在第一塊加密時(shí),需指定初始向量,后續(xù)塊的“向量”由前一塊信息自動(dòng)生成。這個(gè)初始向量,就是desIV。
3.2 RSA實(shí)現(xiàn)關(guān)鍵技術(shù)
RSA是基于大素?cái)?shù)乘積分解難題而設(shè)計(jì)的加密方法,出于安全性需要素?cái)?shù)選擇不能太小,導(dǎo)致密鑰較長(zhǎng),故RSA加密效率低,主要用于密鑰傳遞等少量數(shù)據(jù)加密場(chǎng)合。通常,密文用DES加密,DES密鑰用RSA加密。以下為應(yīng)用RSA進(jìn)行字符串加密的源代碼,請(qǐng)注意RSA公鑰和私鑰的存貯方法。
UnicodeEncoding ByteConverter = new UnicodeEncoding();
byte[] dataToEncrypt = yteConverter.GetBytes(this.textBox_Ptext_RSA.Text .Trim ());
byte[] encryptedData,decryptedData;
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
encryptedData = RSAEncrypt(dataToEncrypt, RSA.ExportParameters(false), false);
this.textBox_Ctext_RSA.Text=BitConverter.ToString (encryptedData );
this.publickeyRSA = RSA.ExportParameters(false);
this.privatekeyRSA = RSA.ExportParameters(true);
StreamWriter mwriter = new StreamWriter("publickeyRSA.xml");
mwriter.Write(RSA .ToXmlString (false ));mwriter.Close();
mwriter = new StreamWriter("privatekeyRSA.xml");
mwriter.Write(RSA.ToXmlString(true ));mwriter.Close();
MessageBox.Show("已完成加密,PK和SK文件在當(dāng)前目錄下");
使用中,調(diào)用RSAEncrypt(dataToEncrypt, RSA.ExportParameters(false), false)即將二進(jìn)制明文dataToEncrypt讀入RSA加密生成密文存入緩沖區(qū)decryptedData。
RSA加密中公鑰私鑰通過(guò)RSAParameters結(jié)構(gòu)存貯
RSAParameters publickeyRSA, privatekeyRSA;//構(gòu)造RSAParameters結(jié)構(gòu)
publickeyRSA = RSA.ExportParameters(false);//false僅輸出公鑰;true則將公私鑰一起輸出。
此公私鑰可直接作為參數(shù)傳遞給解密函數(shù)。
如果要序列化成文本存貯,則須通過(guò)RSA .ToXmlString (false )方法:
StreamWriter mwriter= new Stream Writer ("publickeyRSA.xml")
mwriter.Write(RSA .ToXmlString (false ));
mwriter.Close();
由經(jīng)此,可在程序根目錄下,生成只包括公鑰的publickey。
4 程序原型與應(yīng)用
圖1為制作完成的“獅子山加密工具包”功能界面。實(shí)現(xiàn)了DES算法對(duì)字符串、文件的加密解密;RSA算法對(duì)字符串的加密解密;也提供MD5、SHA1文件摘要功能。程序請(qǐng)見(jiàn)投稿附件 “獅子山加密.rar”。
在實(shí)際教學(xué)過(guò)程中,通過(guò)課堂講解和教師的實(shí)際動(dòng)手示范,所在專業(yè)(信息管理與信息系統(tǒng))學(xué)生中已經(jīng)有少數(shù)能夠制作類似簡(jiǎn)單的加解密程序。大多數(shù)學(xué)生也通過(guò)此案例講解,加深了對(duì)教材知識(shí)點(diǎn)的理解,更重要是是增強(qiáng)了大多數(shù)同學(xué)制用和應(yīng)用DES、RSA程序的信心,這對(duì)于提高專業(yè)學(xué)生的動(dòng)手能力,培養(yǎng)學(xué)生專業(yè)興趣是很有裨益的。
5 結(jié)束語(yǔ)
本文以微軟.NET框架類庫(kù)為基礎(chǔ),討論并展示和實(shí)現(xiàn)了DES、RSA的具體方法。在信息安全教學(xué)過(guò)程中,以此操作練習(xí)為基礎(chǔ),能避免單純的理論講解,使信息管理專業(yè)學(xué)生能夠在教師示范下,利用高級(jí)編程平臺(tái)已有類庫(kù)將對(duì)稱加密和RSA算法進(jìn)行基本應(yīng)用,從而提高非計(jì)算機(jī)專業(yè)學(xué)生加密解密知識(shí)點(diǎn)的學(xué)習(xí)效果。
參考文獻(xiàn)
[1] 秦艷琳,吳曉平.基于.NET的TripleDES算法在網(wǎng)絡(luò)傳輸中的實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2010,27(11):53-55.
[2] 張基溫.信息安全與保密教程[M].北京:清華大學(xué)出版,2008.
[3] 陳開(kāi)顏,張鵬,鄧高明等.物理可觀測(cè)下DES的安全性研究[J].電子學(xué)報(bào),2009,37(11):2389-2395.
[4] 趙為強(qiáng),謝吉華 使用Microsoft Crypto API開(kāi)發(fā)基于USB電子鑰匙的CSP[J].2003,(11):33-34
[5] 熊小兵,高俊玲.微軟信息密碼系統(tǒng)及其應(yīng)用[J].計(jì)算機(jī)與信息技術(shù),2006,(7):73-76.
[6] 李顯峰,王淵,魏聰明.基于Microsoft .NET框架加密技術(shù)的SQL Server安全登錄機(jī)制研[J].電腦知識(shí)與技術(shù),2009,15(22):6151-6152.
[7] 盧開(kāi)澄.計(jì)算機(jī)密碼學(xué)[M].北京:清華出版社,2003.
作者簡(jiǎn)介:
章德賓(1975-),男,山東諸城人,博士,副教授;主要研究方向和關(guān)注領(lǐng)域:系統(tǒng)模擬、信息管理。endprint
while (enLen < FileInLen )
{ m = FSin.Read(buff, 0, 100);
encStream.Write(buff, 0, len);enLen+=m;
}
DES的防猜測(cè)改進(jìn):關(guān)于desIV。前述DES加密中原型中,desKey為加密密鑰的二進(jìn)制, 但desIV在教材和DES算法中并未提及。這由DES算法本身的脆弱性及應(yīng)用特點(diǎn)決定。
DES算法因簡(jiǎn)單高效,主要用于大塊數(shù)據(jù)加密,加密過(guò)程明文被分割成均等大小的塊,每一塊單獨(dú)應(yīng)用DES算法。這樣,如果明文中存在重復(fù)塊,則輸出的密文流中也必然存在重復(fù)塊。如果明文是純文本,則由概率猜解推知原文的風(fēng)險(xiǎn)就非常之大,非法用戶獲知純文本塊結(jié)構(gòu)的任何信息,就可以利用該信息來(lái)解密已知的密碼文本塊,并有可能進(jìn)一步獲知密鑰。為了防范此風(fēng)險(xiǎn),實(shí)際應(yīng)用的DES算法中將前一個(gè)塊中的信息混合到下一個(gè)塊的加密過(guò)程中,這樣兩個(gè)相同的純文本塊的輸出就變得不同。因此,在第一塊加密時(shí),需指定初始向量,后續(xù)塊的“向量”由前一塊信息自動(dòng)生成。這個(gè)初始向量,就是desIV。
3.2 RSA實(shí)現(xiàn)關(guān)鍵技術(shù)
RSA是基于大素?cái)?shù)乘積分解難題而設(shè)計(jì)的加密方法,出于安全性需要素?cái)?shù)選擇不能太小,導(dǎo)致密鑰較長(zhǎng),故RSA加密效率低,主要用于密鑰傳遞等少量數(shù)據(jù)加密場(chǎng)合。通常,密文用DES加密,DES密鑰用RSA加密。以下為應(yīng)用RSA進(jìn)行字符串加密的源代碼,請(qǐng)注意RSA公鑰和私鑰的存貯方法。
UnicodeEncoding ByteConverter = new UnicodeEncoding();
byte[] dataToEncrypt = yteConverter.GetBytes(this.textBox_Ptext_RSA.Text .Trim ());
byte[] encryptedData,decryptedData;
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
encryptedData = RSAEncrypt(dataToEncrypt, RSA.ExportParameters(false), false);
this.textBox_Ctext_RSA.Text=BitConverter.ToString (encryptedData );
this.publickeyRSA = RSA.ExportParameters(false);
this.privatekeyRSA = RSA.ExportParameters(true);
StreamWriter mwriter = new StreamWriter("publickeyRSA.xml");
mwriter.Write(RSA .ToXmlString (false ));mwriter.Close();
mwriter = new StreamWriter("privatekeyRSA.xml");
mwriter.Write(RSA.ToXmlString(true ));mwriter.Close();
MessageBox.Show("已完成加密,PK和SK文件在當(dāng)前目錄下");
使用中,調(diào)用RSAEncrypt(dataToEncrypt, RSA.ExportParameters(false), false)即將二進(jìn)制明文dataToEncrypt讀入RSA加密生成密文存入緩沖區(qū)decryptedData。
RSA加密中公鑰私鑰通過(guò)RSAParameters結(jié)構(gòu)存貯
RSAParameters publickeyRSA, privatekeyRSA;//構(gòu)造RSAParameters結(jié)構(gòu)
publickeyRSA = RSA.ExportParameters(false);//false僅輸出公鑰;true則將公私鑰一起輸出。
此公私鑰可直接作為參數(shù)傳遞給解密函數(shù)。
如果要序列化成文本存貯,則須通過(guò)RSA .ToXmlString (false )方法:
StreamWriter mwriter= new Stream Writer ("publickeyRSA.xml")
mwriter.Write(RSA .ToXmlString (false ));
mwriter.Close();
由經(jīng)此,可在程序根目錄下,生成只包括公鑰的publickey。
4 程序原型與應(yīng)用
圖1為制作完成的“獅子山加密工具包”功能界面。實(shí)現(xiàn)了DES算法對(duì)字符串、文件的加密解密;RSA算法對(duì)字符串的加密解密;也提供MD5、SHA1文件摘要功能。程序請(qǐng)見(jiàn)投稿附件 “獅子山加密.rar”。
在實(shí)際教學(xué)過(guò)程中,通過(guò)課堂講解和教師的實(shí)際動(dòng)手示范,所在專業(yè)(信息管理與信息系統(tǒng))學(xué)生中已經(jīng)有少數(shù)能夠制作類似簡(jiǎn)單的加解密程序。大多數(shù)學(xué)生也通過(guò)此案例講解,加深了對(duì)教材知識(shí)點(diǎn)的理解,更重要是是增強(qiáng)了大多數(shù)同學(xué)制用和應(yīng)用DES、RSA程序的信心,這對(duì)于提高專業(yè)學(xué)生的動(dòng)手能力,培養(yǎng)學(xué)生專業(yè)興趣是很有裨益的。
5 結(jié)束語(yǔ)
本文以微軟.NET框架類庫(kù)為基礎(chǔ),討論并展示和實(shí)現(xiàn)了DES、RSA的具體方法。在信息安全教學(xué)過(guò)程中,以此操作練習(xí)為基礎(chǔ),能避免單純的理論講解,使信息管理專業(yè)學(xué)生能夠在教師示范下,利用高級(jí)編程平臺(tái)已有類庫(kù)將對(duì)稱加密和RSA算法進(jìn)行基本應(yīng)用,從而提高非計(jì)算機(jī)專業(yè)學(xué)生加密解密知識(shí)點(diǎn)的學(xué)習(xí)效果。
參考文獻(xiàn)
[1] 秦艷琳,吳曉平.基于.NET的TripleDES算法在網(wǎng)絡(luò)傳輸中的實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2010,27(11):53-55.
[2] 張基溫.信息安全與保密教程[M].北京:清華大學(xué)出版,2008.
[3] 陳開(kāi)顏,張鵬,鄧高明等.物理可觀測(cè)下DES的安全性研究[J].電子學(xué)報(bào),2009,37(11):2389-2395.
[4] 趙為強(qiáng),謝吉華 使用Microsoft Crypto API開(kāi)發(fā)基于USB電子鑰匙的CSP[J].2003,(11):33-34
[5] 熊小兵,高俊玲.微軟信息密碼系統(tǒng)及其應(yīng)用[J].計(jì)算機(jī)與信息技術(shù),2006,(7):73-76.
[6] 李顯峰,王淵,魏聰明.基于Microsoft .NET框架加密技術(shù)的SQL Server安全登錄機(jī)制研[J].電腦知識(shí)與技術(shù),2009,15(22):6151-6152.
[7] 盧開(kāi)澄.計(jì)算機(jī)密碼學(xué)[M].北京:清華出版社,2003.
作者簡(jiǎn)介:
章德賓(1975-),男,山東諸城人,博士,副教授;主要研究方向和關(guān)注領(lǐng)域:系統(tǒng)模擬、信息管理。endprint
while (enLen < FileInLen )
{ m = FSin.Read(buff, 0, 100);
encStream.Write(buff, 0, len);enLen+=m;
}
DES的防猜測(cè)改進(jìn):關(guān)于desIV。前述DES加密中原型中,desKey為加密密鑰的二進(jìn)制, 但desIV在教材和DES算法中并未提及。這由DES算法本身的脆弱性及應(yīng)用特點(diǎn)決定。
DES算法因簡(jiǎn)單高效,主要用于大塊數(shù)據(jù)加密,加密過(guò)程明文被分割成均等大小的塊,每一塊單獨(dú)應(yīng)用DES算法。這樣,如果明文中存在重復(fù)塊,則輸出的密文流中也必然存在重復(fù)塊。如果明文是純文本,則由概率猜解推知原文的風(fēng)險(xiǎn)就非常之大,非法用戶獲知純文本塊結(jié)構(gòu)的任何信息,就可以利用該信息來(lái)解密已知的密碼文本塊,并有可能進(jìn)一步獲知密鑰。為了防范此風(fēng)險(xiǎn),實(shí)際應(yīng)用的DES算法中將前一個(gè)塊中的信息混合到下一個(gè)塊的加密過(guò)程中,這樣兩個(gè)相同的純文本塊的輸出就變得不同。因此,在第一塊加密時(shí),需指定初始向量,后續(xù)塊的“向量”由前一塊信息自動(dòng)生成。這個(gè)初始向量,就是desIV。
3.2 RSA實(shí)現(xiàn)關(guān)鍵技術(shù)
RSA是基于大素?cái)?shù)乘積分解難題而設(shè)計(jì)的加密方法,出于安全性需要素?cái)?shù)選擇不能太小,導(dǎo)致密鑰較長(zhǎng),故RSA加密效率低,主要用于密鑰傳遞等少量數(shù)據(jù)加密場(chǎng)合。通常,密文用DES加密,DES密鑰用RSA加密。以下為應(yīng)用RSA進(jìn)行字符串加密的源代碼,請(qǐng)注意RSA公鑰和私鑰的存貯方法。
UnicodeEncoding ByteConverter = new UnicodeEncoding();
byte[] dataToEncrypt = yteConverter.GetBytes(this.textBox_Ptext_RSA.Text .Trim ());
byte[] encryptedData,decryptedData;
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
encryptedData = RSAEncrypt(dataToEncrypt, RSA.ExportParameters(false), false);
this.textBox_Ctext_RSA.Text=BitConverter.ToString (encryptedData );
this.publickeyRSA = RSA.ExportParameters(false);
this.privatekeyRSA = RSA.ExportParameters(true);
StreamWriter mwriter = new StreamWriter("publickeyRSA.xml");
mwriter.Write(RSA .ToXmlString (false ));mwriter.Close();
mwriter = new StreamWriter("privatekeyRSA.xml");
mwriter.Write(RSA.ToXmlString(true ));mwriter.Close();
MessageBox.Show("已完成加密,PK和SK文件在當(dāng)前目錄下");
使用中,調(diào)用RSAEncrypt(dataToEncrypt, RSA.ExportParameters(false), false)即將二進(jìn)制明文dataToEncrypt讀入RSA加密生成密文存入緩沖區(qū)decryptedData。
RSA加密中公鑰私鑰通過(guò)RSAParameters結(jié)構(gòu)存貯
RSAParameters publickeyRSA, privatekeyRSA;//構(gòu)造RSAParameters結(jié)構(gòu)
publickeyRSA = RSA.ExportParameters(false);//false僅輸出公鑰;true則將公私鑰一起輸出。
此公私鑰可直接作為參數(shù)傳遞給解密函數(shù)。
如果要序列化成文本存貯,則須通過(guò)RSA .ToXmlString (false )方法:
StreamWriter mwriter= new Stream Writer ("publickeyRSA.xml")
mwriter.Write(RSA .ToXmlString (false ));
mwriter.Close();
由經(jīng)此,可在程序根目錄下,生成只包括公鑰的publickey。
4 程序原型與應(yīng)用
圖1為制作完成的“獅子山加密工具包”功能界面。實(shí)現(xiàn)了DES算法對(duì)字符串、文件的加密解密;RSA算法對(duì)字符串的加密解密;也提供MD5、SHA1文件摘要功能。程序請(qǐng)見(jiàn)投稿附件 “獅子山加密.rar”。
在實(shí)際教學(xué)過(guò)程中,通過(guò)課堂講解和教師的實(shí)際動(dòng)手示范,所在專業(yè)(信息管理與信息系統(tǒng))學(xué)生中已經(jīng)有少數(shù)能夠制作類似簡(jiǎn)單的加解密程序。大多數(shù)學(xué)生也通過(guò)此案例講解,加深了對(duì)教材知識(shí)點(diǎn)的理解,更重要是是增強(qiáng)了大多數(shù)同學(xué)制用和應(yīng)用DES、RSA程序的信心,這對(duì)于提高專業(yè)學(xué)生的動(dòng)手能力,培養(yǎng)學(xué)生專業(yè)興趣是很有裨益的。
5 結(jié)束語(yǔ)
本文以微軟.NET框架類庫(kù)為基礎(chǔ),討論并展示和實(shí)現(xiàn)了DES、RSA的具體方法。在信息安全教學(xué)過(guò)程中,以此操作練習(xí)為基礎(chǔ),能避免單純的理論講解,使信息管理專業(yè)學(xué)生能夠在教師示范下,利用高級(jí)編程平臺(tái)已有類庫(kù)將對(duì)稱加密和RSA算法進(jìn)行基本應(yīng)用,從而提高非計(jì)算機(jī)專業(yè)學(xué)生加密解密知識(shí)點(diǎn)的學(xué)習(xí)效果。
參考文獻(xiàn)
[1] 秦艷琳,吳曉平.基于.NET的TripleDES算法在網(wǎng)絡(luò)傳輸中的實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2010,27(11):53-55.
[2] 張基溫.信息安全與保密教程[M].北京:清華大學(xué)出版,2008.
[3] 陳開(kāi)顏,張鵬,鄧高明等.物理可觀測(cè)下DES的安全性研究[J].電子學(xué)報(bào),2009,37(11):2389-2395.
[4] 趙為強(qiáng),謝吉華 使用Microsoft Crypto API開(kāi)發(fā)基于USB電子鑰匙的CSP[J].2003,(11):33-34
[5] 熊小兵,高俊玲.微軟信息密碼系統(tǒng)及其應(yīng)用[J].計(jì)算機(jī)與信息技術(shù),2006,(7):73-76.
[6] 李顯峰,王淵,魏聰明.基于Microsoft .NET框架加密技術(shù)的SQL Server安全登錄機(jī)制研[J].電腦知識(shí)與技術(shù),2009,15(22):6151-6152.
[7] 盧開(kāi)澄.計(jì)算機(jī)密碼學(xué)[M].北京:清華出版社,2003.
作者簡(jiǎn)介:
章德賓(1975-),男,山東諸城人,博士,副教授;主要研究方向和關(guān)注領(lǐng)域:系統(tǒng)模擬、信息管理。endprint