文件加密與解密—java課程設(shè)計報告_第1頁
已閱讀1頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論