【正文】
嚴(yán)格遵從RSA標(biāo)準(zhǔn)PKCS 1,而是在滿足設(shè)計(jì)要求的前提下,以一種盡可能簡(jiǎn)單的方式實(shí)現(xiàn)加密和解密。圖22 綜合考慮復(fù)用性、可維護(hù)性和執(zhí)行效率的分層設(shè)計(jì)選用第四種設(shè)計(jì)方案,上層使用C,底層算法使用C++,可以由一個(gè)Visual Studio解決方案管理,給調(diào)試帶來(lái)極大的方便。但是每一層都需要依賴底層的所有組件。其他各功能如文件操作、數(shù)據(jù)編碼轉(zhuǎn)換和圖形界面等,由托管代碼借助虛擬機(jī)平臺(tái)標(biāo)準(zhǔn)庫(kù)的功能快速開(kāi)發(fā)實(shí)現(xiàn)(論述,選用java由JNI或其他方式調(diào)用本地組件,設(shè)計(jì)模式上是完全類似的)。4. 考慮可能的復(fù)用,針對(duì)具體情況分層開(kāi)發(fā)實(shí)現(xiàn)綜合考慮復(fù)用性、可維護(hù)性和執(zhí)行效率,較妥當(dāng)?shù)姆椒ㄊ欠謱釉O(shè)計(jì)。通常解決本地化代碼的移植問(wèn)題,都是使用C++標(biāo)準(zhǔn)庫(kù),即功能盡量多的由C++標(biāo)準(zhǔn)庫(kù)完成,這樣在移植的時(shí)候,只需要重新編寫(xiě)操作系統(tǒng)相關(guān)的代碼即可。這種工程幾乎是為Windows量身訂做,執(zhí)行效率最好。3. 整個(gè)工程使用Windows本地化程序?qū)崿F(xiàn)在不應(yīng)用Windows或第三方現(xiàn)成組件的情況下,需從RSA算法出發(fā)編碼實(shí)現(xiàn)。2. 與使用java平臺(tái)完全類似,不需要大量編碼實(shí)現(xiàn),另外由于Visual Studio的強(qiáng)大便利,這種規(guī)模的工程可以十分迅速的完成。如果不考慮非PC設(shè)備和機(jī)器效率等問(wèn)題,java平臺(tái)幾乎是最佳解決方案。在j2se標(biāo)準(zhǔn)庫(kù)中。 工程方案選擇結(jié)合現(xiàn)有的常見(jiàn)開(kāi)發(fā)模式綜合分析,有多種實(shí)現(xiàn)方案,下面陳述其中幾種,并分析選擇一種解決方案,并給出工程框架。⑤ 提示信息完整、操作舒適、圖形界面雅觀按上述描述,給出Use Case和Statechart如圖21。③ 可以用指定密鑰以RSA算法加密任意一個(gè)文件,加密生成的數(shù)據(jù)為純文本。第2章 RSA文件加密軟件的設(shè)計(jì)與實(shí)現(xiàn) 需求分析與總體設(shè)計(jì) 功能分析,我們可以將對(duì)軟件的要求總結(jié)如下:① 可以按要求的位數(shù)生成非對(duì)稱密鑰。綜上所述,使用前面敘述的方式加密文件有兩點(diǎn)重要意義:①應(yīng)用非對(duì)稱密鑰加密任意文件,使非對(duì)稱密鑰的應(yīng)用不僅僅局限于互聯(lián)網(wǎng)絡(luò)。所以,對(duì)于使用小型文件進(jìn)行數(shù)據(jù)交換的情況,更好的方案是通過(guò)一個(gè)小型應(yīng)用程序?qū)@些文件進(jìn)行非對(duì)稱密鑰加密。我們可以將自己的私有密鑰通過(guò)DES加密后保存在自己的移動(dòng)磁盤(pán)上,使用的時(shí)候只要將其解密讀取即可,用完后立即從當(dāng)前操作環(huán)境清除。RSA文件加密可以靈活的解決這些問(wèn)題。問(wèn)題的關(guān)鍵在于我們所有的數(shù)據(jù)包括密鑰保存在服務(wù)器之上。①如果用公眾論壇直接留言給指定用戶,論壇管理員和服務(wù)器管理員通常有方法看到數(shù)據(jù)。例如發(fā)送一個(gè)銀行帳號(hào)和密碼給某人。顯然,非對(duì)稱密鑰體制更適合多用戶交流,而將這種加密方式直接應(yīng)用于文件加密,使我們?cè)诠_(kāi)場(chǎng)合的交流更加靈活方便。張三要留給李四的文件,就用李四的公開(kāi)密鑰加密,要留給王五的文件,就用王五的公開(kāi)密鑰加密。非對(duì)稱密鑰(公開(kāi)密鑰方式)恰好解決這樣的問(wèn)題。但是如果張三想要在同一臺(tái)公共計(jì)算機(jī)上再留一個(gè)秘密文件給王五,而不希望別人看到,就要和王五另外約定一個(gè)密碼。比如,張三由于某種原因,需要將自己的某個(gè)文件在公共計(jì)算機(jī)上留給李四,而不希望別人看到內(nèi)容。③如果采用對(duì)稱密鑰加密,即加密解密的密鑰相同,只適合部分情況。對(duì)于前面敘述的帶有重要信息的小型文本和二進(jìn)制數(shù)據(jù)的維護(hù),①如果不加密,將無(wú)法放心的保存在計(jì)算機(jī)上,尤其是連網(wǎng)的或機(jī)房里的公共計(jì)算機(jī)。比如,因擔(dān)心遺忘而用普通文本記錄的銀行帳號(hào)和密碼、不應(yīng)被陌生人知道的重要電話號(hào)碼、幾千字節(jié)大的重要小圖片等。所以對(duì)于小型文件,進(jìn)行較長(zhǎng)密鑰的RSA加密是完全可行的。例如,在一臺(tái)配置為AMD Athron2800+,外頻333MHZ,物理內(nèi)存512MB的PC上測(cè)試實(shí)現(xiàn)的軟件,以560bit的n逐字節(jié)加密一個(gè)1KB大小的文件需要55秒。如果要在較短時(shí)間內(nèi)加密大文件,需要縮短密鑰長(zhǎng)度以減小運(yùn)算量,這將帶來(lái)安全性隱患。比如按前面敘述的45毫秒大數(shù)運(yùn)算程序推理,加密1M字節(jié)大小的文件需要約1天的時(shí)間。通常數(shù)字簽名為幾十字節(jié),加密運(yùn)算并不需要很長(zhǎng)的等待,這就說(shuō)明對(duì)于幾百字節(jié)或一兩K字節(jié)大小的文件來(lái)說(shuō),如果進(jìn)行RSA加密,并不會(huì)是非常漫長(zhǎng)的工作。其實(shí)從一個(gè)簡(jiǎn)單的角度來(lái)說(shuō),既然RSA用于數(shù)字簽名可行,那就完全可以用于同樣大小的普通文件。如果按這種速度,逐字節(jié)對(duì)1KB的數(shù)據(jù)進(jìn)行同樣的運(yùn)算,所消耗的時(shí)間理論上為45毫秒的1024倍即約45秒。下面結(jié)合大數(shù)運(yùn)算程序的調(diào)試,從理論上簡(jiǎn)單的分析消耗時(shí)間。通常文件被想象成大數(shù)據(jù)塊,但是實(shí)際上在日常應(yīng)用中,有些極其重要的文本資料是并不太大的,比如因擔(dān)心遺忘而用普通文本記錄的銀行帳號(hào)和密碼、不應(yīng)被陌生人知道的重要電話號(hào)碼、幾千字節(jié)大的重要小圖片等。之所以只應(yīng)用于這些短小數(shù)據(jù)的加密解密,是因?yàn)镽SA算法加密極慢,速度是DES對(duì)稱密鑰加密速度的千分之一左右。單機(jī)應(yīng)用程序使用RSA加密尚比較少見(jiàn),例如使用RSA加密任意一個(gè)文件。JCE(Java Cryptography Extension) 在JCA的基礎(chǔ)上作了擴(kuò)展,JCE也是由幾個(gè)軟件包組成,此軟件包提供了JCE加密技術(shù)操作API。事實(shí)上,在j2se的標(biāo)準(zhǔn)庫(kù)中,就為安全和加密服務(wù)提供了兩組API:JCA和JCE。RSA更出現(xiàn)在要求高度安全穩(wěn)定的企業(yè)級(jí)商務(wù)應(yīng)用中。Open SSL應(yīng)用RSA實(shí)現(xiàn)簽名和密鑰交換,已經(jīng)在各種操作系統(tǒng)得到非常廣泛的應(yīng)用。Open SSL是一個(gè)開(kāi)放源代碼的實(shí)現(xiàn)了SSL及相關(guān)加密技術(shù)的軟件包,由加拿大的Eric Yang等發(fā)起編寫(xiě)的。加密連接、數(shù)字簽名和數(shù)字證書(shū)的核心算法廣泛使用RSA。RSA在硬件方面,以技術(shù)成熟的IC應(yīng)用于各種消費(fèi)類電子產(chǎn)品。發(fā)展至今,電子安全領(lǐng)域的各方面已經(jīng)形成了較為完備的國(guó)際規(guī)范。整個(gè)工程的分層設(shè)計(jì),給引用移植和后續(xù)開(kāi)發(fā)帶來(lái)便利。當(dāng)今公鑰加密更廣泛應(yīng)用于互聯(lián)網(wǎng)身份認(rèn)證,本課題將公鑰加密算法RSA應(yīng)用于小型文件加密。VISA、MasterCard、IBM、Microsoft等公司協(xié)力制定的安全電子交易標(biāo)準(zhǔn)(Secure Electronic Transactions,SET)就采用了標(biāo)準(zhǔn)RSA算法,這使得RSA在我們的生活中幾乎無(wú)處不在。雖然自1978年提出以來(lái),RSA的安全性一直未能得到理論上的證明,但它經(jīng)歷了各種攻擊,至今(2006年)未被完全攻破。它易于理解和操作,也十分流行。對(duì)應(yīng)用程序進(jìn)行測(cè)試,對(duì)測(cè)試結(jié)果進(jìn)行分析研究,進(jìn)而對(duì)應(yīng)用程序進(jìn)行改進(jìn),對(duì)關(guān)鍵算法進(jìn)行盡可能的優(yōu)化,最終得到一個(gè)在windows運(yùn)行的可以用指定密鑰對(duì)任意文件進(jìn)行RSA加密并可解密的完整應(yīng)用程序,和一些相關(guān)的可移植組件。經(jīng)過(guò)加密的文件以及密鑰文件都是文本文件。對(duì)RSA算法進(jìn)行研究,從常規(guī)RSA算法出發(fā),用C++實(shí)現(xiàn)RSA加密算法類庫(kù),并在32位windows平臺(tái)封裝成組件。Research And Development OfRSA File Encryption摘 要分析RSA算法的應(yīng)用現(xiàn)狀,論證文件加密應(yīng)用RSA算法的可行性和意義。設(shè)計(jì)一套完整實(shí)用的RSA文件加密解決方案,具體編碼實(shí)現(xiàn)。實(shí)現(xiàn)可以對(duì)任意文件進(jìn)行RSA加密操作的窗體應(yīng)用程序。給出關(guān)鍵類類圖、整個(gè)應(yīng)用程序的結(jié)構(gòu)描述文檔、關(guān)鍵模塊流程圖、較詳細(xì)的接口文檔、所有源代碼。關(guān)鍵詞 RSA RSA算法 文件加密 加密成文本AbstractDo research about the application area of RSA encryption and reason that RSA can be used for file encryption. Design a RSA fileencrypt solution and plete an application on Microsoft Windows?. Design a C++ class based on normal RSA algorithm. And make a DLL module based on the class. Then plete a .Net Framework? windowapplication using that DLL. The application can encrypt any file and decrypt them. The file after encryption can be saved as a text file. And the encryptionkeys also can be saved as pivotal classes chart, project description, core algorithm flowchart, all source code, and module interfaces document. Do application performance test and record the performance data. Analyze the result then optimize core algorithm and improve the application. Finally, create a practical application using RSA algorithm that can encrypt and decrypt any file. And several modules in the project can be reuse by other applications. For instance, the C++ class can be crosspiled for handheld devices, the DLL can be referenced by other win32 applications, and the .Net class can be easily referenced by web server applications or web services.Keywords RSA RSA algorithm file encryption encrypt to text 目 錄前 言 1第1章 RSA應(yīng)用現(xiàn)狀及應(yīng)用于文件加密的分析 2 RSA算法介紹與應(yīng)用現(xiàn)狀 2 RSA應(yīng)用于文件加密的分析 3 文件加密使用RSA的可行性 3 文件加密使用RSA的意義 4第2章 RSA文件加密軟件的設(shè)計(jì)與實(shí)現(xiàn) 6 需求分析與總體設(shè)計(jì) 6 功能分析 6 工程方案選擇 7 各部分的設(shè)計(jì)與開(kāi)發(fā) 8 實(shí)現(xiàn)RSA加密算法的C++核心類庫(kù) 8 封裝C++核心類庫(kù)的DLL組件 18 19第3章 軟件整體測(cè)試與分析改進(jìn) 20 編寫(xiě)測(cè)試各項(xiàng)性能需要的精確計(jì)時(shí)類 20 測(cè)試數(shù)據(jù)與分析改進(jìn) 20 密鑰生成測(cè)試 20 數(shù)據(jù)輸入輸出測(cè)試 23 加密解密測(cè)試 23 性能分析與改進(jìn)優(yōu)化 26 使用中國(guó)余數(shù)定理 27第4章 可移植模塊的簡(jiǎn)要說(shuō)明與開(kāi)發(fā)前景 29結(jié)束語(yǔ) 30謝 辭 31參考文獻(xiàn) 32附 錄 33前 言RSA公鑰加密算法是第一個(gè)既能用于數(shù)據(jù)加密也能用于數(shù)字簽名的算法。算法的名字以發(fā)明者的姓氏首字母命名:Ron Rivest, Adi Shamir 和Leonard Adleman。隨著越來(lái)越多的商業(yè)應(yīng)用和標(biāo)準(zhǔn)化工作,RSA已經(jīng)成為最具代表性的公鑰加密技術(shù)。網(wǎng)上交易加密連接、網(wǎng)上銀行身份驗(yàn)證、各種信用卡使用的數(shù)字證書(shū)、智能移動(dòng)電話和存儲(chǔ)卡的驗(yàn)證功能芯片等,大多數(shù)使用RSA技術(shù)。將任意文件加密成文本的解決方案,使其使用更加靈活。第1章 RSA應(yīng)用現(xiàn)狀及應(yīng)用于文件加密的分析 RSA算法介紹與應(yīng)用現(xiàn)狀RSA算法可以簡(jiǎn)單敘述如下:密鑰生成取素?cái)?shù)p,q,令n=pq.取與(p1)(q1)互素的整數(shù)e,由方程de=1 (mod (p1)(q1))解出d,二元組(e,n)作為公開(kāi)密鑰,二元組(d,n)作為私有密鑰.加密解密b=ae mod n,c=bd mod n.附錄中給出了證明a=c (mod n).(具體的RSA算法協(xié)議見(jiàn),提及的算法中的字母與協(xié)議文檔中的一致,不再另做解釋)RSA公開(kāi)密鑰加密算法自20世紀(jì)70年代提出以來(lái),已經(jīng)得到了廣泛認(rèn)可和應(yīng)用。RSA作為最重要的公開(kāi)密鑰算法,在各領(lǐng)域的應(yīng)用數(shù)不勝數(shù)。RSA在軟件方面的應(yīng)用,主要集中在Internet上。日常應(yīng)用中,有比較著名的工具包Open SSL(SSL,Security Socket Layer,是一個(gè)安全傳輸協(xié)議,在Internet上進(jìn)行數(shù)據(jù)保護(hù)和身份確認(rèn)。相關(guān)詳細(xì)介紹見(jiàn))。另外,家喻戶曉的IE瀏覽器,自然也實(shí)現(xiàn)了SSL協(xié)議,集成了使用RSA技術(shù)的加密功能,結(jié)合MD5和SHA1,主要用于數(shù)字證書(shū)和數(shù)字簽名,對(duì)于習(xí)慣于使用網(wǎng)上購(gòu)物和網(wǎng)上銀行的用戶來(lái)說(shuō),幾乎天天都在使用RSA技術(shù)。在當(dāng)今的企業(yè)級(jí)商務(wù)應(yīng)用中,不得不提及使用最廣泛的平臺(tái)j2ee。 JCA (Java Cryptography Architecture)提供基本的加密框架,如證書(shū)、數(shù)字簽名、報(bào)文摘要和密鑰對(duì)產(chǎn)生器; JCA由幾個(gè)實(shí)現(xiàn)了基本的加密技術(shù)功能的類和接口組成,此軟件包包含的是一組核心的類和接口,Java中數(shù)字簽名的方法就集中在此軟件包中。在上述軟件包的實(shí)現(xiàn)中,集成了應(yīng)用RSA算法的各種數(shù)據(jù)加密規(guī)范(RSA算法應(yīng)用規(guī)范介紹參見(jiàn): ,這些API內(nèi)部支持的算法不僅僅只有RSA,但是RSA是數(shù)字簽名和證書(shū)中最常用的),用戶程序可以直接使用java標(biāo)準(zhǔn)庫(kù)中提供的API進(jìn)行數(shù)字簽名和證書(shū)的各種操作。 RSA應(yīng)用于文件加密的分析 文件加密使用RSA的可行性,不難看出RSA當(dāng)今的應(yīng)用多在于數(shù)字簽名和證書(shū)等方面。正是因?yàn)檫@樣,把RSA應(yīng)用于普通文件加密的想法一直被忽略。雖然RSA加密運(yùn)算的速度十分慢,但是在PC性能越來(lái)越好的今天,對(duì)于幾千字節(jié)的數(shù)據(jù)進(jìn)行一次幾百位密鑰的RSA加密,所消耗的時(shí)間應(yīng)該是可以接受的。在一臺(tái)普通配置的PC機(jī)上對(duì)一個(gè)整數(shù)進(jìn)行冪模運(yùn)算,因?yàn)楣_(kāi)密鑰的e通常