文件加密解密实验报告

一· 源码的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)

                            }     }

四· 代码运行结果:

  

 

 

 

 

 

 

 

 

 

 

 五· 心得体会

       通过实践加深学生对程序设计的理论、方法和基础知识的理解,掌握进行面向对象设计的基本方法,提高运用知识分析实际问题、解决实际问题的能力,提高学生的应用能力

posted @ 2015-04-29 21:36  青春向上看  阅读(1345)  评论(3编辑  收藏  举报