信息安全技術RSA加密解密實現_第1頁
信息安全技術RSA加密解密實現_第2頁
信息安全技術RSA加密解密實現_第3頁
信息安全技術RSA加密解密實現_第4頁
信息安全技術RSA加密解密實現_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、課程設計報告課程名稱:基于非對稱密碼體系的數據加密解密(RSA)時間:2016.11.21-2016.11.25目錄一、背景3二、RSA算法52.1算法描述52.2 模算術里的求冪運算62.3用公鑰進行有效運算72.4用私鑰進行有效運算7三、軟件的設計83.1軟件總體設計83.2軟件詳細設計93.3類與主要函數113.4主要代碼11四、運行與調試154.1運行效果154.2調試問題17五、經驗與總結175.1心得與體會175.2致謝17六、參考文獻17一、背景隨著計算機信息技術的蓬勃發展,作為信息采集、存儲、處理和傳輸的媒體,計算機及網絡應用逐步延伸到社會生活的方方面面。當人類越來越感受到計算

2、機系統功能的強大,不得不感嘆于信息技術帶來的方便快捷的同時,各種憂慮也漸漸產生:已經習慣性依賴于計算機的人們離開它還能生存嗎?信息戰將對國防安全、軍事領域產生什么影響?信息詐騙和其他信息犯罪將如何改變人們的日常生活? 這些問題都屬于計算機信息安全的范疇。起初,計算機系統的安全主要是指硬件的安全保護。隨著信息所發揮的價值日益為人們所了解,人們的目光轉移到在計算機系統中存儲、傳輸的信息的安全,包括防止信息泄漏和非法慕改等。數據庫集中存放和管理大量信息,其安全性對于整個計算機信息系統至關重要。為了保證數據安全,人們在不同層面運用了各種安全措施,這些防范措施分別可以在一定程度上防止某種安全威脅。但是,

3、在操作系統、數據庫和網絡的層層防護之下,仍然無法保證數據庫數據的安全。因為通常數據庫中的數據最終是以文件形式存儲在計算機上的,這些文件大部分是多個用戶可讀可寫的,一旦網上黑客通過某種途徑進入系統就可以直接讀取數據文件或存儲介質,從中竊取數據或利用非法軟件篡改數據庫文件內容。信息的傳輸則通過公共信道。這些計算機系統和公共信道是不設防的,是很脆弱的,容易受到攻擊和破壞,信息的丟失不容易被發現,而后果是極其嚴重的。如何保護信息的安全已不僅僅是軍事和政府部門感興趣的問題,各企事業單位也愈感迫切。而密碼是有效而且可行的保護信息安全的辦法,有效是指密碼能夠做到使信息不被非法竊取,不被篡改或破壞,可行是說它

4、需要付出的代價是可以接受的。因此密碼學的研究就成為一個重要的來解決信息安全問題的一種手段了,而且有著重要的地位。二、RSA算法2.1算法描述Diffie和Hellman在其早期的論文DIFF76B中提出了一種新的密碼學方法,事實上,它對密碼學家提出了一種挑戰,即要求尋找滿足公鑰體制要求的密碼算法。之后很多算法被提出,其中有一些剛提出時似乎很有前途,但后來都被攻破。MIT的Ron Rivest,Adi Shamir和Adleman于1977年提出并于1978年首次發表的算法RIVE78,可以說是最早提出的成功的公鑰算法之一。Rivest-Shamir-Adleman(RSA)算法自其誕生之日起就

5、稱為比廣泛接受且被實現的通用的公鑰加密方法。經過多年的分析和研究,在眾多的公開密鑰加密算法中,RSA加密算法最受推崇,它也被推薦為公開密鑰數據加密標準。由數論知識可知,若將一個具有大素數因子的合數進行分解是很困難的,或者說這個問題的計算量是令人望而生畏的,而RSA加密算法正是建立在這個基礎上的。在RSA加密算法中,個用戶A可根據以下步驟來選擇密鑰和進行密碼轉換:(1)隨機的選取兩個不同的大素數p和q(一般為100位以上的十進制數),予以保密;(2)計算n=p*q,作為用戶A的模數,予以公開;(3)計算歐拉(Euler)函數z=(p-1)*(q-1),予以保密;(4)隨機的選取d與z互質,作為A

6、的公開密鑰;(5)利用Euclid算法計算滿足同余方程e*d1modz的解d,作為用戶A的保密密鑰;(6)任何向用戶A發送信息M的用戶,可以用A的公開模數D和公開密鑰e根據C=Me mod n得到密文C;2.2 模算術里的求冪運算在RSA中,加密和解密都需要計算某整數的模n整數次冪,如果先球場整數的冪,在對n取模,那么中間結果會非常大。幸運的是,正如前面的例子所示,我們可利用模運算的下列性質來計算模冪運算:(a mod n)*(b mod n)mod n = (a*b) mod n這樣我們將中間結果對n取模,這樣使得計算切實可行。因為RSA中所用到的指數很大,所有還應考慮冪運算的效率問題。為說

