![文件加密與解密Java課程設(shè)計報告_第1頁](http://file4.renrendoc.com/view/818f0495e8f5da59d52dc6e5eed53d53/818f0495e8f5da59d52dc6e5eed53d531.gif)
![文件加密與解密Java課程設(shè)計報告_第2頁](http://file4.renrendoc.com/view/818f0495e8f5da59d52dc6e5eed53d53/818f0495e8f5da59d52dc6e5eed53d532.gif)
![文件加密與解密Java課程設(shè)計報告_第3頁](http://file4.renrendoc.com/view/818f0495e8f5da59d52dc6e5eed53d53/818f0495e8f5da59d52dc6e5eed53d533.gif)
![文件加密與解密Java課程設(shè)計報告_第4頁](http://file4.renrendoc.com/view/818f0495e8f5da59d52dc6e5eed53d53/818f0495e8f5da59d52dc6e5eed53d534.gif)
![文件加密與解密Java課程設(shè)計報告_第5頁](http://file4.renrendoc.com/view/818f0495e8f5da59d52dc6e5eed53d53/818f0495e8f5da59d52dc6e5eed53d535.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、2020年4月19日文件加密與解密Java課程設(shè)計報告文檔僅供參考,不當(dāng)之處,請聯(lián)系改正。JAVA課程設(shè)計 題目: 文件的加密與解密 姓 名: 學(xué) 號: 班 級: 日 期: 指導(dǎo)老師分 數(shù)目 錄TOC o 1-2 h u HYPERLINK file:/E:TDDOWNLOAD計算機與信息工程學(xué)院java課程設(shè)計報告書.doc l _Toc3122 一、設(shè)計思路 PAGEREF _Toc3122 1 HYPERLINK file:/E:TDDOWNLOAD計算機與信息工程學(xué)院java課程設(shè)計報告書.doc l _Toc7449 二、具體實現(xiàn) PAGEREF _Toc7449 1 HYPERLI
2、NK file:/E:TDDOWNLOAD計算機與信息工程學(xué)院java課程設(shè)計報告書.doc l _Toc19644 三、運行調(diào)試與分析討論 PAGEREF _Toc19644 3 HYPERLINK file:/E:TDDOWNLOAD計算機與信息工程學(xué)院java課程設(shè)計報告書.doc l _Toc6332 四、設(shè)計體會與小結(jié) PAGEREF _Toc6332 7 HYPERLINK file:/E:TDDOWNLOAD計算機與信息工程學(xué)院java課程設(shè)計報告書.doc l _Toc24115 五、參考文獻 PAGEREF _Toc24115 8 HYPERLINK file:/E:TDDO
3、WNLOAD計算機與信息工程學(xué)院java課程設(shè)計報告書.doc l _Toc8923 六、附錄 PAGEREF _Toc8923 8設(shè)計思路自從Java技術(shù)出現(xiàn)以業(yè),有關(guān)Java平臺的安全性用由Java技術(shù)發(fā)展所引發(fā)的安全性問題,引起了越來越多的關(guān)注。當(dāng)前,Java已經(jīng)大量應(yīng)用于各個領(lǐng)域,研究Java的安全性對于更好地利用Java具有深遠的意義。使用Java的安全機制設(shè)計和實現(xiàn)安全系統(tǒng)更具有重要的應(yīng)用價值。本課程設(shè)計,主要實踐Java安全中的JCE模塊,包括密鑰生成,Cipher對象初始化、加密模式、填充模式、底層算法參數(shù)傳遞,也涉及文件讀寫與對象輸入輸出流。二、具體實現(xiàn)本系統(tǒng)經(jīng)過用戶界面接收
4、三個參數(shù):明文文件、密文文件、口令。采用DES加密算法,密碼分組鏈(Cipher Block Chaining,CBC)加密模式,PKCS#5-Padding的分組填充算法。因為CBC涉及到底層算法參數(shù)的解密密鑰的傳遞,因此將明文文件中的字節(jié)塊以密封對象(Sealed Object)的方式加密后,用對象流輸出到密文文件,這樣就將密文、算法參數(shù)、解密密鑰三都密封到一個對象中了。口令的hash值作為產(chǎn)生密鑰的參數(shù)。設(shè)計流程圖如下所示:文件加密與解密設(shè)計流程圖本系統(tǒng)中,包含Default,Shares,SecretKey,EncAndDec四個包共6個類組成。定義的幾個 參數(shù):MAX_BUF_SIZ
5、E為每次從文件中讀取的字節(jié)數(shù),也是內(nèi)存緩沖區(qū)的大?。患用芩惴镈ES;加密模式是密碼分組鏈(CBC)模式;分組填充方式是PKCS#5Padding。包和類結(jié)構(gòu)圖如下所示:本課程設(shè)計,包和類結(jié)構(gòu)圖:Package Default - Class JCEDialog/文件加密解密窗口類Package Shares - Class HashDigest、Class byte2hex/密碼Hash值生成類、二進制轉(zhuǎn)字符串類Package SecretKey - Class GenerateKey/由密碼Hash值生成秘密密鑰類Package EncAndDec - Class Dec、Class En
6、c/文件加密、解密類以下為包中的類的方法實現(xiàn)說明Package Shares類結(jié)構(gòu)圖Package Shares public class HashDigest密碼Hash值生成方類,使用默認(rèn)構(gòu)造方法。 public byte HashDigest(String StrPassword)密碼Hash值生成方法MessageDigest對象生成,使用類的getInstance(String DigestAlgorithm)方法。1)輸入產(chǎn)生摘要的原始數(shù)據(jù),使用報文摘要對象MesDigest的update方法,接收byte類型的輸入,因此需要交String類型預(yù)先轉(zhuǎn)化為byte類型。2)報文摘要的
7、產(chǎn)生能夠直接調(diào)用報文摘要對象MesDigest的digest方法,也能夠?qū)⑤斎氲腷yte類型作為參數(shù)而省去 update方法調(diào)用。 public class byte2hex二進制轉(zhuǎn)字符串類 public String byte2hex(byte b)該方法接收byte類型的二進制數(shù)據(jù)。將二進制數(shù)據(jù)轉(zhuǎn)為字符串,以便于觀察和對比,便于調(diào)試程序。Package SecretKey類結(jié)構(gòu)圖Package SecretKeypublic class GenerateKey由密碼Hash值生成秘密密鑰類,使用默認(rèn)構(gòu)造方法。 Public SecretKey GenerateKey(byte KeyDat
8、a)由密碼Hash值生成秘密密鑰方法(由hashDigest算法產(chǎn)生byte類型的hash值,再由此hash值生成對稱密鑰的算法)算法中用到了兩個重要的類DESKeySpec,是密碼服務(wù)提供者“SunJCE”支持的一種DES密鑰透明表示,即以適當(dāng)?shù)母袷奖硎镜腄ES密鑰的底層元素。本設(shè)計中以輸入密鑰的hash值生成DESKeySpec對象。SecretKeyFactory是一種密鑰轉(zhuǎn)換機制,用于密鑰(Key,java.security.key 類型的不透明密鑰)與密鑰規(guī)范(key specification,符合適當(dāng)?shù)牡讓用荑€元素的透明表示)之間的互相轉(zhuǎn)換。SecretKeyFactory僅作用
9、于秘密密鑰(對稱密鑰),它用于由key specification(DESKeySpec)生成Key(SecretKey)。Package EncAndDec類結(jié)構(gòu)圖Package EncAndDec public class Enc文件加密類,使用默認(rèn)構(gòu)造方法 public boolean EncryptFile(SecretKey SecKey1,String PlainFilePath1,String CipherFilePath1)文件加密方法,該加密的流程如圖-文件加密流程圖所示。該過程采用DES塊加密算法、密碼分組(CBC)加密模式、PKCS#5Padding填充方式。CBC模式需
10、要傳遞底層算法參數(shù)和解密密鑰,而SealedObject是解決底層算法參數(shù)傳遞的理想方案與關(guān)鍵。 public class Dec文件解密類,使用默認(rèn)構(gòu)造方法 public boolean EncryptFile(SecretKey SecKey2,String PlainFilePath2,String CipherFilePath2)文件解密是文件加密的逆過程,接收相同的三個入口參數(shù),所使用的對象與API有很多相似的關(guān)聯(lián),其流程與實現(xiàn)只有少數(shù)不同之處文件解密以對象輸入流(ObjcetInputStream)從密文文件中讀取密文對象,用普通文件輸出流(FileOutputStream)將解密
11、后的明文文件。解密使用參數(shù)SecKey2作用于密文文件中的SealdObject。Cipher對象和底層算法參數(shù)都封裝在SealdeObject中, 解密語句:buffer2=(byte)SealedObj2.getObject(SecKey2);將密文從讀取的SealdeObj2中用解密密鑰SecKey2解密出來,解密后的明文暫存于buffer2。圖1 文件加密流程圖文件加密與解密窗口類結(jié)構(gòu)圖:Public class JCEDialog extends JDialog/文件加密解密窗口類 Final int MAX_BUF_SIZE=1024; String Algorithm=”DES”
12、; String EncryptMode=”CBC”; String PaddingScheme=”PKCS5Padding”;Import Shares.* Public byet HashDigest(String StrPassword)/Shares包,HashDigest類,密碼Hash值生成方法Import SecretKey.* Public SecretKey GenerateKey(byte KeyData)/SecreKey包,GenerateKey類,由密碼Hash值生成秘密密鑰方法Import EncAndDec.* Public boolen EncryptFile(
13、SecretKey SecKey1,String PlainFilePath1,String CipherFilePath1)/ EncAndDec包,Enc類,文件加密方法Import EnAndDec.* Public boolen DecryptFile(SecretKey SecKey2,String PlainFilePath2,String CipherFilePath2)/ EncAndDec包,Dec類,文件解密方法public static void main (String args)/窗口類主方法體 btnEncrypt.addActionListener(new Act
14、ionListener() public void actionPerformed(ActionEvent e) /加密按鈕事件 btnDecrypt.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) /解密按鈕事件三、運行調(diào)試與分析討論系統(tǒng)的詳細設(shè)計代碼請查閱附帶的代碼。以下僅對各個界面進行截圖展示:圖2系統(tǒng)主界面圖 SEQ 圖 * ARABIC 4 文件加密界面圖 SEQ 圖 * ARABIC 5 文件解密界面圖 SEQ 圖 * ARABIC 6 待加密文件Plain1.txt
15、圖 SEQ 圖 * ARABIC 7 Plain1.txt加密后的文件Cipher.txt圖 SEQ 圖 * ARABIC 8 密文文件Cipher.txt解密后的明文文件Plain2.txt運行JAVA程序中,顯示系統(tǒng)的主界面,如圖三所示,主界面有進入其它子功能的按鈕,選擇相應(yīng)的按鈕便可進入相應(yīng)的功能。加密功能如圖四所示,根據(jù)提示輸入要加密的明文文件路徑、密文文件路徑,點擊加密,若加密成功將彈出提示框,提示加密成功否則提示解密失敗。解密功能如圖五所示,根據(jù)提示輸入要解密的密文文件路徑、明文文件路徑。點擊解密,若解密成功將彈出提示框,提示解密成功否則提示解密失敗。圖6圖8為加密與解密文件的效果
16、圖。四、設(shè)計體會與小結(jié)本次Java課程設(shè)計,自己經(jīng)過查找資料、復(fù)習(xí)課本、編程調(diào)試,寫實驗報告等環(huán)節(jié),進一步掌握了以前學(xué)到的知識,而且還學(xué)習(xí)到Java密碼擴展服務(wù)(Java Cryptography Extension,JCE)。JCE為加密解密,密鑰產(chǎn)生與分配、消息認(rèn)證碼(Message Authentication Code)算法提供框架與實現(xiàn),支持對稱加密、非對稱加密、塊加密與流加密,也支持安全流與密封對象。另外對SunJCE服務(wù)提供者也有所了解。 經(jīng)過實踐的學(xué)習(xí),我認(rèn)到學(xué)好計算機要重視實踐操作,不但僅是學(xué)習(xí)java語言,還是其它的語言,以及其它的計算機方面的知識都要重在實踐,因此后在學(xué)習(xí)
17、過程中,我會更加注重視實踐操作,使自己更好地學(xué)好計算機。五、參考文獻1朱福喜,唐曉軍,傅建明編著.Java項目設(shè)計與開發(fā)范例.北京.電子工業(yè)出版社, .102朱福喜,尹為民等編著.Java語言與面向?qū)ο蟪绦蛟O(shè)計.武漢:武漢大學(xué)出版社, .12 3馮軍,程超等編著.JBuilder 9.0程序設(shè)計.北京:中國水利水電出版社, .54丁振凡,黎章等編著.Java語言實用教程.北京:北京郵電大學(xué)出版社, .85何橋,李肅義等編著.Java程序設(shè)計簡明教程.北京:中國水利水電出版社, .9六、附錄程序的主要代碼:主界面模塊主要代碼JCEDialog.java/加密按鈕事件的處理方法btnEncrypt
18、.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) HashDigest hashDigest=new HashDigest();GenerateKey generateKey=new GenerateKey();Enc enc=new Enc();/ TODO Auto-generated method stubString PlainFilePath1,CipherFilePath1,Strpasswrod1;PlainFilePath1=txtPlain.ge
19、tText();CipherFilePath1=txtCipher.getText();/Strpasswrod1 = txtKey.getText();Strpasswrod1 = new String(txtKey.getPassword();/System.out.println(txtPlain.getText();byte KeyData1= hashDigest.HashDigest(Strpasswrod1);/生成密碼的HASH值javax.crypto.SecretKey SecKey1=generateKey.GenerateKey(KeyData1); /由輸入的密碼的h
20、ash值,產(chǎn)生加密密鑰boolean EncOK=enc.EncryptFile(SecKey1, PlainFilePath1, CipherFilePath1);/調(diào)用文件加密算法txtKey.setText();if(EncOK=true)JOptionPane.showMessageDialog(null, 文件加密成功!);else JOptionPane.showMessageDialog(null, 文件加密失??!););/解密按鈕事件的處理方法btnDecrypt.addActionListener(new ActionListener() Overridepublic voi
21、d actionPerformed(ActionEvent e) / TODO Auto-generated method stubHashDigest hashDigest=new HashDigest();GenerateKey generateKey=new GenerateKey();Dec dec =new Dec();String PlainFilePath2,CipherFilePath2,StrPasswrod2;PlainFilePath2=txtPlain.getText();CipherFilePath2=txtCipher.getText();/StrPasswrod2
22、=txtKey.getText();StrPasswrod2=new String(txtKey.getPassword();byte KeyData2=hashDigest.HashDigest(StrPasswrod2);javax.crypto.SecretKey SecKey2=generateKey.GenerateKey(KeyData2);boolean DecOK=dec.DecryptFile(SecKey2, PlainFilePath2, CipherFilePath2);txtKey.setText();if(DecOK=true)JOptionPane.showMes
23、sageDialog(null, 文件解密成功!);else JOptionPane.showMessageDialog(null, 文件解密失??!););密碼hash值生成 HashDigest.javapublic class HashDigest public byte HashDigest(String StrPassword)byte BytePasswrod=StrPassword.getBytes();String DigestAlgorithm =SHA-1;byte KeyMaterial =;tryjava.security.MessageDigest MesDigest=
24、MessageDigest.getInstance(DigestAlgorithm);MesDigest.update(BytePasswrod);KeyMaterial=MesDigest.digest();return KeyMaterial;catch(java.security.NoSuchAlgorithmException e1)e1.printStackTrace();return null;Hash產(chǎn)生密鑰算法 GenrateKey.javapublic class GenerateKey public SecretKey GenerateKey(byte KeyData)St
25、ring Alogorithm=DES;tryjavax.crypto.spec.DESKeySpec DesKeySpec=new DESKeySpec(KeyData);javax.crypto.SecretKeyFactory SecKeyFac=SecretKeyFactory.getInstance(Alogorithm);javax.crypto.SecretKey secKey=SecKeyFac.generateSecret(DesKeySpec);return secKey;catch(java.security.NoSuchAlgorithmException e1)e1.
26、printStackTrace();return null;catch(java.lang.Exception e2)e2.printStackTrace();return null;文件加密算法 Enc.javapublic class Enc final int MAX_BUF_SIZE=1024;String Algorithm=DES;String EncryptMode=CBC;String PaddingScheme=PKCS5Padding;public boolean EncryptFile(SecretKey SecKey1,String PlainFilePath1,Str
27、ing CipherFilePath1)try/加密,將明文文件a.txt加密到另一個文件b.txtjavax.crypto.Cipher Cipher1 = Cipher.getInstance(Algorithm + / + EncryptMode + / + PaddingScheme);Cipher1.init(Cipher.ENCRYPT_MODE,SecKey1);java.io.File PlainFile1=new File(PlainFilePath1);java.io.File CipherFile1=new File(CipherFilePath1);long FileL
28、en1=PlainFile1.length();if(FileLen1=0)JOptionPane.showMessageDialog(null, 明文文件是空的!);return false;java.io.FileInputStream fis1=new FileInputStream(PlainFile1);java.io.FileOutputStream fos1=new FileOutputStream(CipherFile1);java.io.ObjectOutputStream ObjOS1=new ObjectOutputStream(fos1);byte buffer1 =
29、new byteMAX_BUF_SIZE;int i=fis1.read(buffer1);while(i!=-1)javax.crypto.SealedObject SealedObj1=new SealedObject(buffer1, Cipher1);ObjOS1.writeObject(SealedObj1);i=fis1.read(buffer1);fis1.close();ObjOS1.flush();ObjOS1.close();fos1.close();return true;catch(java.security.NoSuchAlgorithmException e1)e1.printStackTrace();return false;catch(javax.crypto.NoSuchPaddingException e2)e2.printStackTrace();return false;catch(java.lang.Exception e3)e3.printStackTrace();return false;文件解密算法 Dec.javapublic class Dec final int MAX_BUF_SIZE=1024;public boolean DecryptFi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度健身中心場地租賃及使用權(quán)轉(zhuǎn)讓合同范本
- 2025年度建筑工程鋼筋材料研發(fā)與推廣合同
- 2025年度會議場地租賃及配套服務(wù)一體化合同
- 2025年度國有企業(yè)改制項目合同資產(chǎn)評估與職工權(quán)益保障協(xié)議
- 2025年合同電子化管理與信息安全合同
- 2025年度大型水利工程承包施工合同書
- 2025年度工業(yè)品產(chǎn)業(yè)園區(qū)建設(shè)與運營管理合同
- 2025年度智慧社區(qū)項目預(yù)付款合同范本
- 2025年度城市道路改造工程承包合同補充條款
- 2025年度建筑工程施工現(xiàn)場環(huán)境監(jiān)測服務(wù)合同
- T-CACM 1560.6-2023 中醫(yī)養(yǎng)生保健服務(wù)(非醫(yī)療)技術(shù)操作規(guī)范穴位貼敷
- 2024年全國統(tǒng)一考試高考新課標(biāo)Ⅱ卷數(shù)學(xué)試題(真題+答案)
- 人教版小學(xué)數(shù)學(xué)一年級下冊第1-4單元教材分析
- JTS-215-2018碼頭結(jié)構(gòu)施工規(guī)范
- 2024年長沙衛(wèi)生職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫含答案
- 2024山西省文化旅游投資控股集團有限公司招聘筆試參考題庫附帶答案詳解
- 出租房房東消防培訓(xùn)
- 2024年度-小學(xué)語文教師經(jīng)驗交流
- 加油站廉潔培訓(xùn)課件
- 認(rèn)識比例尺人教版課件
- 2022版義務(wù)教育(生物學(xué))課程標(biāo)準(zhǔn)(附課標(biāo)解讀)
評論
0/150
提交評論