简单的文件加密程序java 1(共19页)_第1页
简单的文件加密程序java 1(共19页)_第2页
简单的文件加密程序java 1(共19页)_第3页
简单的文件加密程序java 1(共19页)_第4页
简单的文件加密程序java 1(共19页)_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、 河南(h nn)理工大学计算机科学与技术(jsh)学院课程设计报告(bogo)2014 2015学年第一学期课程名称 网络安全 设计题目 实现加解密程序 姓 名 _ 学 号 _ 专业班级 网络1203 _ 指导教师 _ 2014 年 12 月 29日 目 录1.1设计(shj)目的 21.2设计(shj)要求 22.1设计(shj)前提 22.2关于DES算法的介绍 3 2.3DES算法原理 32.4功能需求33.1系统模块图43.2主函数流程图43.3内部函数流程图54.1程序使用运行55.1关于对程序编写的心得76.1参考文献81.1设计目的通过课程设计,使学生了解高级程序设计语言的结构

2、,逐渐培养学生的编程能力、 用计算机解决实际问题的能力,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。 程序设计的主要任务是要求学生遵循软件开发过程的基本规范,运用结构化程序设计的方法,按照课程设计的题目要求,分析、设计、编写、调试和测试程序及编写设计报告。 本课程设计的目标: 1. 巩固Java面向对象程序设计课程学习的内容和加深学生对基本知识的理解和掌握。同时加深对网络信息安全中的密码技术有了更深得理解。 2. 掌握编程和程序调试的基本技能。 3. 掌握软件设计的方法。 4. 提

3、高运用程序设计解决实际问题的能力。 5. 培养独立思考、 综合运用所学有关相应知识的能力。 6. 强化上机动手(dng shu)编程能力,闯过理论与实践相结合的难关! 1.2设计(shj)要求 1. 分析课程设计题目(tm)的要求,根据所要求的程序功能,画出程序的流程图。 2. 对系统功能模块进行分析,写出详细设计说明文档。 3. 对程序源代码进行调试与测试,使其能正确运行。 4. 设计完成的软件要便于操作和使用。 5. 设计完成后提交课程设计报告。2.1设计前提 通过本学期对网络信息安全这本书的学习,学到了很多关于文件数据安全方面的知识,信息化、网络化普及的今天,给我们带来了诸多方便,但随之

4、而来的安全问题我们不得不重视。这次设计题目是简单的加密小程序,我是用的是java高级编程语言来做代码的实现。首先要了解加密技术;它是电子商务采取的主要的安全保密措施,是最常用的安全保密手段,利用技术可以将数据变为乱码进行传送;到达目的之后再将该文件以同样的手段进行还原也就是解密,其中不会破坏数据的完整性。加密技术包括两个元素:算法和密钥。算法就是将普通的信息与一串数字的结合,产生不可理解的信息密文的步骤,密钥是用来对数据进行编码和解码的一种算法。在安全保密中,可以通过适当的密钥加密技术和管理机制来保证网络的信息通讯安全。2.2关于DES算法的介绍:DES 算法是美国国家标准局在1973年开始研

5、究除国防部门外的计算机系统的数据加密标准;于1973年5月15日和1974年8月27日先后两次向公众真征求加密算法公告。加密算法要达到的目的主要是以下四点:提供高质量的数据保护,防止数据未经授权的泄露和未被察觉的修改;具有较高的复杂性,使得破译开销超过可能获得的利益,同时又要便于理解和掌握。DES密码体制的安全性应该不依赖算法的保密,其安全性仅以加密密钥的保密为基础。实现经济,运行有效并且适用于多种不同的应用。1977年1月,美国政府正式许可以IBM公司设计的方案作为非机密数据的数据加密标准。DES算法已经应用于许多需要安全加密的场合,UNIX的密码保护算法就是以DES算法为基础的。2.3DE

6、S算法工作原理 DES算法是这样工作的:如Mode为加密,则用Key去把数据Date进行加密,生成Date的密码形式作为DES的输入结果;如果Mode为解密,则用Key去把密码形式的数据Date解密,还原为Date的明码形式作为输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行加密,然后以密码形式在公共通信网中传输到通信网络的终点,数据到达目的地后用同样的Key进行解密;再现了核心数据。保证了核心数据的安全传输。 简单地说,算法只不过是加密的两个(lin )技术混乱(hnlun)和扩散的组合。DES基本组件分组是这些技术(jsh)的一个组合。它基于密钥作用于明