7、明如何增加效率,以計算x16為例。若直接計算則需進行15此乘法:x16= x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x8 = (x)(x2)(x8),我們先計算 x mod n,x2 mod n, x8 mod n,在計算(x mod n)*(x2mod n)*+2+如果重復計算每個中間結果的平方,得到x2,x4,x8和x16,那么只需要4次乘法即可計算出x16。又比如,對于整數x和n,計算x11mod n。由于x11 = x1(x8 mod n)mod n 。1.b0,則 b =-更一般地,假定我們要計算ab,其中a和b是正整數。若將b表示為二進制數bkbk2.3用公鑰進行

8、有效運算為了加快RSA算法在使用公鑰時的運算速度,通常都會選擇一個特定的e,大多數情況下選e為65 537(216+1),另外兩個常用的選擇是3和17。這些指數里都只有兩個位,所以求冪運算時需要的乘法次數極小化了。然而,若指數太小,如e = 3,RSA 甚至會遭受一些簡單的攻擊。假設有三個不同的RSA用戶,他們都使用指數e=3,但他們的模數n卻各不相同,即n1,n2,n3.現在有一個用戶A以加密方式給他們三個發送了相同的消息M,則三個密文為:C1 = M3 mod n1 ,C2 = M3 mod n2,C3 = M3 mod n3。很有可能n1,n2,n3是兩兩互素的,所以運用中國剩余定理(C

9、RT)可以計算出M3 mod (n1n2n3)。根據RSA的規則,M應該比模數n要小,所以有M3 < (n1n2n3),從而攻擊者只需要計算出M3的三次立方根就可以了。2.4用私鑰進行有效運算我們不能為了計算的效率而簡單地選擇一個小數值的d。D的值太小容易遭受窮舉攻擊和其他形式的密碼分析WIEN90。然而,運用中國剩余定理可以加快運算速度。我們希望計算M = Cd mod n。先定義一些中間結果:Vp=Cd mod p三、軟件的設計3.1軟件總體設計概要:運用Java編寫出一個加密和解密的密鑰對一段明文進行加密和解密來達到隱秘的傳送信息的目的,運用RSA非對稱密碼算法和系統來完成整個設計

10、要求經過上面論述,我們可以將對軟件的要求總結如下: 可以按要求的位數生成非對稱密鑰。 可以保存密鑰和裝載密鑰,將他們拿來加解密 。 可以用指定密鑰以RSA算法加密任意一個文件,加密生成的數據為純文本。 提示信息完整、操作舒適、圖形界面雅觀按上述描述,各層的關系如下:根據以上分析,一般來說,需要進行編碼的程序有RSA密鑰生成 RSA加密解密 對數據進行加密解密操作各環節必要的數據編碼轉換 圖形操作界面。3.2軟件詳細設計程序結構示意圖:界面原型:3.3類與主要函數Privatekey 私鑰類publicKey 公鑰類RSAGeneratorKey 產生N,私鑰,公鑰的類3.4主要代碼packag

11、e com.py.model;import java.math.BigInteger;import java.security.SecureRandom;import java.util.Date;public class RSAGeneratorKey private static BigInteger x; / 存儲臨時的位置變量x,y 用于遞歸private static BigInteger y;/ 歐幾里得擴展算法public static BigInteger ex_gcd(BigInteger a, BigInteger b) if (Value() = 0) x =

12、new BigInteger("1");y = new BigInteger("0");return a;BigInteger ans = ex_gcd(b, a.mod(b);/ 由于我們只求乘法逆元 所以這里使用BigInteger.One,實際中如果需要更靈活可以多傳遞一個參數,表示模的值來代替這里x = x.multiply(BigInteger.ONE.divide(gcd);k = k.abs();BigInteger ans = x.mod(k);if (pareTo(BigInteger.ZERO) < 0)ans = ans.ad

13、d(k);return ans;public static RsaKeyPair generatorKey(int bitlength) SecureRandom random = new SecureRandom();random.setSeed(new Date().getTime();BigInteger bigPrimep, bigPrimeq;while (!(bigPrimep = BigIbablePrime(bitlength, random).isProbablePrime(1) continue;/ 生成大素數pwhile (!(bigPrimeq =

14、BigIbablePrime(bitlength, random).isProbablePrime(1) continue;/ 生成大素數qreturn new RsaKeyPair(publicKey, privateKey);package com.py.action;import com.py.model.RSAGeneratorKey;import com.py.model.RsaKeyPair;public class Dealaction RsaKeyPair keyPair = RSAGeneratorKey.generatorKey(256);public

15、interface CallBack / 為了不拖累主線程public void getResutl(String publickey, String privatekey, String N);).start();package com.py.tool;import java.io.UnsupportedEncodingException;BigInteger encrypted = temp.modPow(key.getB(), key.getN();return Base64.encodeBase64String(encrypted.toByteArray();四、運行與調試4.1運行效果4.2調試問題在調試過程中遇到很多問題,比如如何生成那個大素數,到底應該多少位才比較合適,然后一直在思考,最后用了bigInteger來解決,bigInteger這個類提供了很多好的數據位操作的方法,很實用。五、經驗與總結5.1心

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論