文件加密与解密Java课程设计报告_第1页
文件加密与解密Java课程设计报告_第2页
文件加密与解密Java课程设计报告_第3页
文件加密与解密Java课程设计报告_第4页
文件加密与解密Java课程设计报告_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2020年4月19日文件加密与解密Java课程设计报告文档仅供参考,不当之处,请联系改正。JAVA课程设计 题目: 文件的加密与解密 姓 名: 学 号: 班 级: 日 期: 指导老师分 数目 录TOC o 1-2 h u HYPERLINK file:/E:TDDOWNLOAD计算机与信息工程学院java课程设计报告书.doc l _Toc3122 一、设计思路 PAGEREF _Toc3122 1 HYPERLINK file:/E:TDDOWNLOAD计算机与信息工程学院java课程设计报告书.doc l _Toc7449 二、具体实现 PAGEREF _Toc7449 1 HYPERLI

2、NK file:/E:TDDOWNLOAD计算机与信息工程学院java课程设计报告书.doc l _Toc19644 三、运行调试与分析讨论 PAGEREF _Toc19644 3 HYPERLINK file:/E:TDDOWNLOAD计算机与信息工程学院java课程设计报告书.doc l _Toc6332 四、设计体会与小结 PAGEREF _Toc6332 7 HYPERLINK file:/E:TDDOWNLOAD计算机与信息工程学院java课程设计报告书.doc l _Toc24115 五、参考文献 PAGEREF _Toc24115 8 HYPERLINK file:/E:TDDO

3、WNLOAD计算机与信息工程学院java课程设计报告书.doc l _Toc8923 六、附录 PAGEREF _Toc8923 8设计思路自从Java技术出现以业,有关Java平台的安全性用由Java技术发展所引发的安全性问题,引起了越来越多的关注。当前,Java已经大量应用于各个领域,研究Java的安全性对于更好地利用Java具有深远的意义。使用Java的安全机制设计和实现安全系统更具有重要的应用价值。本课程设计,主要实践Java安全中的JCE模块,包括密钥生成,Cipher对象初始化、加密模式、填充模式、底层算法参数传递,也涉及文件读写与对象输入输出流。二、具体实现本系统经过用户界面接收

4、三个参数:明文文件、密文文件、口令。采用DES加密算法,密码分组链(Cipher Block Chaining,CBC)加密模式,PKCS#5-Padding的分组填充算法。因为CBC涉及到底层算法参数的解密密钥的传递,因此将明文文件中的字节块以密封对象(Sealed Object)的方式加密后,用对象流输出到密文文件,这样就将密文、算法参数、解密密钥三都密封到一个对象中了。口令的hash值作为产生密钥的参数。设计流程图如下所示:文件加密与解密设计流程图本系统中,包含Default,Shares,SecretKey,EncAndDec四个包共6个类组成。定义的几个 参数:MAX_BUF_SIZ

5、E为每次从文件中读取的字节数,也是内存缓冲区的大小;加密算法为DES;加密模式是密码分组链(CBC)模式;分组填充方式是PKCS#5Padding。包和类结构图如下所示:本课程设计,包和类结构图:Package Default - Class JCEDialog/文件加密解密窗口类Package Shares - Class HashDigest、Class byte2hex/密码Hash值生成类、二进制转字符串类Package SecretKey - Class GenerateKey/由密码Hash值生成秘密密钥类Package EncAndDec - Class Dec、Class En

6、c/文件加密、解密类以下为包中的类的方法实现说明Package Shares类结构图Package Shares public class HashDigest密码Hash值生成方类,使用默认构造方法。 public byte HashDigest(String StrPassword)密码Hash值生成方法MessageDigest对象生成,使用类的getInstance(String DigestAlgorithm)方法。1)输入产生摘要的原始数据,使用报文摘要对象MesDigest的update方法,接收byte类型的输入,因此需要交String类型预先转化为byte类型。2)报文摘要的