7、文,这就是众所周知的轮。DES有十六轮,这意味着在明文分组上16次实施相同的组合技术。DES对64bit的明文分组进行操作。通过一个初始置换,将明文分为左半部分和右半部分,各长32bit然后进行16轮完全相同的迭代,在迭代过程中数据与密钥结合。经过16轮后,左右部分合在一起经过一个置换,该算法就完成了。DES的算法特点:分组比较短,密钥太短,密码生命周期短,运算速度慢。2.4功能需求 1.首先是能够有可视化的图形化界面。 2.能够查看选择本地文件。3.能够随机产生大于等于48位的随机密码。用户自行输入也可以。4.能够将加密后的文件更改后缀名生成到当前文件夹中。5.能够解密曾经加密后的文件。3.

8、1系统模块图文件选择类I/O方法对象 系统模块Random方法密码随机产生类DES加密/解密加密类事件监听器/响应器Java中各种api方法解密类3.2主函数流程图Public static void Main主方法 在java主函数中,通过调用一个类中的方法来实现调用各个类方法,体现了java语言的简洁性和高效性。FileEncrypter 方法show();IO读写方法类File文件操作方法类ActionListener监听器java.awt.Container图形化界面 3.3内部函数流程图3.3 内部(nib)函数流程图开始 输入加密码输入解密码DES方法解密DES方法加密生成指定后缀

9、名的加密文件删除制定后后缀名文件是否继续加密?是否是是否解密? 否结束 4.1程序使用(shyng)运行 当把代码编译好之后,点击运行,系统会弹出如下图界面,然后根据说明就可以实现对指定的文件进行加密了,加密的过程中可以选择任何类型的文件进行加密,既然是加密那么就必须输入加密密码(m m),该加密密码我们设置成48位的了,数字大写英文字母混合的类型;用户也可以自行的输入自己的密码,记住就可以。然后运行加密,这时会在这个文件夹下生成一个后缀名为.tdes文件;那么这就是你加密后的文件。要解密的话只需要选中改后缀名的文件输入密码解密即可。如图一,运行后出现程序界面。图二,选择待加密的文件图三,输入

10、你的密码或者随机(su j)产生 图四,加密(ji m)成功并生成文件图五,解密(ji m)成功 5.1 关于对程序编写(binxi)的心得 这个(zh ge)程序看起来挺简单的,但对于对java语言还是初学者的我,还是显得有些(yuxi)难度的。 在编写的过程中,由于粗心经常出现一些比较简单的错误,比如遗漏逗号、双引号、小括号,以及项目名称,从而导致出现乱码。我是使用的My Eclipse5.0编辑器下编写调试的,通过几次摸索学习对这个软件的使用方法逐渐熟练起来,我以前学过Java面向对象基础设计这个课程,当时只是懵懵懂懂的了解一些,知道了什么是多态什么是继承,接口,api之类的。这次课程设

11、计我觉得可以试试java语言水平了,非常感谢这个课程设计,它能够把我们所学到的网络信息安全这门课和所学的语言深入的结合,在实践中理解了安全的原理以及java代码的实现。有时候会遇到一些错误但不知道错在哪,更不知道怎么解决;看着有错的程序,不知该如何改起!但是,通过上网查询还有在老师、同学的帮助下,我最终还是完成了程序的编写。 经过一个周的网络安全课程设计,我认识到编程是一项很慎密的工作,来不得一点马虎,否则就会给编程工作带来很多不必要的麻烦。 这次的课程设计加深了我对java语言的理解,也了解了加密算法的一些原理和使用方法。并且提高了我查阅相关参考资料和独立分析解决问题以及自己上机动手的能力。

12、 课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。应实际,实践编程的能力。 6.1 参考文件: 网络信息安全 安葳鹏 刘沛骞 主编 Java基础程序设计 吴正江 主编 百度百科 附录(fl)一、源代码:ernal.ws.api.server.Container;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.*;import java.security.*;import java

13、x.crypto.*;import javax.crypto.spec.*;public class FileEncrypter extends JFrame public static final int WIDTH = 550;public static final int HEIGHT = 200;public static void main(String args) FileEncrypter fe = new FileEncrypter();fe.show(); FileEncrypter() this.setSize(WIDTH, HEIGHT);this.setDefaultC

