综合实践课程设计基于JAVA的文件加密解密.doc

上传人:仙人指路1688 文档编号:2387600 上传时间:2023-02-17 格式:DOC 页数:28 大小:1.42MB
返回 下载 相关 举报
综合实践课程设计基于JAVA的文件加密解密.doc_第1页
第1页 / 共28页
综合实践课程设计基于JAVA的文件加密解密.doc_第2页
第2页 / 共28页
综合实践课程设计基于JAVA的文件加密解密.doc_第3页
第3页 / 共28页
综合实践课程设计基于JAVA的文件加密解密.doc_第4页
第4页 / 共28页
综合实践课程设计基于JAVA的文件加密解密.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《综合实践课程设计基于JAVA的文件加密解密.doc》由会员分享,可在线阅读,更多相关《综合实践课程设计基于JAVA的文件加密解密.doc(28页珍藏版)》请在三一办公上搜索。

1、综合实践课程设计题 目 基于java的文件加密解密设计学 院 通信与电子工程学院 专业班级 通信工程112班 学生姓名 张 指导教师 2014年 12 月 31摘要自从Java技术出现以业,有关Java平台的安全性用由Java技术发展所引发的安全性问题,引起了越来越多的关注。目前,Java已经大量应用于各个领域,研究Java的安全性对于更好地利用Java具有深远的意义。使用Java的安全机制设计和实现安全系统更具有重要的应用价值。本课程设计,一共有四个模块分别为窗口模块、登录模块、加密模块、解密模块,其中加密、解密模块是两个核心模块。实现了带指定用户登录窗口并且登录后登录窗口自动关闭,运用“a

2、b互换”的简单算法实现对文件加密解密,对文件加密后原文件自动删除,对文件解密后加密后的文件自动删除的完整的文件加密解密设计。目前,用于文件加密解密的方法有很多,但大多数比较复杂,不太适合于对容量较大的文件进行加密,本次用Java设计的文件加密解密方法简单,运行时间短,适合对大容量的文件进行加密,有很高的利用价值。关键词:窗口模块;登录模块;加密模块;解密模块;算法AbstractSince the advent of Java technology in industry, about the safety of the Java platform used by Java technolog

3、y development caused by security issues, has attracted more and more attention. At present, the Java has a lot of applications in various fields, research the Java security for better use of Java has far-reaching significance. Security mechanism design and implementation using Java security system h

4、as important application value This course design, a total of four modules respectively window module, login module, encryption, decryption module, the module, the encryption and decryption module is two core modules Implements the specified user login window and login window automatically shut down

5、 after the login, using the ab swap simple algorithm to decrypt the file encryption, the original file automatically deleted after the file encryption, to decrypt the files encrypted files automatically deleted after complete file encryption to decrypt design. At present, used in file encryption to

6、decrypt method are many, but most of the complex, is not suitable for the large capacity of file is encrypted, this design in the Java file encryption to decrypt method is simple, short operation time, suitable for large capacity file is encrypted, has very high use value. Keywords: window module; T

7、he login module; Encryption module; Decryption module; algorithm 目 录摘要IAbstractII第1章绪论11.1 概述11.2 研究现状1 1.3应用现状2第2章 系统整体设计思路42.1 程序操作流程图42.2 实现整体功能简介5第3章 系统各模块的简介63.1 窗口操作模块63.1.1窗口设计过程63.1.2实现所用关键代码简述63.2 登录操作模块73.2.1登录设计过程73.2.2实现所用关键代码简述73.3 加密操作模块83.3.1加密设计过程93.3.2实现所用关键代码简述93.4 解密操作模块103.4.1解密设

