版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2020年4月19日文件加密與解密Java課程設(shè)計(jì)報(bào)告文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。JAVA課程設(shè)計(jì) 題目: 文件的加密與解密 姓 名: 學(xué) 號(hào): 班 級(jí): 日 期: 指導(dǎo)老師分 數(shù)目 錄TOC o 1-2 h u HYPERLINK file:/E:TDDOWNLOAD計(jì)算機(jī)與信息工程學(xué)院java課程設(shè)計(jì)報(bào)告書.doc l _Toc3122 一、設(shè)計(jì)思路 PAGEREF _Toc3122 1 HYPERLINK file:/E:TDDOWNLOAD計(jì)算機(jī)與信息工程學(xué)院java課程設(shè)計(jì)報(bào)告書.doc l _Toc7449 二、具體實(shí)現(xiàn) PAGEREF _Toc7449 1 HYPERLI
2、NK file:/E:TDDOWNLOAD計(jì)算機(jī)與信息工程學(xué)院java課程設(shè)計(jì)報(bào)告書.doc l _Toc19644 三、運(yùn)行調(diào)試與分析討論 PAGEREF _Toc19644 3 HYPERLINK file:/E:TDDOWNLOAD計(jì)算機(jī)與信息工程學(xué)院java課程設(shè)計(jì)報(bào)告書.doc l _Toc6332 四、設(shè)計(jì)體會(huì)與小結(jié) PAGEREF _Toc6332 7 HYPERLINK file:/E:TDDOWNLOAD計(jì)算機(jī)與信息工程學(xué)院java課程設(shè)計(jì)報(bào)告書.doc l _Toc24115 五、參考文獻(xiàn) PAGEREF _Toc24115 8 HYPERLINK file:/E:TDDO
3、WNLOAD計(jì)算機(jī)與信息工程學(xué)院java課程設(shè)計(jì)報(bào)告書.doc l _Toc8923 六、附錄 PAGEREF _Toc8923 8設(shè)計(jì)思路自從Java技術(shù)出現(xiàn)以業(yè),有關(guān)Java平臺(tái)的安全性用由Java技術(shù)發(fā)展所引發(fā)的安全性問(wèn)題,引起了越來(lái)越多的關(guān)注。當(dāng)前,Java已經(jīng)大量應(yīng)用于各個(gè)領(lǐng)域,研究Java的安全性對(duì)于更好地利用Java具有深遠(yuǎn)的意義。使用Java的安全機(jī)制設(shè)計(jì)和實(shí)現(xiàn)安全系統(tǒng)更具有重要的應(yīng)用價(jià)值。本課程設(shè)計(jì),主要實(shí)踐Java安全中的JCE模塊,包括密鑰生成,Cipher對(duì)象初始化、加密模式、填充模式、底層算法參數(shù)傳遞,也涉及文件讀寫與對(duì)象輸入輸出流。二、具體實(shí)現(xiàn)本系統(tǒng)經(jīng)過(guò)用戶界面接收
4、三個(gè)參數(shù):明文文件、密文文件、口令。采用DES加密算法,密碼分組鏈(Cipher Block Chaining,CBC)加密模式,PKCS#5-Padding的分組填充算法。因?yàn)镃BC涉及到底層算法參數(shù)的解密密鑰的傳遞,因此將明文文件中的字節(jié)塊以密封對(duì)象(Sealed Object)的方式加密后,用對(duì)象流輸出到密文文件,這樣就將密文、算法參數(shù)、解密密鑰三都密封到一個(gè)對(duì)象中了??诹畹膆ash值作為產(chǎn)生密鑰的參數(shù)。設(shè)計(jì)流程圖如下所示:文件加密與解密設(shè)計(jì)流程圖本系統(tǒng)中,包含Default,Shares,SecretKey,EncAndDec四個(gè)包共6個(gè)類組成。定義的幾個(gè) 參數(shù):MAX_BUF_SIZ
5、E為每次從文件中讀取的字節(jié)數(shù),也是內(nèi)存緩沖區(qū)的大小;加密算法為DES;加密模式是密碼分組鏈(CBC)模式;分組填充方式是PKCS#5Padding。包和類結(jié)構(gòu)圖如下所示:本課程設(shè)計(jì),包和類結(jié)構(gòu)圖:Package Default - Class JCEDialog/文件加密解密窗口類Package Shares - Class HashDigest、Class byte2hex/密碼Hash值生成類、二進(jìn)制轉(zhuǎn)字符串類Package SecretKey - Class GenerateKey/由密碼Hash值生成秘密密鑰類Package EncAndDec - Class Dec、Class En
6、c/文件加密、解密類以下為包中的類的方法實(shí)現(xiàn)說(shuō)明Package Shares類結(jié)構(gòu)圖Package Shares public class HashDigest密碼Hash值生成方類,使用默認(rèn)構(gòu)造方法。 public byte HashDigest(String StrPassword)密碼Hash值生成方法MessageDigest對(duì)象生成,使用類的getInstance(String DigestAlgorithm)方法。1)輸入產(chǎn)生摘要的原始數(shù)據(jù),使用報(bào)文摘要對(duì)象MesDigest的update方法,接收byte類型的輸入,因此需要交String類型預(yù)先轉(zhuǎn)化為byte類型。2)報(bào)文摘要的
7、產(chǎn)生能夠直接調(diào)用報(bào)文摘要對(duì)象MesDigest的digest方法,也能夠?qū)⑤斎氲腷yte類型作為參數(shù)而省去 update方法調(diào)用。 public class byte2hex二進(jìn)制轉(zhuǎn)字符串類 public String byte2hex(byte b)該方法接收byte類型的二進(jìn)制數(shù)據(jù)。將二進(jìn)制數(shù)據(jù)轉(zhuǎn)為字符串,以便于觀察和對(duì)比,便于調(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值生成對(duì)稱密鑰的算法)算法中用到了兩個(gè)重要的類DESKeySpec,是密碼服務(wù)提供者“SunJCE”支持的一種DES密鑰透明表示,即以適當(dāng)?shù)母袷奖硎镜腄ES密鑰的底層元素。本設(shè)計(jì)中以輸入密鑰的hash值生成DESKeySpec對(duì)象。SecretKeyFactory是一種密鑰轉(zhuǎn)換機(jī)制,用于密鑰(Key,java.security.key 類型的不透明密鑰)與密鑰規(guī)范(key specification,符合適當(dāng)?shù)牡讓用荑€元素的透明表示)之間的互相轉(zhuǎn)換。SecretKeyFactory僅作用
9、于秘密密鑰(對(duì)稱密鑰),它用于由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)文件加密方法,該加密的流程如圖-文件加密流程圖所示。該過(guò)程采用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)文件解密是文件加密的逆過(guò)程,接收相同的三個(gè)入口參數(shù),所使用的對(duì)象與API有很多相似的關(guān)聯(lián),其流程與實(shí)現(xiàn)只有少數(shù)不同之處文件解密以對(duì)象輸入流(ObjcetInputStream)從密文文件中讀取密文對(duì)象,用普通文件輸出流(FileOutputStream)將解密
11、后的明文文件。解密使用參數(shù)SecKey2作用于密文文件中的SealdObject。Cipher對(duì)象和底層算法參數(shù)都封裝在SealdeObject中, 解密語(yǔ)句:buffer2=(byte)SealedObj2.getObject(SecKey2);將密文從讀取的SealdeObj2中用解密密鑰SecKey2解密出來(lái),解密后的明文暫存于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) /解密按鈕事件三、運(yùn)行調(diào)試與分析討論系統(tǒng)的詳細(xì)設(shè)計(jì)代碼請(qǐng)查閱附帶的代碼。以下僅對(duì)各個(gè)界面進(jìn)行截圖展示:圖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運(yùn)行JAVA程序中,顯示系統(tǒng)的主界面,如圖三所示,主界面有進(jìn)入其它子功能的按鈕,選擇相應(yīng)的按鈕便可進(jìn)入相應(yīng)的功能。加密功能如圖四所示,根據(jù)提示輸入要加密的明文文件路徑、密文文件路徑,點(diǎn)擊加密,若加密成功將彈出提示框,提示加密成功否則提示解密失敗。解密功能如圖五所示,根據(jù)提示輸入要解密的密文文件路徑、明文文件路徑。點(diǎn)擊解密,若解密成功將彈出提示框,提示解密成功否則提示解密失敗。圖6圖8為加密與解密文件的效果
16、圖。四、設(shè)計(jì)體會(huì)與小結(jié)本次Java課程設(shè)計(jì),自己經(jīng)過(guò)查找資料、復(fù)習(xí)課本、編程調(diào)試,寫實(shí)驗(yàn)報(bào)告等環(huán)節(jié),進(jìn)一步掌握了以前學(xué)到的知識(shí),而且還學(xué)習(xí)到Java密碼擴(kuò)展服務(wù)(Java Cryptography Extension,JCE)。JCE為加密解密,密鑰產(chǎn)生與分配、消息認(rèn)證碼(Message Authentication Code)算法提供框架與實(shí)現(xiàn),支持對(duì)稱加密、非對(duì)稱加密、塊加密與流加密,也支持安全流與密封對(duì)象。另外對(duì)SunJCE服務(wù)提供者也有所了解。 經(jīng)過(guò)實(shí)踐的學(xué)習(xí),我認(rèn)到學(xué)好計(jì)算機(jī)要重視實(shí)踐操作,不但僅是學(xué)習(xí)java語(yǔ)言,還是其它的語(yǔ)言,以及其它的計(jì)算機(jī)方面的知識(shí)都要重在實(shí)踐,因此后在學(xué)習(xí)
17、過(guò)程中,我會(huì)更加注重視實(shí)踐操作,使自己更好地學(xué)好計(jì)算機(jī)。五、參考文獻(xiàn)1朱福喜,唐曉軍,傅建明編著.Java項(xiàng)目設(shè)計(jì)與開發(fā)范例.北京.電子工業(yè)出版社, .102朱福喜,尹為民等編著.Java語(yǔ)言與面向?qū)ο蟪绦蛟O(shè)計(jì).武漢:武漢大學(xué)出版社, .12 3馮軍,程超等編著.JBuilder 9.0程序設(shè)計(jì).北京:中國(guó)水利水電出版社, .54丁振凡,黎章等編著.Java語(yǔ)言實(shí)用教程.北京:北京郵電大學(xué)出版社, .85何橋,李肅義等編著.Java程序設(shè)計(jì)簡(jiǎn)明教程.北京:中國(guó)水利水電出版社, .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加密到另一個(gè)文件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. 本站所有資源如無(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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 體系合同評(píng)審過(guò)程的衡量目標(biāo)
- 2025年錦州貨運(yùn)從業(yè)資格證考試模擬
- 2025年北京貨運(yùn)從業(yè)資格證試題答題器
- 電力設(shè)備公司員工停薪留職
- 建筑防貓害安全施工協(xié)議
- 圖書館消毒操作規(guī)程
- 汽車制造空氣凈化合同
- 廠房改造項(xiàng)目租賃承包合同
- 酒店走廊綠植裝飾合作協(xié)議
- 政府信息資產(chǎn)整合辦法
- 期末模擬卷01(全國(guó)適用)-【中職專用】高二語(yǔ)文上學(xué)期職業(yè)模塊期末模擬卷(解析版)
- 漏洞修復(fù)策略優(yōu)化
- 手術(shù)安全培訓(xùn)
- 司機(jī)聘用協(xié)議書與司機(jī)聘用合同
- 汽車吊安全教育培訓(xùn)
- 浙江省寧波市慈溪市2023-2024學(xué)年高二上學(xué)期期末考試 物理 含解析
- 2024七年級(jí)數(shù)學(xué)上冊(cè)第4章相交線與平等線項(xiàng)目學(xué)習(xí)2包裝中的智慧習(xí)題課件新版華東師大版
- 2024湖南田漢大劇院事業(yè)單位招聘若干人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 碼頭安全生產(chǎn)知識(shí)培訓(xùn)
- 漢語(yǔ)閱讀教程第一冊(cè)第十二課
- 老年科護(hù)理查房護(hù)理病歷臨床病案
評(píng)論
0/150
提交評(píng)論