文件加密解密实验报告
一· 源码的github链接:https://github.com/lvcaixia/test/tree/master
二· 代码运行功能:对文件进行加密解密
三· 核心算法详细设计
对于每个类的主要方法,给出其详细设计的核心算法,如:
1、图形用户界面模块
在图形用户界面,设置两个面板,并分别设置显示其组件的布局。设置两个菜单项,分别为“打开”和“保存”;设置两个按钮,分别为“加密”和“解密”;创建一个文本区,用一个标签注明“文件浏览窗口”,这就是整个图形用户界面。
此外,还添加了一个窗口事件windowClosing,可以关闭运行的程序。
窗口事件的代码实现:
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
2、加密操作模块
本程序采用简单的加密算法,即把从文本区获得的文本文件,初始化,存放到一个数组中,然后进行异或运算,把结果重新存放于该数组中,从而显现在“文件浏览窗口”中。
代码实现:
if(e.getSource()==button1)
{
char a[]=texta.getText().toCharArray();/*把texta中获得的文本,进行初始化,与原字符串长度相等,并将该字符串对象的全部字符复制到该数组a[]中*/
texta.setText(null);
int n;
char secret=' ';
for(int i=0;i<a.length;i++)
{
char c=(char)(secret^a[i] ;//进行异或运算)
texta.append(""+c);
}
3、解密操作模块
解密操作其实同加密操作相同,依旧首先打开加密后的文件,使其显示在文本区中,再同样对数组里的元素进行初始化,进行异或运算,即可得到解密后的文件,再显示到“文件浏览窗口”中。
入口参数:指定文件路径
代码实现:
if(e.getSource()==button2)
{
char a[]=texta.getText().toCharArray();
texta.setText(null);
int n;
char secret=' ';
for(int i=0;i<a.length;i++)
{
char c=(char)(secret^a[i]);//再次异或运算,即还原
texta.append(""+c);
}
4、文件保存模块
本程序最大的特点就是:可以选择是否保存加密后的文本文件。因为加密后的文件先显示在文本区中,之后选择菜单项“保存”,即可弹出“保存对话框”,进行查找写入文件,写入字符流,从而实现保存。
代码实现:
if(e.getSource()==itemSave)//查找写入的文件
{
filedialog_save.setVisible(true);
if(filedialog_save.getFile()!=null)
{
try
{
File
file=new File(filedialog_save.getDirectory(),filedialog_save.getFile());
FileWriter tofile=new FileWriter(file);//写入字符流
BufferedWriter out=new BufferedWriter(tofile);
out.write(texta.getText(),0,(texta.getText()).length());
out.close();
tofile.close();
}
catch (IOException e2)
{
}
5、文件选择模块
同上个文件保存模块类似,依旧在选择菜单项“打开”后,查找读入文件,读取字符流,弹出“打开对话框”,从而可实现获取文件。
出口值:被选文件的路径
代码实现:
public void actionPerformed(ActionEvent e)//查找读入文件
{
if(e.getSource()==itemOpen)
{
filedialog_load.setVisible(true);
texta.setText(null);
String s;
if(filedialog_load.getFile()!=null)
{try
{
File file=new File(filedialog_load.getDirectory(),filedialog_load.getFile());
FileReader file_reader=new FileReader(file);//读取字符流
BufferedReader in=new BufferedReader(file_reader);
while((s=in.readLine())!=null)
texta.append(s+'\n');
in.close();
file_reader.close();
}
catch (IOException e1)
} }
四· 代码运行结果:
五· 心得体会
通过实践加深学生对程序设计的理论、方法和基础知识的理解,掌握进行面向对象设计的基本方法,提高运用知识分析实际问题、解决实际问题的能力,提高学生的应用能力