14、loseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(false);this.setTitle(文件(wnjin)加密器(TriDES);java.awt.Container c = this.getContentPane();c.setLayout(new FlowLayout();final FilePanel fp = new FilePanel(文件(wnjin)选择);c.add(fp);final KeyPanel pp = new KeyPanel(密码);c.add(pp);JButton jbE = new JButton

15、(加密(ji m);c.add(jbE);jbE.addActionListener(new ActionListener() public void actionPerformed(ActionEvent event) File file = new File(fp.getFileName();if (file.exists()encrypt(file.getAbsoluteFile(), pp.getKey();elseJOptionPane.showMessageDialog(null, 请选择(xunz)文件!, 提示(tsh),JOptionPane.OK_OPTION););JBu

16、tton jbD = new JButton(解密);c.add(jbD);jbD.addActionListener(new ActionListener() public void actionPerformed(ActionEvent event) File file = new File(fp.getFileName();if (file.exists()decrypt(file.getAbsoluteFile(), pp.getKey();elseJOptionPane.showMessageDialog(null, 请选择文件!, 提示,JOptionPane.OK_OPTION)

17、;);/* * 加密函数 输入: 要加密的文件,密码(由0-F组成,共48个字符,表示3个8位的密码)如: * AD67EA2F3BE6E5ADD368DFE03120B5DF92A8FD8FEC2F0746 其中: AD67EA2F3BE6E5AD * DES密码一 D368DFE03120B5DF DES密码二 92A8FD8FEC2F0746 DES密码三 输出: * 对输入的文件加密后,保存到同一文件夹下增加了.tdes扩展名的文件中。 */private void encrypt(File fileIn, String sKey) try if (sKey.length() = 48

18、) byte bytK1 = getKeyByStr(sKey.substring(0, 16);byte bytK2 = getKeyByStr(sKey.substring(16, 32);byte bytK3 = getKeyByStr(sKey.substring(32, 48);FileInputStream fis = new FileInputStream(fileIn);byte bytIn = new byte(int) fileIn.length();for (int i = 0; i fileIn.length(); i+) bytIni = (byte) fis.rea

19、d();/ 加密(ji m)byte bytOut = encryptByDES(encryptByDES(encryptByDES(bytIn,bytK1), bytK2), bytK3);String fileOut = fileIn.getPath() + .tdes;FileOutputStream fos = new FileOutputStream(fileOut);for (int i = 0; i bytOut.length; i+) fos.write(int) bytOuti);fos.close();JOptionPane.showMessageDialog(this,

20、加密(ji m)成功!, 提示(tsh),JOptionPane.OK_OPTION); elseJOptionPane.showMessageDialog(this, 密码长度必须等于48!, 错误信息JOptionPane.ERROR_MESSAGE); catch (Exception e) e.printStackTrace();/* * 解密函数 输入: 要解密的文件,密码(由0-F组成,共48个字符,表示3个8位的密码)如: * AD67EA2F3BE6E5ADD368DFE03120B5DF92A8FD8FEC2F0746 其中: AD67EA2F3BE6E5AD * DES密码

21、一 D368DFE03120B5DF DES密码二 92A8FD8FEC2F0746 DES密码三 输出: * 对输入的文件解密后,保存到用户指定的文件中。 */private void decrypt(File fileIn, String sKey) try if (sKey.length() = 48) String strPath = fileIn.getPath();if (strPath.substring(strPath.length() - 5).toLowerCase().equals(.tdes)strPath = strPath.substring(0, strPath.

22、length() - 5);else JOptionPane.showMessageDialog(this, 不是(b shi)合法的加密文件(wnjin)!, 提示(tsh),JOptionPane.OK_OPTION);return;JFileChooser chooser = new JFileChooser();chooser.setCurrentDirectory(new File(.);chooser.setSelectedFile(new File(strPath);/ 用户指定要保存的文件int ret = chooser.showSaveDialog(this);if (re

23、t = JFileChooser.APPROVE_OPTION) byte bytK1 = getKeyByStr(sKey.substring(0, 16);byte bytK2 = getKeyByStr(sKey.substring(16, 32);byte bytK3 = getKeyByStr(sKey.substring(32, 48);FileInputStream fis = new FileInputStream(fileIn);byte bytIn = new byte(int) fileIn.length();for (int i = 0; i fileIn.length

24、(); i+) bytIni = (byte) fis.read();/ 解密byte bytOut = decryptByDES(decryptByDES(decryptByDES(bytIn, bytK3), bytK2), bytK1);File fileOut = chooser.getSelectedFile();fileOut.createNewFile();FileOutputStream fos = new FileOutputStream(fileOut);for (int i = 0; i bytOut.length; i+) fos.write(int) bytOuti)

25、;fos.close();JOptionPane.showMessageDialog(this, 解密(ji m)成功!, 提示(tsh),JOptionPane.OK_OPTION); elseJOptionPane.showMessageDialog(this, 密码长度(chngd)必须等于48!, 错误信息,JOptionPane.ERROR_MESSAGE); catch (Exception e) JOptionPane.showMessageDialog(this, 解密失败,请核对密码!, 提示,JOptionPane.OK_OPTION);/* * 用DES方法加密输入的字节

26、 bytKey需为8字节长,是加密的密码 */private byte encryptByDES(byte bytP, byte bytKey) throws Exception DESKeySpec desKS = new DESKeySpec(bytKey);SecretKeyFactory skf = SecretKeyFactory.getInstance(DES);SecretKey sk = skf.generateSecret(desKS);Cipher cip = Cipher.getInstance(DES);cip.init(Cipher.ENCRYPT_MODE, sk)

27、;return cip.doFinal(bytP);/* * 用DES方法解密(ji m)输入的字节 bytKey需为8字节长,是解密(ji m)的密码 */private byte decryptByDES(byte bytE, byte bytKey) throws Exception DESKeySpec desKS = new DESKeySpec(bytKey);SecretKeyFactory skf = SecretKeyFactory.getInstance(DES);SecretKey sk = skf.generateSecret(desKS);Cipher cip = C

28、ipher.getInstance(DES);cip.init(Cipher.DECRYPT_MODE, sk);return cip.doFinal(bytE);/* * 输入密码的字符形式(xngsh),返回字节数组形式。 如输入字符串:AD67EA2F3BE6E5AD 返回字节数组: * 173,103,234,47,59,230,229,173 */private byte getKeyByStr(String str) byte bRet = new bytestr.length() / 2;for (int i = 0; i str.length() / 2; i+) Intege

29、r itg = new Integer(16 * getChrInt(str.charAt(2 * i)+ getChrInt(str.charAt(2 * i + 1);bReti = itg.byteValue();return bRet;/* * 计算(j sun)一个16进制字符(z f)的10进制值 输入(shr):0-F */private int getChrInt(char chr) int iRet = 0;if (chr = 0.charAt(0)iRet = 0;if (chr = 1.charAt(0)iRet = 1;if (chr = 2.charAt(0)iRet

30、 = 2;if (chr = 3.charAt(0)iRet = 3;if (chr = 4.charAt(0)iRet = 4;if (chr = 5.charAt(0)iRet = 5;if (chr = 6.charAt(0)iRet = 6;if (chr = 7.charAt(0)iRet = 7;if (chr = 8.charAt(0)iRet = 8;if (chr = 9.charAt(0)iRet = 9;if (chr = A.charAt(0)iRet = 10;if (chr = B.charAt(0)iRet = 11;if (chr = C.charAt(0)iR

31、et = 12;if (chr = D.charAt(0)iRet = 13;if (chr = E.charAt(0)iRet = 14;if (chr = F.charAt(0)iRet = 15;return iRet;/* * 文件(wnjin)选择组件。 */class FilePanel extends JPanel FilePanel(String str) JLabel label = new JLabel(str);JTextField fileText = new JTextField(35);JButton chooseButton = new JButton(浏览(li

32、 ln).);this.add(label);this.add(fileText);this.add(chooseButton);clickAction ca = new clickAction(this);chooseButton.addActionListener(ca);public String getFileName() JTextField jtf = (JTextField) this.getComponent(1);return jtf.getText();private class clickAction implements ActionListener clickActi

33、on(Component c) cmpt = c;public void actionPerformed(ActionEvent event) JFileChooser chooser = new JFileChooser();chooser.setCurrentDirectory(new File(.);int ret = chooser.showOpenDialog(cmpt);if (ret = JFileChooser.APPROVE_OPTION) JPanel jp = (JPanel) cmpt;JTextField jtf = (JTextField) jp.getCompon

34、ent(1);jtf.setText(chooser.getSelectedFile().getPath();private Component cmpt;/* * 密码生成(shn chn)组件。 */class KeyPanel extends JPanel KeyPanel(String str) JLabel label = new JLabel(str);JTextField fileText = new JTextField(35);JButton chooseButton = new JButton(随机(su j)产生);this.add(label);this.add(fil

35、eText);this.add(chooseButton);clickAction ca = new clickAction(this);chooseButton.addActionListener(ca);/ 返回生成(shn chn)的密码(48个字符长度(chngd))public String getKey() JTextField jtf = (JTextField) this.getComponent(1);return jtf.getText();private class clickAction implements ActionListener clickAction(Component c) cmpt = c;public void actionPerformed(ActionEvent event) try KeyGenerator kg = Ke

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论