8、计过程103.4.2实现所用关键代码简述10第4章 运行调试124.1 加密模块124.2 解密模块13参考文献16附录17致谢23 第1章绪论1.1 概述自从Java技术出现以后,有关Java技术发展所引发的安全性问题,引起了越来越多的关注。Java语言具有简单、安全、可移植、面向对象、多线程、体系结构中立、高性能、分布式和动态等主要特点。Java是一门很优秀的编程语言,是目前软件设计中极为健壮的编程语言。Java不仅可以用来开发大型的应用程序,而且特别适合Internet的应用开发。Java确实具备了“一次写成,处处运行”的特点,所以,Java已经成为网络时代最重要的编程语言之一。目前,J

9、ava已经大量应用于各个领域,研究Java的安全性对于更好地利用Java具有深远的意义。使用Java的安全机制设计和实现安全系统更具有重要的应用价值。本程序充分利用Java语言的特点,针对当下社会比较重视的文件加密,设计了本程序。1.2 研究现状几十年前IT技术的出现给信息的传播方式和人与人之间、国家之间甚至整个世界的交流带来了很多变化。如今,随着密码分析方面新技术的激增,信息安全是包治百病的灵丹妙药。 每个人都可以获得公开的算法,没人能保证算法不被一些组织或潜在攻击者所破解1。唯一能够确定的,或有理由确定的是,根据一些学术文献所描述,一个攻击者至少是在同一水平上破解密码。 事实上,保护文件安

10、全的需要变得不仅仅是必要,因此便有了使用AES和MD5对正常文件进行加密解密的研究这篇论文中的想法。这是因为AES是一个最新的加密算法,能够更有效地保护文件。同样值得注意的是,整个研究中使用了DES密码,因为不论何时数据存储的问题被提出来,它都是被使用的最常见和最基本的密码。因此,可能一个算法不公开的自定义密码,如果能够设计和测试得很好,它也可以适合于存储单个用户在磁盘上的敏感数据,或者也可以使用带有强密钥的混合加密算法。 在描述整个加密过程中,我们使用HHEA算法来验证加密消息“hi”的过程。整个过程包括了生成密钥的随机向量(V)的定义,之后这个向量会被初始化2。 在整个研究工作中,着重强调

11、了三篇综述文章和算法,首先,可以使我们更加理解混合隐藏加密算法的详细流程;其次,可以使我们通过加密算法的实现性能比较来检查MD5和AES的强度是否超过DES和3DES加密;最后,提出了AES的综合设计,它是基于一些适合关键硬件应用的架构,如智能卡、PDA和移动电话等。 在我们的研究中,为了生成一个结果文件,并且经过哈希和用软件进行强加密,AES和MD5在加密过程所使用的策略应遵循一些步骤。 我们的应用程序最重要的一个方面是加密过程那些元素的介入以产生一个混杂哈希的结果,这能够避免一些窃听者恶意操作产生的欺骗。 由于二进制、文本和任何其它文件类型都能被成功加密,加密的结果显示了这个软件能提供大规

12、模的文件加密3。1.3应用现状随着网络技术的不断发展,人们的个人信息、网络间的文件传电子商务等方面都需要大力的保护,文件加密技术也就随之产生。文件加密解密是科技飞速发展中的通信安全保密问题的最终结果,无论是当今还是未来计算机信息的保密问题显得越来越重要。无论是个人信息通信还是电子商务发展,都迫切需要保证Internet网上信息传输的安全。信息安全已不仅仅局限于政治,军事以及外交领域,现在与我们的日常生活息息相关。现在,密码学理论和技术已得到迅速的发展,它是信息科学和技术中的一个重要研究领域。信息安全的核心是密码技术。文件加密是一种常见的密码学应用。文件加密主要是由加密算法实现,加密算法有多种,

13、常见的有RSA、DES、MD5等4。 第2章 系统整体设计思路2.1 程序操作流程图提取文件程序操作流程如图2-1所示。 弹出密码对话框 输入及确认密码是否单机“确定”按钮密码是否一致取 消 T 密码传到获得文件路径和文件名 This.button1Text=“与原文件路径相同” 修改文件名和路径保存路径,修改文件按字节读取文件按字节加密文件按字节写、放文件读写完关闭读、写文件文件加密成功结 束 图2-1 程序操作流程图本次课程设计所设计的程序,首先获取一个待加密的文件,然后弹出用户登录界面,输入用户名及密码,如果二者不相符则不能进行加密,返回一个报错信息,过程结束;如果二者相符则弹出可以找到

