Java课程设计报告加密和解密Word下载.docx

上传人:b****5 文档编号:15691297 上传时间:2022-11-15 格式:DOCX 页数:18 大小:340.18KB
下载 相关 举报
Java课程设计报告加密和解密Word下载.docx_第1页
第1页 / 共18页
Java课程设计报告加密和解密Word下载.docx_第2页
第2页 / 共18页
Java课程设计报告加密和解密Word下载.docx_第3页
第3页 / 共18页
Java课程设计报告加密和解密Word下载.docx_第4页
第4页 / 共18页
Java课程设计报告加密和解密Word下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

Java课程设计报告加密和解密Word下载.docx

《Java课程设计报告加密和解密Word下载.docx》由会员分享,可在线阅读,更多相关《Java课程设计报告加密和解密Word下载.docx(18页珍藏版)》请在冰豆网上搜索。

Java课程设计报告加密和解密Word下载.docx

加密;

解密;

一、题目分析

1.1课程设计的要求和内容(包括原始数据、技术要求、工作要求)

基本要求:

1.用图形用户界面实现,建立菜单。

2.给定任意一个文本文件,进行加密,生成另一个文件。

3.对加密后的文件还原。

1.2团队任务分析

分析如下:

1.向图形用户界面中添加组件。

2.设置各个组件的布局。

3.添加窗口事件。

4.查找读入及写入文件,并显示。

5.加密功能实现。

6.解密功能实现。

其中:

团队成员及其负责的任务如下:

冯治波:

图形用户界面

吴祎筱和陈冬姣:

文本加密

高峻辉:

文本的还原(解密)

1.3相关知识介绍

本程序采用传统的异或加密算法,没有采用DES算法,但对于世界上公认的DES是一种分组加密算法,是以64位为分组对数据加密。

64位一组的明文从算法的一端输入,64位的密文从另一端输出。

密钥的长度为56位(密钥通常表示为64位的数,但每个第8位都用作奇偶检验,可以忽略)。

密钥可以是任意的56位数,且可以在任意的时候改变。

本程序采用的算法与DES相同的一点是:

都是一个对称算法:

及加密和解密用的是同一个算法。

  

我们也许知道公认的DES算法的工作过程,那就是:

若Mode为加密,则用Key对数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;

若Mode为解密,则用Key对密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。

但是,重要的是本程序首先经“打开”菜单项,进入文件选择模块,读取字符流,输出文本文档后,在一个数组中,对字符进行异或运算,从而达到加密的效果。

在通信网络的两端,双方约定了一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式通过公共通信网(如电话网)传输到通信网络的终点,数据达到目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。

这样便保证了核心数据(如PIN,MAC等)在公共通信网中传输的安全性和可靠性。

通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融界交易网络的流行作法。

  简单地说,DES算法只不过是加密的其中一种技术,通过一个初始置换,将明文分组分成左半部分和右半部分,各32位长。

然后进行16轮相同的运算,这些相同的运算被称为函数f,在运算过程中数据和密钥相结合。

经过16轮运算后左、右部分在一起经过一个置换(初始置换的逆置换),这样算法就完成了。

本程序虽然没有采用此算法,而是采用众所周知的与DES有相似之处的异或算法,实际上是降低了程序的复杂度,使其更清晰,但功能依旧很强大,可见优势也是很多的。

二、概要设计

2.1抽象数据类型的定义

2.1.1程序所需要引入的包:

importjava.awt.*;

//包含用于创建用户界面和绘制图形图像的所有类。

importjava.awt.event.*;

//提供处理由AWT组件所激发的各类事件的接口和类。

importjavax.swing.*;

//提供一组“轻量级”(全部是Java语言)组件,尽量让这些组件在所有平台上的工作方式都相同。

importjava.io.*;

//通过数据流、序列化和文件系统提供系统输入和输出。

2.1.2其他定义:

newFlowLayout()对文件加密器对话框采用FlowLayout管理器。

newActionListener()对文件的加密和解密设置事件监听器。

2.2各程序模块之间的层次(调用)关系

2.2.1模块定义

图形用户界面模块:

添加各种所需组件,设置窗口事件。

加密操作模块:

根据选择的文本文件,在浏览窗口中显示后,进行加密,显示在“文本浏览窗口”中。

