1031030211-杨青山文件加密与解密—Java课程设计报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1JAVA课程设计题目:加密与解密学院:理学院专业:信息管理与信息系统姓名:杨青山班级:10310302学号:10310302112目录JAVA课程设计....................................1一、设计思路...................................3二、具体实现...................................3三、运行调试与分析讨论...........................8四:程序的主要代码:............................11五、设计体会与小结..............................17六、参考文献....................................173一、设计思路自从Java技术出现以业,有关Java平台的安全性用由Java技术发展所引发的安全性问题,引起了越来越多的关注。目前,Java已经大量应用于各个领域,研究Java的安全性对于更好地利用Java具有深远的意义。使用Java的安全机制设计和实现安全系统更具有重要的应用价值。本课程设计,主要实践Java安全中的JCE模块,包括密钥生成,Cipher对象初始化、加密模式、填充模式、底层算法参数传递,也涉及文件读写与对象输入输出流。二、具体实现本系统通过用户界面接收三个参数:明文文件、密文文件、口令。采用DES加密算法,密码分组链(CipherBlockChaining,CBC)加密模式,PKCS#5-Padding的分组填充算法。因为CBC涉及到底层算法参数的解密密钥的传递,所以将明文文件中的字节块以密封对象(SealedObject)的方式加密后,用对象流输出到密文文件,这样就将密文、算法参数、解密密钥三都密封到一个对象中了。口令的hash值作为产生密钥的参数。设计流程图如下所示:设计文件加密解密的界面实现hash算法,用于产生口令的hash值实现由口令hash值产生密钥的算法实现文件加密算法加密按钮事件实现文件解密算法解密按钮事件文件加密与解密设计流程图4本系统中,包含Default,Shares,SecretKey,EncAndDec四个包共6个类组成。定义的几个参数:MAX_BUF_SIZE为每次从文件中读取的字节数,也是内存缓冲区的大小;加密算法为DES;加密模式是密码分组链(CBC)模式;分组填充方式是PKCS#5Padding。包和类结构图如下所示:本课程设计,包和类结构图:PackageDefault-ClassJCEDialog//文件加密解密窗口类PackageShares-ClassHashDigest、Classbyte2hex//密码Hash值生成类、二进制转字符串类PackageSecretKey-ClassGenerateKey//由密码Hash值生成秘密密钥类PackageEncAndDec-ClassDec、ClassEnc//文件加密、解密类以下为包中的类的方法实现说明PackageShares类结构图PackageSharespublicclassHashDigest密码Hash值生成方类,使用默认构造方法。publicbyte[]HashDigest(StringStrPassword)密码Hash值生成方法MessageDigest对象生成,使用类的getInstance(StringDigestAlgorithm)方法。1)输入产生摘要的原始数据,使用报文摘要对象MesDigest的update方法,接收byte[]类型的输入,因此需要交String类型预先转化为byte[]类型。2)报文摘要的产生可以直接调用报文摘要对象MesDigest的digest方法,也可以将输入的byte[]类型作为参数而省去update方法调用。publicclassbyte2hex二进制转字符串类publicStringbyte2hex(byte[]b)该方法接收byte[]类型的二进制数据。将二进制数据转为字符串,以便于观察和对比,便5于调试程序。PackageSecretKey类结构图PackageSecretKeypublicclassGenerateKey由密码Hash值生成秘密密钥类,使用默认构造方法。PublicSecretKeyGenerateKey(byte[]KeyData)由密码Hash值生成秘密密钥方法(由hashDigest算法产生byte[]类型的hash值,再由此hash值生成对称密钥的算法)算法中用到了两个重要的类1)DESKeySpec,是密码服务提供者“SunJCE”支持的一种DES密钥透明表示,即以适当的格式表示的DES密钥的底层元素。本设计中以输入密钥的hash值生成DESKeySpec对象。2)SecretKeyFactory是一种密钥转换机制,用于密钥(Key,java.security.key类型的不透明密钥)与密钥规范(keyspecification,符合适当的底层密钥元素的透明表示)之间的互相转换。SecretKeyFactory仅作用于秘密密钥(对称密钥),它用于由keyspecification(DESKeySpec)生成Key(SecretKey)。6PackageEncAndDec类结构图PackageEncAndDecpublicclassEnc文件加密类,使用默认构造方法publicbooleanEncryptFile(SecretKeySecKey1,StringPlainFilePath1,StringCipherFilePath1)文件加密方法,该加密的流程如图-文件加密流程图所示。该过程采用DES块加密算法、密码分组(CBC)加密模式、PKCS#5Padding填充方式。CBC模式需要传递底层算法参数和解密密钥,而SealedObject是解决底层算法参数传递的理想方案与关键。publicclassDec文件解密类,使用默认构造方法publicbooleanEncryptFile(SecretKeySecKey2,StringPlainFilePath2,StringCipherFilePath2)文件解密是文件加密的逆过程,接收相同的三个入口参数,所使用的对象与API有很多相似的关联,其流程与实现只有少数不同之处1)文件解密以对象输入流(ObjcetInputStream)从密文文件中读取密文对象,用普通文件输出流(FileOutputStream)将解密后的明文文件。2)解密使用参数SecKey2作用于密文文件中的SealdObject。Cipher对象和底层算法参数都封装在SealdeObject中,解密语句:buffer2=(byte[])SealedObj2.getObject(SecKey2);将密文从读取的SealdeObj2中用解密密钥SecKey2解密出来,解密后的明文暂存于buffer2。7接收参数:秘密密钥,明文路径,密文路径生成加密Cipher对象,用“秘密密钥”将该对象初始化为加密模式(ENCRYPT_MODE)生成明文文件对象,密文文件对象明文文件是否为空退出Yes生成文件输入流,对象输出流No从明文文件中读取大小为MAX_BUF_SIZE的字节块到内存中buffer1读取文件是否成功文件读完,关闭文件流退出Yes对buffer1跌明文加密,生成密封对象SealedObject,将密文、算法参数、加密对象封装在一起No将密文(SealedObject)用对象输出流写入密文文件图1文件加密流程图8文件加密与解密窗口类结构图:PublicclassJCEDialogextendsJDialog//文件加密解密窗口类FinalintMAX_BUF_SIZE=1024;StringAlgorithm=”DES”;StringEncryptMode=”CBC”;StringPaddingScheme=”PKCS5Padding”;ImportShares.*Publicbyet[]HashDigest(StringStrPassword)//Shares包,HashDigest类,密码Hash值生成方法ImportSecretKey.*PublicSecretKeyGenerateKey(byte[]KeyData)//SecreKey包,GenerateKey类,由密码Hash值生成秘密密钥方法ImportEncAndDec.*PublicboolenEncryptFile(SecretKeySecKey1,StringPlainFilePath1,StringCipherFilePath1)//EncAndDec包,Enc类,文件加密方法ImportEnAndDec.*PublicboolenDecryptFile(SecretKeySecKey2,StringPlainFilePath2,StringCipherFilePath2)//EncAndDec包,Dec类,文件解密方法publicstaticvoidmain(String[]args)//窗口类主方法体btnEncrypt.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){}}//加密按钮事件btnDecrypt.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){}}//解密按钮事件三、运行调试与分析讨论系统的详细设计代码请查阅附带的代码。以下仅对各个界面进行截图展示:9图2系统主界面图1文件加密界面图2文件解密界面10图3待加密文件Plain1.txt图4Plain1.txt加密后的文件Cipher.txt11图5密文文件Cipher.txt解密后的明文文件Plain2.txt运行JAVA程序中,显示系统的主界面,如图三所示,主界面有进入其他子功能的按钮,选择相应的按钮便可进入相应的功能。加密功能如图四所示,根据提示输入要加密的明文文件路径、密文文件路径,点击加密,若加密成功将弹出提示框,提示加密成功否则提示解密失败。解密功能如图五所示,根据提示输入要解密的密文文件路径、明文文件路径。点击解密,若解密成功将弹出提示框,提示解密成功否则提示解密失败。图6-图8为加密与解密文件的效果图。四:程序的主要代码:主界面模块主要代码JCEDialog.java//加密按钮事件的处理方法btnEncrypt.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){HashDigesthashDigest=newHashDigest();12GenerateKeygenerateKey=newGenerateKey();Encenc=newEnc();//TODOAuto-generatedmethodstubStringPlainFilePath1,CipherFilePath1,Strpasswrod1;PlainFilePath1=txtPlain.getText();CipherFilePath1=txtCipher.getText();//Strpasswrod1=txtKey.getText();Strpasswrod1=newString(txtKey.getPassword());//System.out.println(txtPlain.getText());byte[]KeyData1=hashDigest.HashDigest(Strpasswrod1);//生成密码的HASH值javax.crypto.SecretKeySecKey1=generateKey.GenerateK

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功