趙鑫
摘要:RSA公鑰加密算法當(dāng)今十分受歡迎,它的特點(diǎn)就是能夠?qū)嵲跀?shù)據(jù)加密的,同時(shí)在數(shù)字簽名的算法中也得到了廣泛的應(yīng)用。更主要的是軟件更容易操作與理解。本文首先對RSA算法的現(xiàn)狀進(jìn)行分析,進(jìn)一步論述文件加密應(yīng)用RSA算法的可行性和意義。對RSA算法深入研究,設(shè)計(jì)出一套非常實(shí)用的加密文件解決方案,從常規(guī)RSA算法出發(fā),用C++實(shí)現(xiàn)RSA加密算法類庫,在.Net平臺引用此組件,實(shí)現(xiàn)可以對任意文件進(jìn)行RSA加密操作的窗體應(yīng)用程序。
關(guān)鍵詞:RSA RSA算法 文件加密 加密成文本
中圖分類號:TP393.08 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9416(2014)08-0173-03
1 RSA應(yīng)用現(xiàn)狀及應(yīng)用于文件加密的分析
1.1 RSA算法介紹與應(yīng)用現(xiàn)狀
RSA算法已經(jīng)有二十年的歷史,它通過了各種破解的考驗(yàn),如今,已廣泛的被人們所接受,被公認(rèn)為是最佳的分鑰之一,RSA算法它主要分為三個(gè)部份,加密、解密數(shù)據(jù)和生成RSA密鑰,是公鑰密碼算法最為容易理解與操作的一種,RSA的安全性依賴于大數(shù)的因子分解,但并沒有從理論上證明破譯RSA的難度與大數(shù)分解難度等價(jià)。
1.2 RSA應(yīng)用于文件加密的分析
(1)文件加密使用RSA的可行性;如今,RSA技術(shù)一般在一些小數(shù)據(jù)方面的加密解密得到廣泛應(yīng)用,例如,數(shù)字證書和簽名。這是因?yàn)镽SA算法加密在過程中速度非常慢,和速度非??斓腄ES對稱密鑰加密技術(shù)相比,只是它的千分之一而已。所以,在一些普通文件加密方面一直沒有得到重視,現(xiàn)在由于PC性能的快速發(fā)展,即使RSA加密運(yùn)算速度不是很快,但對于一個(gè)幾千字節(jié)的數(shù)據(jù)做出幾百位的加密這一特點(diǎn),所以在時(shí)間消耗方面還是可以被人們所能接受的。(2)RSA文件加密的意義;RSA在被廣泛的應(yīng)用中,它的安全性得到了大量事實(shí)的證明,技術(shù)方面也同時(shí)日趨成熟,因此,人們對RSA技術(shù)也越來越重視。但在RSA加密文件時(shí),它的算法之中含有大數(shù)的乘方運(yùn)算,而計(jì)算機(jī)要消耗太多的時(shí)間去運(yùn)算這些數(shù)據(jù),加密的效率會受到很大程度的影響,嚴(yán)重的限制了它的普遍利用。如今,人們正在對如何提高RSA的運(yùn)算速度做為重點(diǎn)研究對象,具有十分現(xiàn)實(shí)意義。
2 RSA文件加密軟件的設(shè)計(jì)與實(shí)現(xiàn)
2.1 RSA文件加密軟件的設(shè)計(jì)
2.1.1 功能分析
將對軟件的要求總結(jié)如下:
(1)對軟件界面要求簡潔明了,操作容易。(2)設(shè)計(jì)中要完成非對稱密鑰。(3)加密之后自動生成的數(shù)據(jù)格式為純文本。(4)對加密過的文件可以做到安裝與卸載。并能還原文件。(5)密鑰和裝載密鑰進(jìn)行保存。根據(jù)功能分析后,得出Use Case和Statechart流程。(見圖1)
2.1.2 工程方案選擇
工程設(shè)計(jì)方案選用了比較穩(wěn)妥的方法----分層設(shè)計(jì)。因?yàn)檫@一方法具有可維護(hù)性、復(fù)用性及執(zhí)行效率這一特點(diǎn)。用C++類庫來實(shí)現(xiàn)RSA算法最核心的部份,運(yùn)用這種開發(fā)方式,最底層集中了整個(gè)設(shè)計(jì)的核心功能,在不斷的封裝中針對具體環(huán)境對組件功能不斷擴(kuò)充,任意一個(gè)層面的封裝都可以被直接應(yīng)用到其他項(xiàng)目,但是每一層都需要依賴底層的所有組件。下圖2 分別介紹了層設(shè)計(jì)的優(yōu)點(diǎn)。
在整個(gè)設(shè)計(jì)過程中,工程分四層,分別為RSA加密算法的C++核心類庫、封裝C++核心類庫的DLL組件、引用DLL的.Net類、實(shí)現(xiàn)文件操作功能的.Net窗體應(yīng)用程序。上層使用C#,底層算法使用C++,可以由一個(gè)Visual Studio解決方案管理,給調(diào)試帶來極大的方便。
2.2 RSA文件加密軟件部分的設(shè)計(jì)與開發(fā)
2.2.1 大數(shù)冪模與乘模運(yùn)算·Montgomery冪模算法
的情況下。整個(gè)設(shè)計(jì)需要實(shí)現(xiàn)vlong類型,這樣大部份的四則運(yùn)算和存儲功能就基本完成。但在RSA算法之中要加入冪模運(yùn)算,要完成這一運(yùn)算,需要寫入一個(gè)vlong的友元,在RSA算法之中,冪模運(yùn)算直接決定它的性能,所以在整個(gè)設(shè)計(jì)之中最為重要的運(yùn)算之一,西方學(xué)者針對冪模運(yùn)算提出了多種解決辦法,發(fā)現(xiàn)都是通過乘模的分解性質(zhì),先將冪模運(yùn)算轉(zhuǎn)化為乘模運(yùn)算。
一般情況下。分解指的是將指數(shù)分為對半,如果需要分解的指數(shù)是奇數(shù)。那就需要減去一半,將其變成偶數(shù),之后再對指數(shù)進(jìn)行分半處理,,例如求D=,E=15,可分解為如下6個(gè)乘模運(yùn)算。
根據(jù)上述辦法進(jìn)行分析,對于任意指數(shù)E,見下面圖3流程圖進(jìn)行分析。
在本次設(shè)計(jì)之中,運(yùn)用的乘模算法是M(A*B,它做為RSA核心運(yùn)算,但它并非是RSA想要的真正運(yùn)算結(jié)果,還需要在冪模算法中進(jìn)行二次修改,這樣的話就可以在乘模算法之中正常計(jì)算了。在設(shè)計(jì)過程中,最初時(shí)并沒有運(yùn)用Montgomery 乘模算法,速度一定沒有Montgomery乘模算法快,但加密整度相差并不大。此次設(shè)計(jì)中結(jié)合冪模算法,最后形成標(biāo)準(zhǔn)Montgomery冪模算法,代碼如下:
在具體的實(shí)現(xiàn)中,使用的時(shí)候直接調(diào)用modexp即可。
2.2.2 核心類庫綜述
在實(shí)現(xiàn)RSA加密算法之中,所運(yùn)用的C++核心類庫是由6個(gè)類組成而成,類名和對應(yīng)的功能如表1。
類之間的關(guān)系如圖4。
在設(shè)計(jì)核心類為時(shí)應(yīng)用了輾轉(zhuǎn)相除法求最大公約數(shù)的函數(shù)gcd、解同余方程的函數(shù)modinv等。這些在程序之中并不歸類于任何全局函數(shù),通常情況下,設(shè)計(jì)之中并不應(yīng)該出現(xiàn)類以外的函數(shù)。但這些函數(shù)頻繁的被使用,設(shè)計(jì)時(shí)也考慮到要置于全局,機(jī)器的效率等因素,所以并沒有另行進(jìn)行包裝。
2.2.3 引用DLL的.Net類與實(shí)現(xiàn)文件操作功能的窗體應(yīng)用程序
在C#編寫的.Net類里,使用特性[DllImport("sanpack_rsa.dll")]引用C接口的DLL組件。類中接口DLL的函數(shù)都以靜態(tài)成員的方式對外公開,其他.Net程序可以直接使用。在類庫中還提供了任意長度隨機(jī)串的生成函數(shù),此函數(shù)用于生成尋找素?cái)?shù)的大數(shù)起點(diǎn)。endprint
文件操作使用.Net基礎(chǔ)類庫中的System.IO中的類實(shí)現(xiàn)。一般因?yàn)槲募僮魇趾唵?,用流輸入輸出的方式包裝完成,程序中將文件操作直接放在菜單項(xiàng)關(guān)聯(lián)的事件處理函數(shù)中。
窗體等圖形操作界面直接由Visual Studio的所見即所得的方式完成,不需要編碼實(shí)現(xiàn)。
最終實(shí)現(xiàn)的應(yīng)用程序,結(jié)構(gòu)如圖5所示。
3 性能分析與改進(jìn)優(yōu)化
根據(jù)對此軟件的測試,軟件需要對以下幾點(diǎn)進(jìn)一步改進(jìn)和優(yōu)化。
(1)在要對文件進(jìn)行加密解密的時(shí)候,先將文件按一定的數(shù)據(jù)結(jié)構(gòu)讀入內(nèi)存,然后進(jìn)行加密或解密操作。運(yùn)算數(shù)據(jù)都讀取自內(nèi)存。(2)在對加密或解密完成的數(shù)據(jù)進(jìn)行寫出的時(shí)候,都是將其直接寫到指定好的文件,即直接寫入磁盤。這是因?yàn)椋紤]到中途可能因?yàn)橐馔鈹嚯姷仍蛞鸩僮髦袛?,為了保護(hù)已經(jīng)花費(fèi)時(shí)間運(yùn)算完成的數(shù)據(jù),將其直接寫入磁盤。(3)在關(guān)鍵算法上做進(jìn)一步優(yōu)化,例如在尋找素?cái)?shù)時(shí),素?cái)?shù)測試使用更快速的算法;還有3.3節(jié)提到的,在用私有密鑰進(jìn)行冪模運(yùn)算時(shí)使用中國余數(shù)定理等。(4)對C++核心類庫進(jìn)行重點(diǎn)優(yōu)化,使其運(yùn)算效率盡可能提高。其中包括對各類之間的組織細(xì)節(jié)、各程序模塊的具體編寫等,進(jìn)行全面細(xì)致的檢查和修改,例如將大數(shù)據(jù)類型以對象指針傳遞而不拷貝,將簡單的for循環(huán)展開等。
4 結(jié)語
本文分析了利用文件夾的加密來實(shí)現(xiàn)對文件或程序的保護(hù)方案。采用了“對稱式”加密技術(shù)即采用文件逐字節(jié)與密碼異或方式對文件或可執(zhí)行程序加密。選用C++編程語言,設(shè)計(jì)了一個(gè)加密程序,該軟件不拘泥于花俏的界面,僅使用了一個(gè)簡單的對話框,具有簡單實(shí)用的特點(diǎn)。在該方案的實(shí)現(xiàn)中,由于使用了可靠的密碼學(xué)算法,使軟件加密的強(qiáng)度大大提高。
參考文獻(xiàn)
[1]菲菲.利用Windows7中的自帶功能實(shí)現(xiàn)U盤加密[J].網(wǎng)絡(luò)與信息,2010(1).
[2]包奇金寶,張景龍.使用PCTOOLS輕松破解高強(qiáng)度加密大師[J].科技創(chuàng)新導(dǎo)報(bào),2009(33).
[3]夏云程.企業(yè)辦公系統(tǒng)的信息安全及控制措施[J].現(xiàn)代經(jīng)濟(jì)信息,2008(11).
[4]Heather Clancy,梁曉平.破解數(shù)據(jù)加密難題[J].創(chuàng)業(yè)邦,2010(5).
[5]陳惠風(fēng).小議異或算法實(shí)現(xiàn)外殼加密的程序設(shè)計(jì)[J].中小企業(yè)管理與科技(下旬刊),2009(10).endprint
文件操作使用.Net基礎(chǔ)類庫中的System.IO中的類實(shí)現(xiàn)。一般因?yàn)槲募僮魇趾唵?,用流輸入輸出的方式包裝完成,程序中將文件操作直接放在菜單項(xiàng)關(guān)聯(lián)的事件處理函數(shù)中。
窗體等圖形操作界面直接由Visual Studio的所見即所得的方式完成,不需要編碼實(shí)現(xiàn)。
最終實(shí)現(xiàn)的應(yīng)用程序,結(jié)構(gòu)如圖5所示。
3 性能分析與改進(jìn)優(yōu)化
根據(jù)對此軟件的測試,軟件需要對以下幾點(diǎn)進(jìn)一步改進(jìn)和優(yōu)化。
(1)在要對文件進(jìn)行加密解密的時(shí)候,先將文件按一定的數(shù)據(jù)結(jié)構(gòu)讀入內(nèi)存,然后進(jìn)行加密或解密操作。運(yùn)算數(shù)據(jù)都讀取自內(nèi)存。(2)在對加密或解密完成的數(shù)據(jù)進(jìn)行寫出的時(shí)候,都是將其直接寫到指定好的文件,即直接寫入磁盤。這是因?yàn)?,考慮到中途可能因?yàn)橐馔鈹嚯姷仍蛞鸩僮髦袛?,為了保護(hù)已經(jīng)花費(fèi)時(shí)間運(yùn)算完成的數(shù)據(jù),將其直接寫入磁盤。(3)在關(guān)鍵算法上做進(jìn)一步優(yōu)化,例如在尋找素?cái)?shù)時(shí),素?cái)?shù)測試使用更快速的算法;還有3.3節(jié)提到的,在用私有密鑰進(jìn)行冪模運(yùn)算時(shí)使用中國余數(shù)定理等。(4)對C++核心類庫進(jìn)行重點(diǎn)優(yōu)化,使其運(yùn)算效率盡可能提高。其中包括對各類之間的組織細(xì)節(jié)、各程序模塊的具體編寫等,進(jìn)行全面細(xì)致的檢查和修改,例如將大數(shù)據(jù)類型以對象指針傳遞而不拷貝,將簡單的for循環(huán)展開等。
4 結(jié)語
本文分析了利用文件夾的加密來實(shí)現(xiàn)對文件或程序的保護(hù)方案。采用了“對稱式”加密技術(shù)即采用文件逐字節(jié)與密碼異或方式對文件或可執(zhí)行程序加密。選用C++編程語言,設(shè)計(jì)了一個(gè)加密程序,該軟件不拘泥于花俏的界面,僅使用了一個(gè)簡單的對話框,具有簡單實(shí)用的特點(diǎn)。在該方案的實(shí)現(xiàn)中,由于使用了可靠的密碼學(xué)算法,使軟件加密的強(qiáng)度大大提高。
參考文獻(xiàn)
[1]菲菲.利用Windows7中的自帶功能實(shí)現(xiàn)U盤加密[J].網(wǎng)絡(luò)與信息,2010(1).
[2]包奇金寶,張景龍.使用PCTOOLS輕松破解高強(qiáng)度加密大師[J].科技創(chuàng)新導(dǎo)報(bào),2009(33).
[3]夏云程.企業(yè)辦公系統(tǒng)的信息安全及控制措施[J].現(xiàn)代經(jīng)濟(jì)信息,2008(11).
[4]Heather Clancy,梁曉平.破解數(shù)據(jù)加密難題[J].創(chuàng)業(yè)邦,2010(5).
[5]陳惠風(fēng).小議異或算法實(shí)現(xiàn)外殼加密的程序設(shè)計(jì)[J].中小企業(yè)管理與科技(下旬刊),2009(10).endprint
文件操作使用.Net基礎(chǔ)類庫中的System.IO中的類實(shí)現(xiàn)。一般因?yàn)槲募僮魇趾唵?,用流輸入輸出的方式包裝完成,程序中將文件操作直接放在菜單項(xiàng)關(guān)聯(lián)的事件處理函數(shù)中。
窗體等圖形操作界面直接由Visual Studio的所見即所得的方式完成,不需要編碼實(shí)現(xiàn)。
最終實(shí)現(xiàn)的應(yīng)用程序,結(jié)構(gòu)如圖5所示。
3 性能分析與改進(jìn)優(yōu)化
根據(jù)對此軟件的測試,軟件需要對以下幾點(diǎn)進(jìn)一步改進(jìn)和優(yōu)化。
(1)在要對文件進(jìn)行加密解密的時(shí)候,先將文件按一定的數(shù)據(jù)結(jié)構(gòu)讀入內(nèi)存,然后進(jìn)行加密或解密操作。運(yùn)算數(shù)據(jù)都讀取自內(nèi)存。(2)在對加密或解密完成的數(shù)據(jù)進(jìn)行寫出的時(shí)候,都是將其直接寫到指定好的文件,即直接寫入磁盤。這是因?yàn)?,考慮到中途可能因?yàn)橐馔鈹嚯姷仍蛞鸩僮髦袛?,為了保護(hù)已經(jīng)花費(fèi)時(shí)間運(yùn)算完成的數(shù)據(jù),將其直接寫入磁盤。(3)在關(guān)鍵算法上做進(jìn)一步優(yōu)化,例如在尋找素?cái)?shù)時(shí),素?cái)?shù)測試使用更快速的算法;還有3.3節(jié)提到的,在用私有密鑰進(jìn)行冪模運(yùn)算時(shí)使用中國余數(shù)定理等。(4)對C++核心類庫進(jìn)行重點(diǎn)優(yōu)化,使其運(yùn)算效率盡可能提高。其中包括對各類之間的組織細(xì)節(jié)、各程序模塊的具體編寫等,進(jìn)行全面細(xì)致的檢查和修改,例如將大數(shù)據(jù)類型以對象指針傳遞而不拷貝,將簡單的for循環(huán)展開等。
4 結(jié)語
本文分析了利用文件夾的加密來實(shí)現(xiàn)對文件或程序的保護(hù)方案。采用了“對稱式”加密技術(shù)即采用文件逐字節(jié)與密碼異或方式對文件或可執(zhí)行程序加密。選用C++編程語言,設(shè)計(jì)了一個(gè)加密程序,該軟件不拘泥于花俏的界面,僅使用了一個(gè)簡單的對話框,具有簡單實(shí)用的特點(diǎn)。在該方案的實(shí)現(xiàn)中,由于使用了可靠的密碼學(xué)算法,使軟件加密的強(qiáng)度大大提高。
參考文獻(xiàn)
[1]菲菲.利用Windows7中的自帶功能實(shí)現(xiàn)U盤加密[J].網(wǎng)絡(luò)與信息,2010(1).
[2]包奇金寶,張景龍.使用PCTOOLS輕松破解高強(qiáng)度加密大師[J].科技創(chuàng)新導(dǎo)報(bào),2009(33).
[3]夏云程.企業(yè)辦公系統(tǒng)的信息安全及控制措施[J].現(xiàn)代經(jīng)濟(jì)信息,2008(11).
[4]Heather Clancy,梁曉平.破解數(shù)據(jù)加密難題[J].創(chuàng)業(yè)邦,2010(5).
[5]陳惠風(fēng).小議異或算法實(shí)現(xiàn)外殼加密的程序設(shè)計(jì)[J].中小企業(yè)管理與科技(下旬刊),2009(10).endprint