版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> JAVA課程設(shè)計</b></p><p> 題目: 文件的加密與解密 </p><p> 姓 名: </p><p> 學(xué) 號: </p><p> 班 級:
2、 </p><p> 日 期: </p><p><b> 目 錄</b></p><p><b> 一、設(shè)計思路1</b></p><p><b> 二、具體實現(xiàn)1</b></p>&
3、lt;p> 三、運行調(diào)試與分析討論3</p><p> 四、設(shè)計體會與小結(jié)7</p><p><b> 五、參考文獻8</b></p><p><b> 六、附錄8</b></p><p><b> 設(shè)計思路</b></p><p&g
4、t; 自從Java技術(shù)出現(xiàn)以業(yè),有關(guān)Java平臺的安全性用由Java技術(shù)發(fā)展所引發(fā)的安全性問題,引起了越來越多的關(guān)注。目前,Java已經(jīng)大量應(yīng)用于各個領(lǐng)域,研究Java的安全性對于更好地利用Java具有深遠的意義。使用Java的安全機制設(shè)計和實現(xiàn)安全系統(tǒng)更具有重要的應(yīng)用價值。</p><p> 本課程設(shè)計,主要實踐Java安全中的JCE模塊,包括密鑰生成,Cipher對象初始化、加密模式、填充模式、底層算法參
5、數(shù)傳遞,也涉及文件讀寫與對象輸入輸出流。</p><p><b> 二、具體實現(xiàn)</b></p><p> 本系統(tǒng)通過用戶界面接收三個參數(shù):明文文件、密文文件、口令。采用DES加密算法,密碼分組鏈(Cipher Block Chaining,CBC)加密模式,PKCS#5-Padding的分組填充算法。因為CBC涉及到底層算法參數(shù)的解密密鑰的傳遞,所以將明文文件中
6、的字節(jié)塊以密封對象(Sealed Object)的方式加密后,用對象流輸出到密文文件,這樣就將密文、算法參數(shù)、解密密鑰三都密封到一個對象中了。口令的hash值作為產(chǎn)生密鑰的參數(shù)。設(shè)計流程圖如下所示:</p><p> 文件加密與解密設(shè)計流程圖</p><p> 本系統(tǒng)中,包含Default,Shares,SecretKey,EncAndDec四個包共6個類組成。定義的幾個 參數(shù):MAX
7、_BUF_SIZE為每次從文件中讀取的字節(jié)數(shù),也是內(nèi)存緩沖區(qū)的大??;加密算法為DES;加密模式是密碼分組鏈(CBC)模式;分組填充方式是PKCS#5Padding。包和類結(jié)構(gòu)圖如下所示:</p><p> 本課程設(shè)計,包和類結(jié)構(gòu)圖:</p><p> 以下為包中的類的方法實現(xiàn)說明</p><p> Package Shares類結(jié)構(gòu)圖</p>&
8、lt;p> Package SecretKey類結(jié)構(gòu)圖</p><p> Package EncAndDec類結(jié)構(gòu)圖</p><p> 圖1 文件加密流程圖</p><p> 文件加密與解密窗口類結(jié)構(gòu)圖:</p><p> 三、運行調(diào)試與分析討論</p><p> 系統(tǒng)的詳細設(shè)計代碼請查閱附帶的代碼。
9、以下僅對各個界面進行截圖展示:</p><p><b> 圖2系統(tǒng)主界面</b></p><p> 圖 4 文件加密界面</p><p> 圖 5 文件解密界面</p><p> 圖 6 待加密文件Plain1.txt</p><p> 圖 7 Plain1.txt加密后的文件Ciphe
10、r.txt</p><p> 圖 8 密文文件Cipher.txt解密后的明文文件Plain2.txt</p><p> 運行JAVA程序中,顯示系統(tǒng)的主界面,如圖三所示,主界面有進入其他子功能的按鈕,選擇相應(yīng)的按鈕便可進入相應(yīng)的功能。加密功能如圖四所示,根據(jù)提示輸入要加密的明文文件路徑、密文文件路徑,點擊加密,若加密成功將彈出提示框,提示加密成功否則提示解密失敗。解密功能如圖五所示,
11、根據(jù)提示輸入要解密的密文文件路徑、明文文件路徑。點擊解密,若解密成功將彈出提示框,提示解密成功否則提示解密失敗。</p><p> 圖6-圖8為加密與解密文件的效果圖。</p><p><b> 四、設(shè)計體會與小結(jié)</b></p><p> 本次Java課程設(shè)計,自己通過查找資料、復(fù)習(xí)課本、編程調(diào)試,寫實驗報告等環(huán)節(jié),進一步掌握了以前學(xué)到
12、的知識,并且還學(xué)習(xí)到Java密碼擴展服務(wù)(Java Cryptography Extension,JCE)。JCE為加密解密,密鑰產(chǎn)生與分配、消息認證碼(Message Authentication Code)算法提供框架與實現(xiàn),支持對稱加密、非對稱加密、塊加密與流加密,也支持安全流與密封對象。另外對SunJCE服務(wù)提供者也有所了解。 通過實踐的學(xué)習(xí),我認到學(xué)好計算機要重視實踐操作,不僅僅是學(xué)習(xí)java語言,還是其它的語言,以
13、及其它的計算機方面的知識都要重在實踐,所以后在學(xué)習(xí)過程中,我會更加注重視實踐操作,使自己更好地學(xué)好計算機。</p><p><b> 五、參考文獻</b></p><p> [1]朱福喜,唐曉軍,傅建明編著.Java項目設(shè)計與開發(fā)范例.北京.電子工業(yè)出版社,2005.10</p><p> [2]朱福喜,尹為民等編著.Java語言與面向?qū)?/p>
14、象程序設(shè)計.武漢:武漢大學(xué)出版社,2002.12 </p><p> [3]馮軍,程超等編著.JBuilder 9.0程序設(shè)計.北京:中國水利水電出版社,2004.5</p><p> [4]丁振凡,黎章等編著.Java語言實用教程..北京:北京郵電大學(xué)出版社,2005.8</p><p> [5]何橋,李肅義等編著.Java程序設(shè)計簡明教程.北京:中國水利水
15、電出版社,2004.9</p><p><b> 六、附錄</b></p><p><b> 程序的主要代碼:</b></p><p> 主界面模塊主要代碼JCEDialog.java</p><p> //加密按鈕事件的處理方法</p><p> btnEncry
16、pt.addActionListener(new ActionListener() {</p><p><b> @Override</b></p><p> public void actionPerformed(ActionEvent e) {</p><p> HashDigest hashDigest=new HashDigest
17、();</p><p> GenerateKey generateKey=new GenerateKey();</p><p> Enc enc=new Enc();</p><p> // TODO Auto-generated method stub</p><p> String PlainFilePath1,CipherFil
18、ePath1,Strpasswrod1;</p><p> PlainFilePath1=txtPlain.getText();</p><p> CipherFilePath1=txtCipher.getText();</p><p> //Strpasswrod1 = txtKey.getText();</p><p> Strp
19、asswrod1 = new String(txtKey.getPassword());</p><p> //System.out.println(txtPlain.getText());</p><p> byte[] KeyData1= hashDigest.HashDigest(Strpasswrod1);//生成密碼的HASH值</p><p> j
20、avax.crypto.SecretKey SecKey1=generateKey.GenerateKey(KeyData1); //由輸入的密碼的hash值,產(chǎn)生加密密鑰</p><p> boolean EncOK=enc.EncryptFile(SecKey1, PlainFilePath1, CipherFilePath1);//調(diào)用文件加密算法</p><p> txtKey
21、.setText("");</p><p> if(EncOK==true)</p><p><b> {</b></p><p> JOptionPane.showMessageDialog(null, "文件加密成功!");</p><p><b> }<
22、;/b></p><p><b> else {</b></p><p> JOptionPane.showMessageDialog(null, "文件加密失敗!");</p><p><b> }</b></p><p><b> }</b>
23、;</p><p><b> });</b></p><p> //解密按鈕事件的處理方法</p><p> btnDecrypt.addActionListener(new ActionListener() {</p><p><b> @Override</b></p>&
24、lt;p> public void actionPerformed(ActionEvent e) {</p><p> // TODO Auto-generated method stub</p><p> HashDigest hashDigest=new HashDigest();</p><p> GenerateKey generateKey=
25、new GenerateKey();</p><p> Dec dec =new Dec();</p><p> String PlainFilePath2,CipherFilePath2,StrPasswrod2;</p><p> PlainFilePath2=txtPlain.getText();</p><p> Cipher
26、FilePath2=txtCipher.getText();</p><p> //StrPasswrod2=txtKey.getText();</p><p> StrPasswrod2=new String(txtKey.getPassword());</p><p> byte[] KeyData2=hashDigest.HashDigest(StrPa
27、sswrod2);</p><p> javax.crypto.SecretKey SecKey2=generateKey.GenerateKey(KeyData2);</p><p> boolean DecOK=dec.DecryptFile(SecKey2, PlainFilePath2, CipherFilePath2);</p><p> txtKe
28、y.setText("");</p><p> if(DecOK==true)</p><p><b> {</b></p><p> JOptionPane.showMessageDialog(null, "文件解密成功!");</p><p><b> }&l
29、t;/b></p><p><b> else {</b></p><p> JOptionPane.showMessageDialog(null, "文件解密失??!");</p><p><b> }</b></p><p><b> }</b&g
30、t;</p><p><b> });</b></p><p> 密碼hash值生成 HashDigest.java</p><p> public class HashDigest {</p><p> public byte[] HashDigest(String StrPassword)</p>
31、<p><b> {</b></p><p> byte[] BytePasswrod=StrPassword.getBytes();</p><p> String DigestAlgorithm ="SHA-1";</p><p> byte[] KeyMaterial ={};</p>
32、<p><b> try</b></p><p><b> {</b></p><p> java.security.MessageDigest MesDigest=MessageDigest.getInstance(DigestAlgorithm);</p><p> MesDigest.updat
33、e(BytePasswrod);</p><p> KeyMaterial=MesDigest.digest();</p><p> return KeyMaterial;</p><p><b> }</b></p><p> catch(java.security.NoSuchAlgorithmExcepti
34、on e1)</p><p><b> {</b></p><p> e1.printStackTrace();</p><p> return null;</p><p><b> }</b></p><p><b> }</b></p
35、><p><b> }</b></p><p> Hash產(chǎn)生密鑰算法 GenrateKey.java</p><p> public class GenerateKey {</p><p> public SecretKey GenerateKey(byte[] KeyData)</p><p&
36、gt;<b> {</b></p><p> String Alogorithm="DES";</p><p><b> try</b></p><p><b> {</b></p><p> javax.crypto.spec.DESKeySpe
37、c DesKeySpec=new DESKeySpec(KeyData);</p><p> javax.crypto.SecretKeyFactory SecKeyFac=SecretKeyFactory.getInstance(Alogorithm);</p><p> javax.crypto.SecretKey secKey=SecKeyFac.generateSecret(D
38、esKeySpec);</p><p> return secKey;</p><p><b> }</b></p><p> catch(java.security.NoSuchAlgorithmException e1)</p><p><b> {</b></p><
39、;p> e1.printStackTrace();</p><p> return null;</p><p><b> }</b></p><p> catch(java.lang.Exception e2)</p><p><b> {</b></p><p&
40、gt; e2.printStackTrace();</p><p> return null;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> 文件加密算法
41、Enc.java</p><p> public class Enc {</p><p> final int MAX_BUF_SIZE=1024;</p><p> String Algorithm="DES";</p><p> String EncryptMode="CBC";</p
42、><p> String PaddingScheme="PKCS5Padding";</p><p> public boolean EncryptFile(SecretKey SecKey1,String PlainFilePath1,String CipherFilePath1)</p><p><b> {</b>
43、</p><p><b> try</b></p><p><b> {</b></p><p> //加密,將明文文件a.txt加密到另一個文件b.txt</p><p> javax.crypto.Cipher Cipher1 = Cipher.getInstance(Algorithm
44、 + "/" + EncryptMode + "/" + PaddingScheme);</p><p> Cipher1.init(Cipher.ENCRYPT_MODE,SecKey1);</p><p> java.io.File PlainFile1=new File(PlainFilePath1);</p><p&g
45、t; java.io.File CipherFile1=new File(CipherFilePath1);</p><p> long FileLen1=PlainFile1.length();</p><p> if(FileLen1<=0)</p><p><b> {</b></p><p> J
46、OptionPane.showMessageDialog(null, "明文文件是空的!");</p><p> return false;</p><p><b> }</b></p><p> java.io.FileInputStream fis1=new FileInputStream(PlainFile1);
47、</p><p> java.io.FileOutputStream fos1=new FileOutputStream(CipherFile1);</p><p> java.io.ObjectOutputStream ObjOS1=new ObjectOutputStream(fos1);</p><p> byte[] buffer1 = new byt
48、e[MAX_BUF_SIZE];</p><p> int i=fis1.read(buffer1);</p><p> while(i!=-1)</p><p><b> {</b></p><p> javax.crypto.SealedObject SealedObj1=new SealedObject(b
49、uffer1, Cipher1);</p><p> ObjOS1.writeObject(SealedObj1);</p><p> i=fis1.read(buffer1);</p><p><b> }</b></p><p> fis1.close();</p><p> Obj
50、OS1.flush();</p><p> ObjOS1.close();</p><p> fos1.close();</p><p> return true;</p><p><b> }</b></p><p> catch(java.security.NoSuchAlgorit
51、hmException e1)</p><p><b> {</b></p><p> e1.printStackTrace();</p><p> return false;</p><p><b> }</b></p><p> catch(javax.cryp
52、to.NoSuchPaddingException e2)</p><p><b> {</b></p><p> e2.printStackTrace();</p><p> return false;</p><p><b> }</b></p><p> ca
53、tch(java.lang.Exception e3)</p><p><b> {</b></p><p> e3.printStackTrace();</p><p> return false;</p><p><b> }</b></p><p><b&
54、gt; }</b></p><p><b> }</b></p><p> 文件解密算法 Dec.java</p><p> public class Dec {</p><p> final int MAX_BUF_SIZE=1024;</p><p> public b
55、oolean DecryptFile(SecretKey SecKey2,String PlainFilePath2,String CipherFilePath2)</p><p><b> {</b></p><p><b> try</b></p><p><b> {</b></p&
56、gt;<p> java.io.File PlainFile2=new File(PlainFilePath2);</p><p> java.io.File CipherFile2=new File(CipherFilePath2);</p><p> long FileLen2=CipherFile2.length();</p><p>
57、if(FileLen2<=0)</p><p><b> {</b></p><p> JOptionPane.showMessageDialog(null, "密文文件是空的!");</p><p> return false;</p><p><b> }</b>
58、;</p><p> java.io.FileInputStream fis2=new FileInputStream(CipherFile2);</p><p> java.io.ObjectInputStream ObjIS2=new ObjectInputStream(fis2);</p><p> java.io.FileOutputStream fo
59、s2=new FileOutputStream(PlainFile2);</p><p> byte[] buffer2=new byte[MAX_BUF_SIZE];</p><p> javax.crypto.SealedObject SealedObj2=null;</p><p> SealedObj2=(SealedObject)ObjIS2.rea
60、dObject();</p><p> while(SealedObj2!=null)</p><p><b> {</b></p><p> buffer2=(byte[])SealedObj2.getObject(SecKey2);</p><p> fos2.write(buffer2);</p>
61、;<p> SealedObj2=(SealedObject)ObjIS2.readObject();</p><p><b> }</b></p><p> ObjIS2.close();</p><p> fis2.close();</p><p> fos2.flush();</p&g
62、t;<p> fos2.close();</p><p> return true;</p><p><b> }</b></p><p> catch(java.security.NoSuchAlgorithmException e1)</p><p><b> {</b>
63、</p><p> e1.printStackTrace();</p><p> return false;</p><p><b> }</b></p><p> catch(java.io.EOFException e2)</p><p><b> {</b>&
64、lt;/p><p> System.out.println("解密完成!");</p><p> return true;</p><p><b> }</b></p><p> catch(java.lang.Exception e3)</p><p><b>
65、 {</b></p><p> e3.printStackTrace();</p><p> return false;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b&g
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計 -- 文件加密與解密
- java文件加密解密課程設(shè)計
- java課程設(shè)計--加密與解密
- java課程設(shè)計---加密和解密
- c語言課程設(shè)計-文件加密解密
- c語言課程設(shè)計-文件加密解密
- 加密與解密課程設(shè)計
- java課程設(shè)計文本文檔的加密與解密
- 基于java的文件加密解密
- 操作系統(tǒng)課程設(shè)計報告--加密與解密
- c語言課程設(shè)計-文件加密解密(含源代碼)
- 《c語言課程設(shè)計》課程設(shè)計--數(shù)據(jù)的加密與解密
- aes課程設(shè)計報告--aes加密解密的實現(xiàn)
- 加密解密程序設(shè)計課程設(shè)計
- c語言課程設(shè)計—數(shù)據(jù)加密解密
- 加密解密文件
- 文件加密解密算法研究與實現(xiàn)——基于usbkey的文件加密解密方案
- c語言課程設(shè)計數(shù)據(jù)的加密與解密
- 微機原理課程設(shè)計--加密解密程序設(shè)計
- 文件加密解密算法研究與實現(xiàn)——基于USBKEY的文件加密解密方案.pdf
評論
0/150
提交評論