解密操作模块:

同加密模块一样,由密文的保存路径,打开,进行解密,显示在“文本浏览窗口”中。

文件选择模块:

选择需要加密或解密的文件。

文件保存模块:

选择保存路径,保存需要加密或解密的文件。

2.2.2层次(调用)关系

根据以上各程序模块的定义,可以大致画出各模块的层次调用关系,由文件加密器模块开始调用,直到解密模块调用为止。

如下图2-2-2所示。

图2-2-2层次(调用)关系

三、详细设计

3.1程序流程图

该程序的模块调用十分简单明了,所以主程序的运行也很清晰,以下就是主程序的详细流程图,如图3-1所示

图3-1主程序流程图

3.2图形用户界面模块

在图形用户界面,设置两个面板,并分别设置显示其组件的布局。

设置两个菜单项,分别为“打开”和“保存”;

设置两个按钮,分别为“加密”和“解密”;

创建一个文本区,用一个标签注明“文件浏览窗口”,这就是整个图形用户界面。

此外,还添加了一个窗口事件windowClosing,可以关闭运行的程序。

窗口事件的代码实现:

addWindowListener(newWindowAdapter()

{

publicvoidwindowClosing(WindowEvente)

{

System.exit(0);

}

});

}

3.3加密操作模块

本程序采用简单的加密算法,即把从文本区获得的文本文件,初始化,存放到一个数组中,然后进行异或运算,把结果重新存放于该数组中,从而显现在“文件浏览窗口”中。

代码实现:

if(e.getSource()==button1)

chara[]=texta.getText().toCharArray();

/*把texta中获得的文本,进行初始化,与原字符串长度相等,并将该字符串对象的全部字符复制到该数组a[]中*/

texta.setText(null);

intn;

charsecret='

'

;

for(inti=0;

i<

a.length;

i++)

charc=(char)(secret^a[i]);

//进行异或运算

texta.append("

"

+c);

}

3.4解密操作模块

解密操作其实同加密操作相同,依旧首先打开加密后的文件,使其显示在文本区中,再同样对数组里的元素进行初始化,进行异或运算,即可得到解密后的文件,再显示到“文件浏览窗口”中。

入口参数:

指定文件路径

if(e.getSource()==button2)

{

//再次异或运算,即还原

3.5文件保存模块

本程序最大的特点就是:

可以选择是否保存加密后的文本文件。

因为加密后的文件先显示在文本区中,之后选择菜单项“保存”,即可弹出“保存对话框”,进行查找写入文件,写入字符流,从而实现保存。

if(e.getSource()==itemSave)//查找写入的文件

filedialog_save.setVisible(true);

if(filedialog_save.getFile()!

=null)

try

{

Filefile=newFile(filedialog_save.getDirectory(),filedialog_save.getFile());

FileWritertofile=newFileWriter(file);

//写入字符流

BufferedWriterout=newBufferedWriter(tofile);

out.write(texta.getText(),0,(texta.getText()).length());

out.close();

tofile.close();

}

catch(IOExceptione2)

3.6文件选择模块

同上个文件保存模块类似,依旧在选择菜单项“打开”后,查找读入文件,读取字符流,弹出“打开对话框”,从而可实现获取文件。

出口值:

被选文件的路径

publicvoidactionPerformed(ActionEvente)//查找读入文件

{

if(e.getSource()==itemOpen)

filedialog_load.setVisible(true);

Strings;

if(filedialog_load.getFile()!

Filefile=newFile(filedialog_load.getDirectory(),filedialog_load.getFile());

FileReaderfile_reader=newFileReader(file);

//读取字符流

BufferedReaderin=newBufferedReader(file_reader);

while((s=in.readLine())!

texta.append(s+'

\n'

);

in.close();

file_reader.close();

catch(IOExceptione1)

四、调试分析

4.1对设计与实现的回顾讨论和分析

在程序设计之初,考虑的是如何实现DES算法,但发现DES算法对于本次小程序来说,的确过于繁琐,但当我们发现采用简化后的DES算法----异或算法也可实现本功能,所以以后大大减少了工作量,可以说用Java语言是程序实现

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

当前位置:首页 > 成人教育 > 远程网络教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1