课程设计任务书2010—2011学年第二学期专业:计算机科学与技术学号:080101010 姓名:刘海坤课程设计名称:计算机网络课程设计设计题目:加密解密软件的设计与实现完成期限:自2011 年 6 月21 日至2011 年 6 月26 日共 1 周设计目的: 本程序设计所采用的就是DES算法,同时利用Java的GUI编程,生成文本对话框,对文件的路径进行选择、提供密钥框、加密和解密按钮。
功能要求:根据DES算法,设计加密解密软件来为各种文件加密解密。
一、设计的任务:根据设计整体需求,本人负责窗体的设计与实现和目标文件的导入模块。
二、进度安排:三、主要参考资料:[1] 谢希仁.计算机网络教程.北京: 人民邮电出版社,2006.[2] 耿祥义.Java2使用教程:清华大学出版社,2006.[3] 方敏,张彤.网络应用程序设计.西安:电子科技大学出版社,2005.[4] 黄超.Windows下的网络编程.北京:人民邮电出版社,2003.指导教师(签字):教研室主任(签字):批准日期:年月日摘要随着计算机的应用和网络技术的不断发展,网络间的通讯量不断的加大,人们的个人信息、网络间的文件传递、电子商务等方面都需要大力的保护,文件加密技术也就随之产生。
文件的加密主要是由加密算法实现,加密算法有多种,常见的有RSA、DES、MD5等。
本程序设计对文件的加密使用的是DES加密算法。
DES是分块加密的。
DES用软件进行解码需要用很长时间,而用硬件解码速度非常快,1977年,人们估计要耗资两千万美元才能建成一个专门计算机用于DES的解密,而且需要12个小时的破解才能得到结果。
所以,当时DES被认为是一种十分强壮的加密方法。
但今天,只需二十万美元就可以制造一台破译DES的特殊的计算机,所以现在 DES 对要求“强壮”加密的场合已经不再适用了。
Java语言具有简单、安全、可移植、面向对象、健壮、多线程、体系结构中立、解释执行、高性能、分布式和动态等主要特点。
利用Java语言中秘密密钥工厂对DES算法的支持,使程序实现文件加密、解密两大功能更简单。
本程序设计所采用的就是DES算法。
同时利用Java的GUI编程,生成文本对话框,对文件的路径进行选择、提供密钥框、加密和解密按钮。
使用本程序可以对txt,word等多种文件进行加密解密,使用便捷实用,功能完善,满足了用户对文件安全性的需求。
关键词:JA V A ,DES,加密,解密。
目录一、题目分析 (1)1.1课程设计的要求和内容 (1)1.2DES算法描述 (1)二、概要设计 (3)2.1抽象数据类型的定义 (3)2.1.1 程序所需要引入的包 (3)2.1.2 其他定义 (3)2.2主程序流程图 (4)2.3各程序模块之间的层次(调用)关系 (4)三、详细设计 (6)3.1窗体的设计与实现 (6)3.2文件导入模块 (7)四、测试分析与结果 (8)4.1.测试结果 (8)4.1.1运行程序 (8)4.1.2加密 (8)4.1.3解密 (10)总结 (12)参考文献 (13)附录 (14)一、题目分析1.1课程设计的要求和内容基本要求:1.利用某种加密算法对指定的文本文件进行加密(应判断其是否已经加密,若已加密则结束该步骤,否则提示输入加密口令,对文件进行加密);2.加密解密方法:本设计采用DES加密算法。
3.还应该提供解密功能。
1.2 DES算法描述DES ( data encryption Standard) 是一种世界标准的加密形式,已经15 年历史了,虽然有些老,可还算是比较可靠的算法。
在七十的初期, 随着计算机之间的通信发展,需要有一种标准密码算法为了限制不同算法的激增使它们之间不能互相对话。
为解决这个问题, 美国国家安全局(N.S.A ) 进行招标。
I.B.M 公司开发了一种算法,称为:Lucifer。
经过几年的研讨和修改, 这种算法, 成为了今天的D.E.S,1976年11月23日,终于被美国国家安全局采用。
DES是一种分组加密算法,他以64位为分组对数据加密。
64位一组的明文从算法的一端输入,64位的密文从另一端输出。
DES是一个对称算法:加密和解密用的是同一个算法(除密钥编排不同以外)。
密钥的长度为56位(密钥通常表示为64位的数,但每个第8位都用作奇偶检验,可以忽略)。
密钥可以是任意的56位数,且可以在任意的时候改变。
DES算法的入口参数有3个:Key,Data,Mode。
其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或解密的数据:Mode为DES的工作方式,有两种:加密或解密。
DES算法的工作过程:若Mode为加密,则用Key对数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;若Mode为解密,则用Key对密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES 的输出结果。
在通信网络的两端,双方约定了一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式通过公共通信网(如电话网)传输到通信网络的终点,数据达到目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。
这样便保证了核心数据(如PIN,MAC等)在公共通信网中传输的安全性和可靠性。
通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融界交易网络的流行作法。
随着计算机网络的发展,加密技术也在迅速的发展中,加密解密技术的实现主要靠性能好的加密算法,而DES就是在实践中被证明的很好的算法,目前此算法已被广泛运用,且在使用中有了一些改进,DES算法给网络文件带来了可靠的安全性保证。
二、概要设计2.1抽象数据类型的定义2.1.1 程序所需要引入的包import java.awt.*; //包含用于创建用户界面和绘制图形图像的所有类。
import java.awt.event.*; //提供处理由 AWT 组件所激发的各类事件的接口和类。
import javax.swing.*; //提供一组“轻量级”(全部是 Java 语言)组件,尽量让这些组件在所有平台上的工作方式都相同。
import java.io.*; //通过数据流、序列化和文件系统提供系统输入和输出。
2.1.2 其他定义new BorderLayout()对文件加密器对话框采用BorderLayout管理器。
new ActionListener()对文件的加密和解密设置事件监听器。
new ButtonGroup()定义一个按钮组。
new JRadioButton()将此按钮设置为属于一个按钮组的成员。
new FileInputStream()建立文件输入流以便进行文件的读操作,取其数据new FileOutputStream()建立文件输出流以便将数据写入文件shu1 用整形数据保存该密钥。
2.2主程序流程图图2 主程序流程图2.3各程序模块之间的层次(调用)关系模块定义(1)主函数模块:生成加密器框体;获取数据的输入;调用加密或解密函数。
(2)加密模块:判断密钥是否合法和文件是否已加密,启动加密操作,显示操作结果,并在与开始运行程序弹出文件加密器对话框 输入文件路径选中文件 加密或解密写入或者输出 若为写入则在文本区中 输入要写入的内容 若为取出则在文本区中输出要取出的内容 点击加密按钮, 生成密钥(记住) 点击解密按钮,输入密钥,解密完成源文件同一文件夹下生成密文。
(3)加密操作模块:用DES方法加密输入的字节并返回。
(4)解密模块:判断密钥是否合法,启动解密操作,显示操作结果,并在指定的文件路径下生成明文。
(5)解密操作模块:用DES方法解密输入的字节并返回。
三、详细设计3.1 窗体的设计与实现窗体的总体布局包含按钮、画布、文本框、标签等,合理分布达到视觉的美感。
代码实现:import java.awt.*;import java.awt.event.*;import java.io.*;import javax.swing.*;public class key加密extends JFrame {int shu1;JLabel jl1,jl2;String cc;JButton queding, xuanz, jiami, jiemi;JTextField lujin,key;JTextArea nr;JRadioButton qu,xie;ButtonGroup fz;File f;public key加密(){Container c = getContentPane();JPanel jp1 = new JPanel();jl1 = new JLabel("输入路径");lujin = new JTextField(15);xuanz = new JButton("选择");jp1.add(jl1);jp1.add(lujin);jp1.add(xuanz);c.add(jp1, BorderLayout.NORTH);nr = new JTextArea();c.add(new JScrollPane(nr), BorderLayout.CENTER);qu = new JRadioButton("写入");xie = new JRadioButton("取出", true);fz = new ButtonGroup();fz.add(qu);fz.add(xie);jl2 = new JLabel("密钥");key = new JTextField(15);jiami = new JButton("加密");jiemi = new JButton("解密");JPanel jp4 = new JPanel();jp4.setLayout(new GridLayout(2, 1, 5, 5));JPanel jp2 = new JPanel();jp2.add(jl2);jp2.add(key);jp2.add(jiami);jp2.add(jiemi);jp4.add(jp2);JPanel jp3 = new JPanel();queding = new JButton("确定");jp3.add(qu);jp3.add(xie);jp3.add(queding);jp4.add(jp3);c.add(jp4, BorderLayout.SOUTH);queding.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent event) {jian();if (qu.isSelected())shuchu();if (xie.isSelected())qu();}});3.2文件导入模块实现目标文件的导入,通过选择按钮导入加密或解密的文件。