7、产生能够直接调用报文摘要对象MesDigest的digest方法,也能够将输入的byte类型作为参数而省去 update方法调用。 public class byte2hex二进制转字符串类 public String byte2hex(byte b)该方法接收byte类型的二进制数据。将二进制数据转为字符串,以便于观察和对比,便于调试程序。Package SecretKey类结构图Package SecretKeypublic class GenerateKey由密码Hash值生成秘密密钥类,使用默认构造方法。 Public SecretKey GenerateKey(byte KeyDat

8、a)由密码Hash值生成秘密密钥方法(由hashDigest算法产生byte类型的hash值,再由此hash值生成对称密钥的算法)算法中用到了两个重要的类DESKeySpec,是密码服务提供者“SunJCE”支持的一种DES密钥透明表示,即以适当的格式表示的DES密钥的底层元素。本设计中以输入密钥的hash值生成DESKeySpec对象。SecretKeyFactory是一种密钥转换机制,用于密钥(Key,java.security.key 类型的不透明密钥)与密钥规范(key specification,符合适当的底层密钥元素的透明表示)之间的互相转换。SecretKeyFactory仅作用

9、于秘密密钥(对称密钥),它用于由key specification(DESKeySpec)生成Key(SecretKey)。Package EncAndDec类结构图Package EncAndDec public class Enc文件加密类,使用默认构造方法 public boolean EncryptFile(SecretKey SecKey1,String PlainFilePath1,String CipherFilePath1)文件加密方法,该加密的流程如图-文件加密流程图所示。该过程采用DES块加密算法、密码分组(CBC)加密模式、PKCS#5Padding填充方式。CBC模式需

10、要传递底层算法参数和解密密钥,而SealedObject是解决底层算法参数传递的理想方案与关键。 public class Dec文件解密类,使用默认构造方法 public boolean EncryptFile(SecretKey SecKey2,String PlainFilePath2,String CipherFilePath2)文件解密是文件加密的逆过程,接收相同的三个入口参数,所使用的对象与API有很多相似的关联,其流程与实现只有少数不同之处文件解密以对象输入流(ObjcetInputStream)从密文文件中读取密文对象,用普通文件输出流(FileOutputStream)将解密

11、后的明文文件。解密使用参数SecKey2作用于密文文件中的SealdObject。Cipher对象和底层算法参数都封装在SealdeObject中, 解密语句:buffer2=(byte)SealedObj2.getObject(SecKey2);将密文从读取的SealdeObj2中用解密密钥SecKey2解密出来,解密后的明文暂存于buffer2。图1 文件加密流程图文件加密与解密窗口类结构图: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) /解密按钮事件三、运行调试与分析讨论系统的详细设计代码请查阅附带的代码。以下仅对各个界面进行截图展示:图2系统主界面图 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程序中,显示系统的主界面,如图三所示,主界面有进入其它子功能的按钮,选择相应的按钮便可进入相应的功能。加密功能如图四所示,根据提示输入要加密的明文文件路径、密文文件路径,点击加密,若加密成功将弹出提示框,提示加密成功否则提示解密失败。解密功能如图五所示,根据提示输入要解密的密文文件路径、明文文件路径。点击解密,若解密成功将弹出提示框,提示解密成功否则提示解密失败。图6图8为加密与解密文件的效果

16、图。四、设计体会与小结本次Java课程设计,自己经过查找资料、复习课本、编程调试,写实验报告等环节,进一步掌握了以前学到的知识,而且还学习到Java密码扩展服务(Java Cryptography Extension,JCE)。JCE为加密解密,密钥产生与分配、消息认证码(Message Authentication Code)算法提供框架与实现,支持对称加密、非对称加密、块加密与流加密,也支持安全流与密封对象。另外对SunJCE服务提供者也有所了解。 经过实践的学习,我认到学好计算机要重视实践操作,不但仅是学习java语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,因此后在学习

17、过程中,我会更加注重视实践操作,使自己更好地学好计算机。五、参考文献1朱福喜,唐晓军,傅建明编著.Java项目设计与开发范例.北京.电子工业出版社, .102朱福喜,尹为民等编著.Java语言与面向对象程序设计.武汉:武汉大学出版社, .12 3冯军,程超等编著.JBuilder 9.0程序设计.北京:中国水利水电出版社, .54丁振凡,黎章等编著.Java语言实用教程.北京:北京邮电大学出版社, .85何桥,李肃义等编著.Java程序设计简明教程.北京:中国水利水电出版社, .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值,产生加密密钥boolean EncOK=enc.EncryptFile(SecKey1, PlainFilePath1, CipherFilePath1);/调用文件加密算法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产生密钥算法 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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论