14、待加密文件的存储路径的对话框,选中该文件将其扩展名和内容按加密算法更改,保存到指定的新存储路径中,加密成功,过程结束。解密过程是加密过程的反过程,当有需要时再对文件按与加密过程相同的操作流程解密。2.2 实现整体功能简介在做加密解密工具时首先确定的是界面的设计,此工具的主界面主要有三个标签:加密、解密、路径设置。加密标签界面里设计了四个panel工具,主要用于实现文件的加密功能,当向panel1或panel2拖入要加密的文件时它会弹出一个要输入密码的对话框,此界面的下方有一个textbox用于接收传进来的文件路径。在解密标签的窗口中的界面基本上与加密标签里一样,但用于实现文件的解密功能。加密解

15、密工具中的路径设置用于设置加密解密文件存放路径,这一块中要分两个区域:加密文件路径设置区(groupBox1)和解密文件路径设置区(groupBox2),在groupBox1标签中有两个单选按钮:radiobutton1设置的路径与原文件路径相同和radiobutton2设置了自定义的路径,一个文本框按钮(textbox3)一个选择button按钮。Button按钮是获得文件存储的路径,得到路径后就会把路径传给文本框按钮textBox3,textBox3的作用是将从button那得到的路径传加密标签是的textBox1。解密文件路径设置区的设计也和加密文件路径设置区一样。在设计时还要用到两个对

16、话框,用于设置加密或解密密码。有两个文本框用于输入密码,一个确定按钮用来传送密码,一个取消按钮用来取消当前的操作。第3章 系统各模块的简介3.1 窗口操作模块设计窗口操作模块,主要用来实现用户登陆及文件加密解密时所用的界面,其上设有用户登陆名、登录密码、确认、文件加密、文加解密这几个必备的按钮,有时为了保密需要或管理需要,还可以添加一些其他的操作按钮。本次课程设计完成了简单而实用的用户登录及加密解密窗口。3.1.1窗口设计过程登录窗口的设计:首先建立一个窗体,然后在窗体上添加一个面板,用来承载所添加的组件。本次设计中需要的组件为用户名“尊姓大名”,密码“暗号”,确认登录“叮咚”三个按钮,用来填

17、写用户名和密码的两个文本框,如图3-1所示。图3-1 登录窗口加密解密窗口的设计:与登录窗口设计类似,也是首先建立一个窗体,然后添加一个面板来承载所添加的组件。本次设计的窗口只许添加“加密”、“解密”两个按钮即可,如图3-2所示。图3-2 加密解密窗口3.1.2实现所用关键代码简述实现登录窗口设计所用代码:private static JLabel l3 = new JLabel();public static void main(String args)final JFrame frame = new JFrame();JPanel panel = new JPanel();frame.se

18、tTitle(主人,好开心又见到你了);frame.setBounds(500, 250, 300, 200);final JTextField text = new JTextField(20);final JPasswordField pass = new JPasswordField(20);JButton button = new JButton(叮咚);final JLabel resultLabel = new JLabel();JLabel l1 = new JLabel(尊姓大名:);JLabel l2 = new JLabel(暗 号:);panel.add(l1);pane

