




已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
課程設(shè)計(jì)說(shuō)明書題目: 局域網(wǎng)內(nèi)的文件傳輸-數(shù)字簽名應(yīng)用實(shí)例 院 系: 計(jì)算機(jī)科學(xué)與工程 專業(yè)班級(jí): 信息安全11-2 學(xué) 號(hào): 學(xué)生姓名: 指導(dǎo)教師: 2014年 12 月 14 日 安徽理工大學(xué)課程設(shè)計(jì)(論文)任務(wù)書 計(jì)算機(jī) 院系 計(jì)算機(jī) 教研室學(xué) 號(hào) 學(xué)生姓名 專業(yè)(班級(jí)) 設(shè)計(jì)題目局域網(wǎng)內(nèi)的文件傳輸-數(shù)字簽名應(yīng)用實(shí)例設(shè)計(jì)技術(shù)參數(shù)(1)輸入輸出流,文件的讀取, getInputStream, getOutputStream(2)RSA算法 PublicKey, PrivateKey等等(3)DES算法 getDesString等等(4)MD5算法 getMD5String等等(5)哈希函數(shù)設(shè)計(jì)要求(1)編寫程序文件傳遞前先獲取RSA加密過(guò)程中的私鑰,公鑰,使用hashcode()對(duì)文件進(jìn)行數(shù)字簽名,比較接收到的文件的哈希值,并進(jìn)行與原文件的哈希值比較,若兩個(gè)值相等則文件沒有被修改,否則文件被修改。(2)如果可以的話,可以做成界面顯示的。工作量 要求設(shè)計(jì)說(shuō)明書的字?jǐn)?shù)在3000字以上。工作計(jì)劃2014.12.10 根據(jù)課程設(shè)計(jì)的要求,查找相關(guān)資料,完成需求分析;2014.12.11 進(jìn)行系統(tǒng)的概要設(shè)計(jì);2014.12.12 進(jìn)行系統(tǒng)的詳細(xì)設(shè)計(jì)和源代碼的書寫;2014.12.14 對(duì)系統(tǒng)進(jìn)行調(diào)試分析,寫出課程設(shè)計(jì)報(bào)告。參考資料1 鄭莉編著.java語(yǔ)言程序設(shè)計(jì)(第二版).北京:清華大學(xué)出版社,2011.2 袁然等編著.java案例開發(fā)集錦.北京:電子工業(yè)出版社,2005.3 RSA算法原理(/link?url=f8FEWlbdvKOa3kk-LJDiYmAGcUStZwRF9ANC5aKVTq0Il4EsdR-zJtGOswfqFSBMktHLpkyTV0AsZt6UlzJOKg-pSwsF3e92FHAC5v2Np5q)4 百度文庫(kù)-哈希算法(/view/3ecd005bbe23482fb4da4c12.html)5 百度文庫(kù)-數(shù)字簽名(/link?url=HDThPXnf41WG9m_uhk3V9Coc3FfDn0Sv4DV_7wxrKwCYtrr4_5v1xJ_MLfNZRifN8k3zmPVzWC-AtsHPjRjtY_)指導(dǎo)教師簽字教研室主任簽字2014年12月14日指導(dǎo)教師評(píng)語(yǔ):成績(jī): 指導(dǎo)教師: 年 月 日安徽理工大學(xué)課程設(shè)計(jì)(論文)成績(jī)?cè)u(píng)定表摘要 這個(gè)系統(tǒng)主要是想確保文件的完整性與安全性。在發(fā)送方與接收方之間進(jìn)行文件的數(shù)字簽名的認(rèn)證。對(duì)于將要發(fā)送的文件計(jì)算出文件的MD5摘要值,對(duì)文件進(jìn)行DES加密。把摘要值和DES密鑰用RSA公鑰加密以及給文件進(jìn)行DES加密這都體現(xiàn)了安全性。另外,在接收端再一次的計(jì)算了文件的MD5摘要,并與接收來(lái)的MD5值相比較,用于驗(yàn)證文件的完整性。通過(guò)局域網(wǎng)內(nèi)部使用數(shù)字簽名系統(tǒng),實(shí)現(xiàn)了內(nèi)部信息的安全傳輸,同時(shí)保證了傳輸信息的完整性和不可否認(rèn)性。關(guān)鍵詞:安全性,完整性,摘要驗(yàn)證,數(shù)字簽名目錄121.問(wèn)題描述11.1 問(wèn)題的意義11.2 實(shí)驗(yàn)?zāi)康?2.需求分析13.概要設(shè)計(jì)23.1RSA加密設(shè)計(jì)分析:23.2 數(shù)字簽名的應(yīng)用實(shí)例:34.詳細(xì)設(shè)計(jì)44.2 實(shí)現(xiàn)RSA加密44.3 獲取文件的HashCode74.4 實(shí)現(xiàn)MD5消息摘要74.5 文件的加密84.6 界面的設(shè)計(jì)95.調(diào)試分析95.1 關(guān)于設(shè)計(jì)的思考95.2 關(guān)于界面應(yīng)用的問(wèn)題96.用戶手冊(cè)107.測(cè)試結(jié)果108.設(shè)計(jì)體會(huì)12參考文獻(xiàn)131. 問(wèn)題描述1.1 問(wèn)題的意義通過(guò)本程序了解各類加密算法的使用, 了解數(shù)字簽名的步驟,在文件傳輸過(guò)程中實(shí)現(xiàn)對(duì)文件完整性的判斷,對(duì)各類加密算法有更深一步的了解。(1) 加深對(duì)RSA,MD5算法的理解。(2) 對(duì)輸入輸出流掌握的更加熟練,對(duì)RSA,MD5的方法基本掌握。(3) 添加功能使得有界面,并且使得用戶使用更加順手。(4)了解局域網(wǎng)內(nèi)數(shù)字簽名的使用原理及其過(guò)程。1.2 實(shí)驗(yàn)?zāi)康模?) 了解RSA加密是的步驟。(2) 了解數(shù)字簽名的步驟。(3) 使用數(shù)字簽名完成對(duì)文件完整性的判斷。2. 需求分析在現(xiàn)在社會(huì)中,局域網(wǎng)應(yīng)用非常廣泛,在局域網(wǎng)內(nèi)進(jìn)行文件傳輸時(shí),用戶不一定發(fā)現(xiàn)文件被修改,通過(guò)應(yīng)用數(shù)字簽名進(jìn)行驗(yàn)證,我們可以確定文件在傳輸過(guò)程中是否被修改。通過(guò)比較傳輸前后文件的哈希值,可以看出文件文件是否被修改過(guò),同時(shí)保證了信息的完整性和不可否認(rèn)性。我們現(xiàn)在來(lái)模擬這種情況,使得數(shù)據(jù)在加密的過(guò)程中被傳輸, 然后我們更加深刻了解各類加密算法的應(yīng)用場(chǎng)景。3. 概要設(shè)計(jì)3.1RSA加密設(shè)計(jì)分析: 數(shù)字簽名是使用了公鑰加密技術(shù)并用于鑒別數(shù)字信息的方法。簡(jiǎn)單地說(shuō),數(shù)字簽名是附加在數(shù)據(jù)單元上的一些數(shù)據(jù),或是對(duì)數(shù)據(jù)單元所作的密碼變換。這種數(shù)據(jù)或變換允許數(shù)據(jù)單元的接收者用以確認(rèn)數(shù)據(jù)單元的來(lái)源和數(shù)據(jù)單元的完整性并保護(hù)數(shù)據(jù),防止被他人進(jìn)行偽造。它是對(duì)電子形式的消息進(jìn)行簽名的一種方法,一個(gè)簽名消息能在一個(gè)通信網(wǎng)絡(luò)中傳輸。文件傳輸前,要先使用RSA算法獲取明文文件的公鑰和私鑰,對(duì)明文文件進(jìn)行加密,計(jì)算得到文件的哈希值,發(fā)送方對(duì)文件的哈希值進(jìn)行簽名,接收方接收文件之后,先進(jìn)行數(shù)字簽名的認(rèn)證,若是收到的文件的哈希值與發(fā)送方發(fā)送文件的哈希值一致,則說(shuō)明該文件是發(fā)送方發(fā)送的文件。消息摘要1Hash函數(shù)明文文件明文文件明文文件發(fā)送比 較數(shù)字簽名數(shù)字簽名Hash函數(shù)非對(duì)稱加密算法 非對(duì)稱加密算法 消息摘要2消息摘要簽名者私鑰簽名者公鑰簽名驗(yàn)證圖 1數(shù)字簽名的流程圖3.2 數(shù)字簽名的應(yīng)用實(shí)例: 假如現(xiàn)在 Alice 向 Bob 傳送數(shù)字信息,為了保證信息傳送的保密性、真實(shí)性、完整性和不可否認(rèn)性,需要對(duì)傳送的信息進(jìn)行數(shù)字加密和簽名,其傳送過(guò)程為:1.Alice 準(zhǔn)備好要傳送的數(shù)字信息(明文);2.Alice 對(duì)數(shù)字信息進(jìn)行哈希運(yùn)算,得到一個(gè)信息摘要;3.Alice 用自己的私鑰對(duì)信息摘要進(jìn)行加密得到 Alice 的數(shù)字簽名,并將其附在數(shù)字信息上;4.Alice 隨機(jī)產(chǎn)生一個(gè)加密密鑰,并用此密碼對(duì)要發(fā)送的信息進(jìn)行加密,形成密文;5.Alice 用 Bob 的公鑰對(duì)剛才隨機(jī)產(chǎn)生的加密密鑰進(jìn)行加密,將加密后的 DES 密鑰連同密文一起傳送給Bob;6.Bob 收到 Alice 傳送來(lái)的密文和加密過(guò)的 DES 密鑰,先用自己的私鑰對(duì)加密的 DES 密鑰進(jìn)行解密,得到 Alice隨機(jī)產(chǎn)生的加密密鑰;7.Bob 然后用隨機(jī)密鑰對(duì)收到的密文進(jìn)行解密,得到明文的數(shù)字信息,然后將隨機(jī)密鑰拋棄;8.Bob 用 Alice 的公鑰對(duì) Alice 的數(shù)字簽名進(jìn)行解密,得到信息摘要;9.Bob 用相同的哈希算法對(duì)收到的明文再進(jìn)行一次哈希運(yùn)算,得到一個(gè)新的信息摘要;10.Bob 將收到的信息摘要和新產(chǎn)生的信息摘要進(jìn)行比較,如果一致,說(shuō)明收到的信息沒有被修改過(guò)。4. 詳細(xì)設(shè)計(jì)4.1 加密算法獨(dú)立封裝類(1) MD5消息摘要的獨(dú)立封裝(2) RSA加密算法的獨(dú)立封裝(3) 文件哈希值算法的獨(dú)立封裝4.2 實(shí)現(xiàn)RSA加密 RSA算法是一種非對(duì)稱密碼算法,所謂非對(duì)稱,就是指該算法需要一對(duì)密鑰,使用其中一個(gè)加密,則需要用另一個(gè)才能解密。RSA的算法涉及三個(gè)參數(shù),n、e1、e2。其中,n是兩個(gè)大質(zhì)數(shù)p、q的積,n的二進(jìn)制表示時(shí)所占用的位數(shù),就是所謂的密鑰長(zhǎng)度。e1和e2是一對(duì)相關(guān)的值,e1可以任意取,但要求e1與(p-1)*(q-1)互質(zhì);再選擇e2,要求(e2*e1)mod(p-1)*(q-1)=1。(n,e1),(n,e2)就是密鑰對(duì)。其中(n,e1)為公鑰,(n,e2)為私鑰。RSA加解密的算法完全相同,設(shè)A為明文,B為密文,則:A=Be2 mod n;B=Ae1 mod n;(公鑰加密體制中,一般用公鑰加密,私鑰解密)e1和e2可以互換使用,即:A=Be1 mod n;B=Ae2 mod n;開始輸入a,b,caba baca c結(jié)束輸出a圖 2RSA算法的流程圖在本次課程設(shè)計(jì)中,文件的數(shù)字簽名是在index.java中實(shí)現(xiàn)的。在該類中實(shí)現(xiàn)了三個(gè)功能:1) 生成一對(duì)密鑰,即公鑰和私鑰,對(duì)于密鑰的保存可以使用對(duì)象流的方式進(jìn)行保留和傳送。2) 編寫發(fā)送者的功能,首先通過(guò)私鑰加密待輸出數(shù)據(jù)Data,并輸出Data和簽名后的Data。3) 編寫接受者的功能,使用發(fā)送者的公鑰來(lái)驗(yàn)證發(fā)過(guò)來(lái)的Data,判斷簽名的合法性。在本次設(shè)計(jì)中,現(xiàn)將兩個(gè)密鑰作為屬性封裝在類RSAKey中,如下所示:public class RSAKey private String priKey; private String pubKey;/構(gòu)造器 public RSAKey() public RSAKey(String priKey,String pubKey) this.priKey = priKey; this.pubKey = pubKey; /屬性封裝 public void setPriKey(String priKey) this.priKey=priKey; public String getPrikey() return this.priKey; public void setPubKey(String pubKey) this.pubKey=pubKey; public String getPubKey() return this.pubKey; 使用RSA加密獲取了兩個(gè)密鑰pubKey,priKey:public class GenerateKeyPair public RSAKey Genenate() RSAKey rsa = new RSAKey();try java.security.KeyPairGenerator keygen = java.security.KeyPairGenerator.getInstance(RSA); SecureRandom secrand = new SecureRandom(); secrand.setSeed(21cn.getBytes(); / keygen.initialize(1024, secrand); KeyPair keys = keygen.genKeyPair(); PublicKey pubkey = keys.getPublic(); PrivateKey prikey = keys.getPrivate(); rsa.setPubKey(bytesToHexStr(pubkey.getEncoded(); rsa.setPriKey(bytesToHexStr(prikey.getEncoded(); System.out.println(pubKey= + rsa.getPubKey(); System.out.println(priKey= + rsa.getPrikey(); System.out.println(寫入對(duì)象pubkeys ok); System.out.println(生成密鑰對(duì)成功); return rsa; catch (java.lang.Exception e) e.printStackTrace(); System.out.println(生成密鑰對(duì)失敗); ; return null; /將字節(jié)數(shù)組轉(zhuǎn)換為字符串public static final String bytesToHexStr(byte bcd) StringBuffer s = new StringBuffer(bcd.length * 2); for (int i = 0; i 4) & 0x0f); s.append(bcdLookupbcdi & 0x0f); return s.toString(); /將字符串轉(zhuǎn)換為字節(jié)數(shù)組public static final byte hexStrToBytes(String s) byte bytes;bytes = new bytes.length() / 2; for (int i = 0; i bytes.length; i+) bytesi = (byte) Integer.parseInt(s.substring(2 * i, 2 * i + 2), 16); return bytes; private static final char bcdLookup = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f ; 4.3 獲取文件的HashCode哈希算法將任意長(zhǎng)度的二進(jìn)制值映射為較短的固定長(zhǎng)度的二進(jìn)制值,這個(gè)小的二進(jìn)制值稱為哈希值。哈希值是一段數(shù)據(jù)唯一且極其緊湊的數(shù)值表示形式。如果散列一段明文而且哪怕只更改該段落的一個(gè)字母,隨后的哈希都將產(chǎn)生不同的值。要找到散列為同一個(gè)值的兩個(gè)不同的輸入,在計(jì)算上是不可能的,所以數(shù)據(jù)的哈希值可以檢驗(yàn)數(shù)據(jù)的完整性。一般用于快速查找和加密算法。4.4 實(shí)現(xiàn)MD5消息摘要在介紹MD5算法之前,先介紹下哈希函數(shù)。哈希函數(shù)(HASH)的運(yùn)算原理為:任意輸入一個(gè)任何長(zhǎng)度的任何字符串,通過(guò)哈希函數(shù)運(yùn)算之后返回一串固定長(zhǎng)度的字符串,該字符串即稱為HASH值,用于計(jì)算哈希值的單向HASH函數(shù)將用于產(chǎn)生目標(biāo)信息摘要。使用HASH函數(shù)主要可以解決兩個(gè)問(wèn)題:第一,我們無(wú)法從經(jīng)過(guò)哈希函數(shù)產(chǎn)生的哈希值反向計(jì)算出運(yùn)算前的信息原文;第二,無(wú)法查找兩個(gè)經(jīng)HASH操作后生成相同HASH值的不同原文。因此利用哈希函數(shù),在數(shù)字簽名中就可以解決驗(yàn)證簽名和用戶身份驗(yàn)證、不可抵賴性的問(wèn)題。 由于信息摘要能簡(jiǎn)要地描述了一份較長(zhǎng)的信息或文件,因此信息摘要被稱為“數(shù)字指紋”。對(duì)于某一個(gè)文件原文,產(chǎn)生的信息摘要是唯一的。同時(shí),也由于我們無(wú)法逆向計(jì)算出原文,信息摘要也就不怕被公開,即使公開,也無(wú)法得到原文信息。MD2,MD4和MD5算法就是一種被廣泛使用的HASH函數(shù),是由Ron Rivest 設(shè)計(jì)的專門用于加密處理的單散列函數(shù),通過(guò)MD5算法運(yùn)算之后將產(chǎn)生一個(gè)128位(16字節(jié))的信息摘要,除非使用暴力破解,沒能找到其他好的方法,而一般計(jì)算機(jī)運(yùn)算能力暴力破解時(shí)間一般需要一千多年之久,因此MD5算法是一種優(yōu)秀的加密算法。本次設(shè)計(jì)中使用的是MD5算法實(shí)現(xiàn)的:String inStr = this.jTextField4.getText();MessageDigest md5 = null;md5 = MessageDigest.getInstance(KEY_ALGORITHM);char charArray = inStr.toCharArray();byte byteArray = new bytecharArray.length;for (int i = 0; i charArray.length; i+) byteArrayi = (byte) charArrayi;byte md5Bytes = md5.digest(byteArray);StringBuffer hexValue = new StringBuffer();for (int i = 0; i md5Bytes.length; i+) int val = (int) md5Bytesi) & 0xff; if (val 16) hexValue.append(0); hexValue.append(Integer.toHexString(val); this.jTextField5.setText(hexValue.toString();4.5 文件的加密這里文件的加密是比較簡(jiǎn)單的,主要就是文件的輸出和輸入,主要就是利用java中常用的一些I/O流中包含的一些函數(shù),例如hashCode(),setSeed(),genKeyPair(),getPublic(),getPrivate()函數(shù)等,還有一些主要的類例如BufferedReader,F(xiàn)ileReader類等。4.6 界面的設(shè)計(jì)在這里的界面設(shè)計(jì)中,我只設(shè)計(jì)了一個(gè)界面如下圖3所示,在該界面中,將數(shù)字簽名的步驟完整的顯示出來(lái)。第一步:使用RSA算法得到私鑰和公鑰;第二步:選擇要傳輸?shù)奈募?;第三步:獲取該文件的哈希值;第四步:對(duì)該文件的哈希值進(jìn)行簽名;第五步:選擇接收到的文件;第六步:獲取該接收到的文件的哈希值;第七步:比較兩個(gè)哈希值是否一致;5. 調(diào)試分析5.1 關(guān)于設(shè)計(jì)的思考我覺在進(jìn)行編寫代碼是應(yīng)該盡力避免代碼的冗余性,一些經(jīng)常使用到的功能應(yīng)該進(jìn)行封裝,以便我們?cè)诰帉懘a過(guò)程中的調(diào)用,我們應(yīng)盡量減少代碼量,達(dá)到以最少的代碼實(shí)現(xiàn)我們所要達(dá)到的功能,在創(chuàng)建類時(shí)應(yīng)將類中的數(shù)據(jù)成員盡可能的進(jìn)行封裝,保證了數(shù)據(jù)的安全性。5.2 關(guān)于界面應(yīng)用的問(wèn)題在這次設(shè)計(jì)中,界面可以說(shuō)是最簡(jiǎn)單明了的,我使用了NetBeans IDE 8.0軟件實(shí)現(xiàn)的。在該軟件中很多代碼都是自動(dòng)生成的,所以說(shuō)代碼有一定的冗余性,但是具體的功能都一一實(shí)現(xiàn)了。6. 用戶手冊(cè)1 首先是運(yùn)行環(huán)境的配置:jdk 1.8 + NetBeans IDE 8.0 2 設(shè)計(jì)界面3 編寫代碼 4 運(yùn)行程序5. 程序運(yùn)行后,就可以進(jìn)行數(shù)字簽名了7. 測(cè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆甘肅省武威六中高一下化學(xué)期末經(jīng)典試題含解析
- 2025年中國(guó)折疊人字梯行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 城市共用弱電管網(wǎng)可行性研究報(bào)告
- 2025年中國(guó)南寧房地產(chǎn)行業(yè)發(fā)展運(yùn)行現(xiàn)狀及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 安全生產(chǎn)領(lǐng)導(dǎo)會(huì)議內(nèi)容
- 教育科技開啟智慧辦公新紀(jì)元
- 醫(yī)療培訓(xùn)新方向基于AI的個(gè)性化學(xué)習(xí)策略研究
- 為未來(lái)鋪路孩子健康教育的必要性與方法探索
- 大學(xué)生實(shí)訓(xùn)中如何運(yùn)用教育心理學(xué)提高溝通效率
- 教育基金與科技創(chuàng)新的融合發(fā)展
- 青海省西寧市《職業(yè)能力測(cè)試》事業(yè)單位國(guó)考真題
- 溝通中的提問(wèn)技巧課件
- 2023年浙江黃龍?bào)w育發(fā)展有限公司招聘筆試模擬試題及答案解析
- 外科學(xué)骨折概論課件
- 阿片類藥物鎮(zhèn)痛機(jī)制課件
- 產(chǎn)品成本核算流程圖
- 二等水準(zhǔn)測(cè)量記錄表
- 母線槽安裝檢驗(yàn)批質(zhì)量驗(yàn)收記錄
- 生物吸附課件
- 游泳池水質(zhì)檢測(cè)記錄表
- 臨時(shí)占道申請(qǐng)書(精品)
評(píng)論
0/150
提交評(píng)論