19、l.add(text);panel.add(l2);panel.add(pass);panel.add(button);panel.add(resultLabel);panel.add(l3); 实现文件加密解密窗口设计所用代码:JFrame f1 = new JFrame(加密解密);f1.setBounds(550, 250, 250, 150);JPanel p1 = new JPanel(new FlowLayout();JButton b1 = new JButton(加密);JButton b2 = new JButton(解密);p1.add(b1);p1.add(b2);f1.

20、add(p1);其中用“frame.setTitle()”语句来给窗口命名。用“frame.setBounds(5)”语句来调整窗体的大小,以便达到更好的视觉效果,需注意的是,用此语句来设计窗口大小时坐标原点在整个屏幕的左上角。3.2 登录操作模块登录操作主要实现用户的登录,因为可以对文件进行加密的只能某些指定用户,所以在登录模块中建立了用户库,并相应的建立一个与用户库相对应的登录密码库。若为非指定用户登录时,系统报错。3.2.1登录设计过程首先指定一个或几个用户,并为他们设置对应的密码。本次设计中是用数组来实现用户库与密码库的建立的。并且通过事件监听器把登录设置与窗口上的按钮绑定到一起,即可

21、实现用户登录操作。当用户名与密码相匹配时正常登录,如图3-3所示。图3-3 正常登录界面当用户名或登录密码不在编程时所建立的用户名库和密码库,或者登录用户名与密码不相符,系统进行错误提示,如图3-4所示。图3-4 非正常登录界面3.2.2实现所用关键代码简述以下是实现建立用户库密码库所用的程序:String nameBox = 张洋,杨婷,吕航,程云飞,铁秉祥,杜康;String passBox = 000,111,333,444,555,666;String ImageIcon1=jfh,fjh;String result = 出错啦!;注意,建立的密码库是用户库的索引,所以二者的元素一一对

22、应,在设置密码时应特别注意这一点。以下是实现部分按钮事件监听器的程序:ActionListener l = new ActionListener()public void actionPerformed(ActionEvent e)String name = text.getText();String password = pass.getText();Login cpp = new Login();String value = cpp.login(name, password);if(value.equals(叮咚)frame.setVisible(false);JFrame f1 = ne

23、w JFrame(加密解密);f1.setBounds(550, 250, 250, 150);JPanel p1 = new JPanel(new FlowLayout();JButton b1 = new JButton(加密);JButton b2 = new JButton(解密);p1.add(b1);p1.add(b2);f1.add(p1);f1.setVisible(true);在本次程序设计中,通常不会知道用户的动作什么时候会发生,如用户可能点击某一个按钮,也可能不点击,而且点击按钮的时机在运行时才可能知道。如果用传统的程序控制方式,则很难做到准确的响应。通常这种情况或者类似

24、的情况下,我们可以使用事件/监听器模式。将一个监听器(listener)与特定的控件(如按钮等)绑定起来,当发生用户点击等事件(Event)时,调用监听器的处理方法,从而响应用户的动作。3.3 加密操作模块加密模块用于对指定的文件进行加密,是整个设计两个核心模块之一。本次设计的加密模块是通过改变文件的读取方式来使加密后的文件无法打开,并且改变原文件的扩展名,使除了指定用户外的其他用户无法找到相应的破解软件来打开加密文件。3.3.1加密设计过程首先确定加密时所用的算法,并按算法编写加密段程序,然后再编写读取要加密文件的程序,最后编程为加密后的文件指定一个新的存储路径。将上述三段程序用Java语言

25、连在一起,并且为了使操作更加完善加入加密后将原文件删除的指令,选择加密文件的窗口如图3-4所示。图3-4 选择加密文件加密后的文件被保存到指定的存储硬盘里,并且扩展名改变,如图3-5所示。打开后内容乱码,如图3-6所示。 图3-5 文件被保存到E盘里并且扩展图3-6 加密后内容乱码3.3.2实现所用关键代码简述以下是用来改变被加密文件扩展名时所用的程序:String s1 = file.toString();String s = file.getName();String name = s.substring(0,s.lastIndexOf(.);File srcFile = new File

26、(s1);File dstFile = new File(e:/+name+.aaa);FileInputStream cfis = new FileInputStream(srcFile);FileOutputStream cfos = new FileOutputStream(dstFile);byte info = new byte4;String prefix = s.substring(s.lastIndexOf(.)+1);/pdfbyte fixbox = prefix.getBytes();此程序可以用来获取被加密文件的存储路径,并且将原文件的后缀保存起来,用自己设定的后缀来代

27、替,达到改变扩展名的效果。以下是用来实现加密后文件打开后内容乱码的程序:System.arraycopy(fixbox, 0, info, 0, fixbox.length);cfos.write(info);byte b1 = new byte1024;int i1 = cfis.read(b1);while(i1 != -1)byte cb = b10;b10 = b11;b11 = cb;cfos.write(b1,0,i1);i1 = cfis.read(b1);此程序通过将字符互换实现文件打开后内容乱码,此程序就是本次设计所用的算法,根据它实现的原理可以成此法为“ab互换法”,这种加

28、密算法最大的优点是实现较容易,适合对容量较大的文件进行加密。3.4 解密操作模块解密模块是根据加密模块而设计的,实现对文件的解密操作,是本次设计的又一核心模块。本次设计的解密操作是加密操作的反操作,即它是将加密后的文件的读取方式换回原来的读取方式,并且将原文件的扩展名还原,以便使指定的用户对文件进行正常读取,读取被加密文件的窗口如图3-7所示。图3-7 读取被加密文件被加密文件经解密后,扩展名还原,如图3-8所示。能正常读取,如图3-9所示。图3-8 解密后扩展名还原图3-9 解密后文件正常读取3.4.1解密设计过程首先根据加密时所用的算法,编写与该算法计算过程相反的解密程序,然后再编写读取被

29、加密文件的程序,并编写程序为解码文件指定一个存储路径。最后将上述三段程序用JAVA语言连在一起,并且为了使操作更加完善加入解密后加密文件删除的指令。这样就可以实现原文件的还原了。3.4.2实现所用关键代码简述以下是实现还原扩展名的程序:String name = file.getName();String lastName = name.substring(0,name.lastIndexOf(.);File mbFile = new File(e:/+name);FileInputStream dfis = new FileInputStream(file);byte info = new

30、byte4;dfis.read(info);StringBuffer sb = new StringBuffer();for (byte value : info)if (value = 0)break;sb.append(char)value);File dstFile = new File(e:/+lastName+.+sb.toString();我们可以看出次段程序的过程恰跟加密过程相反,即先读取的是加密后文件的扩展名,在用原文件的扩展名将其替换。以下是实现将原文件内容还原的程序段:FileOutputStream dfos = new FileOutputStream(dstFile)

31、;byte b1 = new byte1024;int i1 = dfis.read(b1);while(i1 != -1)byte cb = b10;b10 = b11;b11 = cb;dfos.write(b1,0,i1);i1 = dfis.read(b1);解密过程再次采用“ab互换法”将加密时互换的两个因素换回原来的位置,这样就实现了文件的还原。第4章 运行调试4.1 加密模块本程序采用简单的加密算法,即把从文本区获得的文本文件,初始化,存放到一个数组中,然后进行“ab互换”运算,把结果重新存放于该数组中,从而显现在“文件浏览窗口”中。代码实现:public class Jia p

32、ublic static void main(String args) public void JiaMi(File file)try FileInputStream fis = new FileInputStream(new File(e:/d.txt);byte b = new byte1024;int i = fis.read(b);String s =null;if(i0)s = new String(b,0,i);String s1 = file.toString();String s = file.getName(); System.out.println(s);String na

33、me = s.substring(0,s.lastIndexOf(.);System.out.println(name);File srcFile = new File(s1);File dstFile = new File(e:/+name+.aaa);FileInputStream cfis = new FileInputStream(srcFile);FileOutputStream cfos = new FileOutputStream(dstFile);byte info = new byte4;String prefix = s.substring(s.lastIndexOf(.)

34、+1);/pdfbyte fixbox = prefix.getBytes();/数组复制System.arraycopy(fixbox, 0, info, 0, fixbox.length);cfos.write(info);byte b1 = new byte1024;int i1 = cfis.read(b1);while(i1 != -1)byte cb = b10;b10 = b11;b11 = cb;cfos.write(b1,0,i1);i1 = cfis.read(b1); cfos.flush();cfos.close();cfis.close();srcFile.delet

35、e(); catch (IOException e) e.printStackTrace();4.2 解密模块解密操作其实同加密操作相同,依旧首先打开加密后的文件,使其显示在文本区中,再同样对数组里的元素进行初始化,进行“ab互换”运算,即可得到解密后的文件,再显示到“文件浏览窗口”中。代码实现:public class Jie public void Jiemi(File file)try String name = file.getName();String lastName = name.substring(0,name.lastIndexOf(.);File mbFile = new

36、File(e:/+name);FileInputStream dfis = new FileInputStream(file);byte info = new byte4;dfis.read(info);StringBuffer sb = new StringBuffer();for (byte value : info)if (value = 0)break;sb.append(char)value);File dstFile = new File(e:/+lastName+.+sb.toString();File dstFile = new File(e:/+System.currentT

37、imeMillis()+.gif);FileOutputStream dfos = new FileOutputStream(dstFile);byte b1 = new byte1024;int i1 = dfis.read(b1);while(i1 != -1)byte cb = b10;b10 = b11;b11 = cb;dfos.write(b1,0,i1);i1 = dfis.read(b1);dfos.flush();dfos.close();dfis.close();file.delete();mbFile.delete(); catch (IOException e) e.p

38、rintStackTrace();结论在设计过程中,我们必须持着严谨认真的态度和作风。每一个细节都需要高度重视,如果不认真思考决策,就会出现或大或小的错误。若早期的错误隐藏下来没被发现,就会对后面的工作产生很大的影响,甚至需要从头开始。在设计过程中,我们不断发现错误,不断改正错误,不断领悟,不断获取从中,我懂得了在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才获得最终的胜利。不然,将永远不能获得成功,也不能得到社会及他人对自己的认可!课程设计诚然是一门专业课,让我的专业知识以及专业技能上得到提升,同时又是一门

39、道课,一门辩思课,给了我许多道、很多思,给了我莫大的空间。我认为,在此次实践中不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是我们学会了很多学习的方法。而这正是以后最实用的知识。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。我想,以后不管有多苦,我们都要会变苦为乐,从中寻找乐趣。通过此次的课程设计,我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要肯花时间去认真钻研,动脑思考,动手实践,就没有弄不懂的知识。参考文献1 川刘劫. Java 反编译技术和代码安全J 现代电子技术,2004,27(10): 22-24.2 冀振燕. Java 编

40、译程序技术与Java 性能J. 软件学报,2000, 11 (2):173-175.3 Wu Yang. Advanced Obfuscation Techniques for Java BytecodJ Joumal of Systems and Software Volume, 2004, 71 (1): 1-34 Berghei H. Wartermarking CyberspaceJ. Communications of the ACM, 1997, 40(11): 19-21附录本课程设计所用的Java语言编写的程序:TestJUI.java:package GUI;import j

41、ava.awt.FlowLayout; / /导入的包import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;import javax.swing.JButton;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JPasswordField;import java

42、x.swing.JTextField;public class TestGUI private static JLabel l3 = new JLabel();public static void main(String args)final JFrame frame = new JFrame();/添加面板JPanel panel = new JPanel();/设置窗体大小frame.setTitle(主人,好开心又见到你了);frame.setBounds(500, 250, 300, 200);/添加文本框final JTextField text = new JTextField(2

43、0);/添加密码框final JPasswordField pass = new JPasswordField(20);/final JImageIconField image=new JImageIconField(20);/添加按钮JButton button = new JButton(叮咚);/添加标签(显示最终登录结果)final JLabel resultLabel = new JLabel();JLabel l1 = new JLabel(尊姓大名:);JLabel l2 = new JLabel(暗 号:);/添加组件panel.add(l1);panel.add(text);panel.add(l2);panel.add(pass);panel.add(button);panel.add(resultLabel);panel.add(l3);/绑定事件监听器ActionListener l = new ActionListene

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号