【加密解密】ADFGX密码 --图形界面实现加密解密

(一)、加密:

Encrypt.java类:

package cn.hncu;

import java.util.ArrayList;
import java.util.Arrays;

public class Encrypt {
    private String message;
    private String key;
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public String getKey() {
        return key;
    }
    public void setKey(String key) {
        this.key = key;
    }

    public Encrypt() {
    }

    //(1)自定义字母表填满替换方格
    public  char[][] letterTable(){
        char[][] a=new char[6][6];//建立一个6行6列的二维数组,利用密文来对照此表中的每个字符,
        a[0][1]='A';a[0][2]='D';a[0][3]='F';a[0][4]='G';a[0][5]='X';
        a[1][0]='A';a[2][0]='D';a[3][0]='F';a[4][0]='G';a[5][0]='X';
        a[1][1]='b';a[1][2]='t';a[1][3]='a';a[1][4]='l';a[1][5]='p';
        a[2][1]='d';a[2][2]='h';a[2][3]='o';a[2][4]='z';a[2][5]='k';
        a[3][1]='q';a[3][2]='f';a[3][3]='v';a[3][4]='s';a[3][5]='n';
        a[4][1]='g';a[4][2]='j';a[4][3]='c';a[4][4]='u';a[4][5]='x';
        a[5][1]='m';a[5][2]='r';a[5][3]='e';a[5][4]='w';a[5][5]='y';
        return a;
    }

    //(2)获得中间替换结果
    //中间替换结果是建立一个集合,集合中的第一个list放置明文,第二个list放置替换后的结果,以供下次使用替换结果
    public ArrayList<Object> midRes(){
        char[] chMess=message.toCharArray();//将明文变为字符数组
        char[][] chLetter=letterTable();//调用整个字母表替换方格
        ArrayList<String> chList=new ArrayList<String>();//用于放置明文的集合
        ArrayList<String> strList=new ArrayList<String>();//用户放置替换结果的集合
        ArrayList<Object> list=new ArrayList<Object>();//用于放置两个集合的总集合
        list.add(chList);//将明文集合添加到list中
        list.add(strList);//将替换结果添加到list中
        //依次将明文的每个字符与字母表中的每个字符做比较
        for(int k=0;k<chMess.length;k++){
            for(int i=0;i<chLetter.length;i++){//第i行
                for(int j=0;j<chLetter[i].length;j++){//第j列
                    if(chMess[k]==chLetter[i][j]){//第k个明文字符是否与字母表中的某一个相等
                        String ch=chMess[k]+"";//将字母转换为字符串
                        String str=(chLetter[i][0]+""+chLetter[0][j]);
                        chList.add(ch);
                        strList.add(str);
                    }
                }
            }
        }
        return list;//返回出集合结果
    }

    //(3)利用一个移位密钥加密
    //得到移位加密后的格子
    private char[][] shiftTable(){
        ArrayList<String> list=(ArrayList<String>) midRes().get(1);//得到中间替换结果的集合
        Object[] objs=list.toArray();//将其list转换为数组
        StringBuffer strMidRes=new StringBuffer();//此字符串用于追加加密后的每个字符
        for(Object s:objs){
            strMidRes.append(s);//进行追加
        }

        char[] chKey=key.toUpperCase().toCharArray();//将旧密钥全部变为大写并且转换为字符数组
        int n=strMidRes.length();//整个中间密文的长度
        int col=chKey.length;//新的移位加密后的格子的列数
        int row=n%col==0?n/col:n/col+1;//新的移位加密后的格子的行数
        int k=0;
        char[][] shiftTable=new char[row+1][col];//创建一个新的移位加密后的新格子
        for(int i=0;i<shiftTable.length;i++){
            for(int j=0;j<shiftTable[i].length;j++){
                if(i==0){
                    shiftTable[i][j]=chKey[j];//
                }else{
                    if(k<n){
                        shiftTable[i][j]=strMidRes.charAt(k);//获得中间密文的第k个
                        k++;
                    }
                    if(k==n && n%col!=0){//根据题目要求:最后不足一行的部分全部用X填充
                        for(int t=n%col;t<col;t++){
                            shiftTable[i][t]='X';
                        }
                    }
                }
            }
        }
        return shiftTable;
    }

    //(4)按照字母顺序排列密钥,形成新密文
    public StringBuffer sortLetter(){
        StringBuffer strbuf=new StringBuffer();
        char[][] chTemp=shiftTable();//先得到整个移位后的格子
        char[] chKey=key.toUpperCase().toCharArray();
        Arrays.sort(chKey);
        for(int i=0;i<chKey.length;i++){
            for(int j=0;j<chTemp[0].length;j++){
                if(chKey[i]==chTemp[0][j]){
                    for(int x=1;x<chTemp.length;x++){
                        strbuf.append(chTemp[x][j]);
                    }
                    strbuf.append(" ");
                }
            }
        }
        System.out.println(strbuf);
        return strbuf;
    }

}

(二)解密:

Decrypted.java类:

package cn.hncu;

import java.util.Arrays;


public class Decrypted {
    private String ciphertext;
    private String key;
    public Decrypted(){
    }
    public String getCiphertext() {
        return ciphertext;
    }
    public void setCiphertext(String ciphertext) {
        this.ciphertext = ciphertext;
    }
    public String getKey() {
        return key;
    }
    public void setKey(String key) {
        this.key = key;
    }
    /*排列密钥的字母顺序,根据新密钥、旧密钥排列顺序关系,
     *排列出旧密钥的密文:即得到sortLetter()数组
     */
    private char[][] sortLetter(){
        String key2=key;//将旧密钥key赋给新密钥key2
        char[] chKey=key.toCharArray();//旧密钥变为字符数组,需要使用
        char[] chKey2=key2.toCharArray();//新密钥也变为字符数组,也是需要使用到的
        Arrays.sort(chKey2);//最关键的一步:密钥排序

        char[] chCiphertext=ciphertext.replaceAll(" ", "").toCharArray();//替换密文中的所有空格为空,并将其变为字符数组
        int row=chCiphertext.length/chKey.length;//根据密文字符的总个数与密钥字符的个数计算出新格子的行数
        int col=chKey.length;//密钥字符的个数即为新格子的列数
        char[][] chCipher=new char[row][col];//建立密文二维数组

        /*
         * 用for循环依次遍历两个密钥中的所有字符,
         * 如果正好相等,则将旧密钥格子整列赋给新密钥格子对应的一列
         */
        for(int i=0;i<chKey.length;i++){
            for(int j=0;j<chKey2.length;j++){
                int len=col*j;
                if(chKey[i]==chKey2[j]){
                    for(int i2=0;i2<row;i2++){
                        chCipher[i2][i]=chCiphertext[len++];//将整列的字符赋给新格子列
                    }
                }
            }
        }
        return chCipher;
    }
    /*
     * 解密查看中间替换结果:
     * 通过得到的反向密文,分别以两个字符为一组计算出其字符对应的坐标,
     * 将找到的字符追加到sb中,此sb便是最后解密出的明文
     */
    public StringBuffer shift(){
        StringBuffer res=new StringBuffer();
        char[][] chLetter=sortLetter();
        char[][] leters= new Encrypt().letterTable();//得到整个字母表
        char[] temp=new char[25];
        int k=0;
        for(int i=0;i<chLetter.length;i++){
            for(int j=0;j<chLetter[i].length;j++){
                temp[k]=chLetter[i][j];//依次拿出每个字母表中的字符
                if((k+1)%2==0){
                    int r=trans(temp[k-1]);//因为得到的是最外行和最外列的字符,需要得到其对应的数字坐标,这里用到一个转换方法
                    int c=trans(temp[k]);
                    res.append(leters[r][c]);
                }
                k++;
            }
        }
        return res;
    }

    private int trans(char ch){
        int n=0;
        switch(ch){
        case 'A':n=1;break;
        case 'D':n=2;break;
        case 'F':n=3;break;
        case 'G':n=4;break;
        case 'X':n=5;break;
        }
        return n;
    }
}

(三)、值对象:

FileMessage.java类:

package cn.hncu;

public class FileMessage {
    private String fileurlMessSrc;//加密明文地址
    private String fileurlCry;//加密密文地址
    private String fileurlCry2;//解密密文地址
    private String fileurlMessSrc2;//解密明文地址
    private String key;
    private char[][] letters;
    public String getFileurlMessSrc() {
        return fileurlMessSrc;
    }
    public void setFileurlMessSrc(String fileurlMessSrc) {
        this.fileurlMessSrc = fileurlMessSrc;
    }
    public String getFileurlCry() {
        return fileurlCry;
    }
    public void setFileurlCry(String fileurlCry) {
        this.fileurlCry = fileurlCry;
    }
    public String getFileurlCry2() {
        return fileurlCry2;
    }
    public void setFileurlCry2(String fileurlCry2) {
        this.fileurlCry2 = fileurlCry2;
    }
    public String getFileurlMessSrc2() {
        return fileurlMessSrc2;
    }
    public void setFileurlMessSrc2(String fileurlMessSrc2) {
        this.fileurlMessSrc2 = fileurlMessSrc2;
    }
    public String getKey() {
        return key;
    }
    public void setKey(String key) {
        this.key = key;
    }
    public char[][] getLetters() {
        return letters;
    }
    public void setLetters(char[][] letters) {
        this.letters = letters;
    }
}

(四)、文件工具:

FileUtils.java类:

package cn.hncu.utils;

import java.awt.HeadlessException;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

import javax.swing.JFileChooser;

import cn.hncu.Decrypted;
import cn.hncu.Encrypt;
import cn.hncu.FileMessage;

public class FileUtils {
    public static String openFile() {
        File file=null;
        try {
            JFileChooser jfile=new JFileChooser();
            jfile.showDialog(null, "打开");
            file=jfile.getSelectedFile();
            System.out.println(file.toString());
        } catch (HeadlessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            return file.toString();
        }
    }


}

(五)、图形界面:

/*
 * mainFrame.java
 *
 * Created on __DATE__, __TIME__
 */

package cn.hncu.ui;

import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JOptionPane;

import cn.hncu.Decrypted;
import cn.hncu.Encrypt;
import cn.hncu.FileMessage;
import cn.hncu.utils.FileUtils;

/**
 * 
 * @author __USER__
 */
public class mainFrame extends javax.swing.JFrame {

    /** Creates new form mainFrame */
    public mainFrame() {
        initComponents();
        setTitle("ADFGX密码加密和解密");

    }


    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    //GEN-BEGIN:initComponents
    // <editor-fold defaultstate="collapsed" desc="Generated Code">

    //初始化所有参数:
    FileMessage filemess=new FileMessage();


    private void initComponents() {

        jSplitPane1 = new javax.swing.JSplitPane();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        tfdkey = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jtrepl = new javax.swing.JTextArea();
        btnSave = new javax.swing.JButton();
        jLabel4 = new javax.swing.JLabel();
        tfdCry2 = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        tfdmessSrc2 = new javax.swing.JTextField();
        jLabel6 = new javax.swing.JLabel();
        tfdmessSrc = new javax.swing.JTextField();
        jLabel7 = new javax.swing.JLabel();
        tfdCry = new javax.swing.JTextField();
        jLabel8 = new javax.swing.JLabel();
        jScrollPane2 = new javax.swing.JScrollPane();
        jtRepRes = new javax.swing.JTextArea();
        jLabel9 = new javax.swing.JLabel();
        jLabel10 = new javax.swing.JLabel();
        jScrollPane3 = new javax.swing.JScrollPane();
        jtMess = new javax.swing.JTextArea();
        jScrollPane4 = new javax.swing.JScrollPane();
        jtCry = new javax.swing.JTextArea();
        btnEncrypt = new javax.swing.JButton();
        btnDecrypt = new javax.swing.JButton();
        menuBar = new javax.swing.JMenuBar();
        fileMenu = new javax.swing.JMenu();
        openMenuItem = new javax.swing.JMenuItem();
        saveMenuItem = new javax.swing.JMenuItem();
        saveAsMenuItem = new javax.swing.JMenuItem();
        exitMenuItem = new javax.swing.JMenuItem();
        editMenu = new javax.swing.JMenu();
        cutMenuItem = new javax.swing.JMenuItem();
        copyMenuItem = new javax.swing.JMenuItem();
        pasteMenuItem = new javax.swing.JMenuItem();
        deleteMenuItem = new javax.swing.JMenuItem();
        helpMenu = new javax.swing.JMenu();
        contentsMenuItem = new javax.swing.JMenuItem();
        aboutMenuItem = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setFocusCycleRoot(false);
        setMinimumSize(new java.awt.Dimension(1400, 700));
        getContentPane().setLayout(null);

        jLabel1.setFont(new java.awt.Font("宋体", 1, 24));
        jLabel1.setForeground(new java.awt.Color(255, 0, 0));
        jLabel1.setText("ADFGX\u5bc6\u7801");
        getContentPane().add(jLabel1);
        jLabel1.setBounds(490, 10, 130, 30);

        jLabel2.setFont(new java.awt.Font("宋体", 1, 14));
        jLabel2.setText("\u8bbe\u7f6e\u5bc6\u94a5\uff1a");
        getContentPane().add(jLabel2);
        jLabel2.setBounds(60, 80, 90, 20);

        tfdkey.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18));
        getContentPane().add(tfdkey);
        tfdkey.setBounds(130, 80, 400, 30);

        jLabel3.setFont(new java.awt.Font("宋体", 1, 14));
        jLabel3.setText("\u8bbe\u7f6e\u66ff\u6362\u65b9\u683c\uff1a");
        getContentPane().add(jLabel3);
        jLabel3.setBounds(60, 120, 110, 20);

        jtrepl.setColumns(20);
        jtrepl.setFont(new java.awt.Font("Monospaced", 1, 18));
        jtrepl.setRows(5);
        jScrollPane1.setViewportView(jtrepl);

        getContentPane().add(jScrollPane1);
        jScrollPane1.setBounds(60, 150, 470, 180);

        /初始化字母表
        Encrypt en = new Encrypt();
        final char[][] chs = en.letterTable();
        for (int i = 0; i < chs.length; i++) {
            StringBuffer sb = new StringBuffer();
            for (int j = 0; j < chs[i].length; j++) {
                if (j == 0) {
                    sb.append(chs[i][j]);
                } else {
                    sb.append("\t" + chs[i][j]);
                }
            }
            String s = new String(sb);
            jtrepl.append(s + "\n");
            s = "";
        }


        /***
         * 保存设置
         */

        btnSave.setFont(new java.awt.Font("宋体", 1, 14));
        btnSave.setText("\u4fdd\u5b58\u8bbe\u7f6e");
        btnSave.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSaveActionPerformed(evt);
            }

            private void btnSaveActionPerformed(ActionEvent evt) {
                String key=tfdkey.getText();
                filemess.setKey(key);
                filemess.setLetters(chs);
                System.out.println("保存设置");
            }
        });
        getContentPane().add(btnSave);
        btnSave.setBounds(230, 350, 100, 30);

        jLabel4.setFont(new java.awt.Font("宋体", 1, 14));
        jLabel4.setText("\u660e\u6587\u6587\u4ef6\uff1a");
        getContentPane().add(jLabel4);
        jLabel4.setBounds(870, 140, 80, 30);

        /**
         * 解密:密文文件
         */
        tfdCry2.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18));
        tfdCry2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tfdCry2MouseClicked(evt);
            }
            private void tfdCry2MouseClicked(java.awt.event.MouseEvent evt) {
                System.out.println("解密密文文件");
                String fileurlCry2=FileUtils.openFile();
                tfdCry2.setText(fileurlCry2);
                filemess.setFileurlCry2(fileurlCry2);
            }
        });
        getContentPane().add(tfdCry2);
        tfdCry2.setBounds(630, 140, 210, 30);

        jLabel5.setFont(new java.awt.Font("宋体", 1, 14));
        jLabel5.setText("\u5bc6\u6587\u6587\u4ef6\uff1a");
        getContentPane().add(jLabel5);
        jLabel5.setBounds(550, 140, 80, 30);

        /**
         * 解密:明文文件
         */

        tfdmessSrc2.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18));
        tfdmessSrc2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tfdmessSrc2MouseClicked(evt);
            }

            private void tfdmessSrc2MouseClicked(MouseEvent evt) {
                System.out.println("解密明文文件");
                String fileurlMessSrc2=FileUtils.openFile();
                tfdmessSrc2.setText(fileurlMessSrc2);
                filemess.setFileurlMessSrc2(fileurlMessSrc2);
            }
        });
        getContentPane().add(tfdmessSrc2);
        tfdmessSrc2.setBounds(950, 140, 150, 30);

        jLabel6.setFont(new java.awt.Font("宋体", 1, 14));
        jLabel6.setText("\u5bc6\u6587\u6587\u4ef6\uff1a");
        getContentPane().add(jLabel6);
        jLabel6.setBounds(870, 80, 80, 30);

        /**
         * 加密:明文文件
         */

        tfdmessSrc.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18));
        tfdmessSrc.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tfdmessSrcMouseClicked(evt);
            }

            private void tfdmessSrcMouseClicked(MouseEvent evt) {
                System.out.println("加密明文文件");
                String fileurlMessSrc=FileUtils.openFile();
                filemess.setFileurlMessSrc(fileurlMessSrc);
                tfdmessSrc.setText(fileurlMessSrc);
            }
        });
        getContentPane().add(tfdmessSrc);
        tfdmessSrc.setBounds(630, 80, 210, 30);

        jLabel7.setFont(new java.awt.Font("宋体", 1, 14));
        jLabel7.setText("\u660e\u6587\u6587\u4ef6\uff1a");
        getContentPane().add(jLabel7);
        jLabel7.setBounds(550, 80, 80, 30);

        /**
         * 加密密文文件
         */
        tfdCry.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18));
        tfdCry.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tfdCryMouseClicked(evt);
            }

            private void tfdCryMouseClicked(MouseEvent evt) {
                System.out.println("加密密文文件");
                String fileurlCry=FileUtils.openFile();
                filemess.setFileurlCry(fileurlCry);
                tfdCry.setText(fileurlCry);
            }
        });
        getContentPane().add(tfdCry);
        tfdCry.setBounds(950, 80, 150, 30);

        jLabel8.setFont(new java.awt.Font("宋体", 1, 14));
        jLabel8.setText("\u66ff\u6362\u7ed3\u679c\uff1a");
        getContentPane().add(jLabel8);
        jLabel8.setBounds(550, 240, 80, 30);

        jtRepRes.setColumns(20);
        jtRepRes.setEditable(false);
        jtRepRes.setFont(new java.awt.Font("Monospaced", 1, 18));
        jtRepRes.setRows(5);
        jScrollPane2.setViewportView(jtRepRes);

        getContentPane().add(jScrollPane2);
        jScrollPane2.setBounds(630, 200, 650, 90);

        jLabel9.setFont(new java.awt.Font("宋体", 1, 14));
        jLabel9.setText("\u660e\u6587\uff1a");
        getContentPane().add(jLabel9);
        jLabel9.setBounds(560, 300, 50, 30);

        jLabel10.setFont(new java.awt.Font("宋体", 1, 14));
        jLabel10.setText("\u5bc6\u6587\uff1a");
        getContentPane().add(jLabel10);
        jLabel10.setBounds(930, 310, 50, 20);

        jtMess.setColumns(20);
        jtMess.setEditable(false);
        jtMess.setFont(new java.awt.Font("Monospaced", 1, 18));
        jtMess.setRows(5);
        jScrollPane3.setViewportView(jtMess);

        getContentPane().add(jScrollPane3);
        jScrollPane3.setBounds(630, 310, 290, 250);

        jtCry.setColumns(20);
        jtCry.setEditable(false);
        jtCry.setFont(new java.awt.Font("Monospaced", 1, 18));
        jtCry.setRows(5);
        jScrollPane4.setViewportView(jtCry);

        getContentPane().add(jScrollPane4);
        jScrollPane4.setBounds(980, 310, 300, 250);

        /**
         * 按钮:加密
         */
        btnEncrypt.setFont(new java.awt.Font("宋体", 1, 14));
        btnEncrypt.setText("\u52a0\u5bc6");
        btnEncrypt.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEncryptActionPerformed(evt);
            }

            private void btnEncryptActionPerformed(ActionEvent evt) {
                System.out.println("按钮:加密");
                //FileUtils.encryptFile(filemess);

                Encrypt en=new Encrypt();
                en.setKey(filemess.getKey());
                BufferedReader br=null;
                BufferedWriter bw=null;
                try {
                    br=new BufferedReader(new FileReader(new File(filemess.getFileurlMessSrc())));
                    bw=new BufferedWriter(new FileWriter(new File(filemess.getFileurlCry())));
                    String str=null;
                    while((str=br.readLine())!=null){
                        jtMess.append(str+"\n");
                        en.setMessage(str.replaceAll(" ", "").toLowerCase());
                        String s=new String(en.sortLetter());
                        bw.write(s);
                        jtCry.append(s+"\n");
                        String s1=en.midRes().get(0).toString().replaceAll(",", " ");
                        String s2=en.midRes().get(1).toString().replaceAll(",", "");
                        jtRepRes.append(s1+"\n");
                        jtRepRes.append(s2+"\n");
                        bw.write("\r\n");
                        bw.flush();
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }finally{
                    try {
                        br.close();
                        bw.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    JOptionPane.showMessageDialog(null, "文件加密成功!");
                }



            }
        });
        getContentPane().add(btnEncrypt);
        btnEncrypt.setBounds(1120, 80, 80, 30);

        /**
         * 按钮:解密
         */
        btnDecrypt.setFont(new java.awt.Font("宋体", 1, 14));
        btnDecrypt.setText("\u89e3\u5bc6");
        btnDecrypt.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnDecryptActionPerformed(evt);
            }

            private void btnDecryptActionPerformed(ActionEvent evt) {
                System.out.println("按钮:解密");

                Decrypted de=new Decrypted();
                de.setKey(filemess.getKey());
                BufferedReader br=null;
                BufferedWriter bw=null;
                try {
                    br=new BufferedReader(new FileReader(new File(filemess.getFileurlCry2())));
                    bw=new BufferedWriter(new FileWriter(new File(filemess.getFileurlMessSrc2())));
                    String str=null;
                    while((str=br.readLine())!=null){
                        System.out.println("密文:"+str);
                        jtCry.append(str+"\n");
                        de.setCiphertext((str.replaceAll(" ", "").toUpperCase()));
                        String s=new String(de.shift());
                        System.out.println("明文:"+s);
                        bw.write(s);
                        jtMess.append(s+"\n");
                        bw.write("\r\n");
                        bw.flush();
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }finally{
                    try {
                        br.close();
                        bw.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                JOptionPane.showMessageDialog(null, "文件解密成功!");

            }
        });
        getContentPane().add(btnDecrypt);
        btnDecrypt.setBounds(1120, 140, 80, 30);

        fileMenu.setText("File");

        openMenuItem.setText("Open");
        fileMenu.add(openMenuItem);

        saveMenuItem.setText("Save");
        fileMenu.add(saveMenuItem);

        saveAsMenuItem.setText("Save As ...");
        fileMenu.add(saveAsMenuItem);

        exitMenuItem.setText("Exit");
        exitMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                exitMenuItemActionPerformed(evt);
            }
        });
        fileMenu.add(exitMenuItem);

        menuBar.add(fileMenu);

        editMenu.setText("Edit");

        cutMenuItem.setText("Cut");
        editMenu.add(cutMenuItem);

        copyMenuItem.setText("Copy");
        editMenu.add(copyMenuItem);

        pasteMenuItem.setText("Paste");
        editMenu.add(pasteMenuItem);

        deleteMenuItem.setText("Delete");
        editMenu.add(deleteMenuItem);

        menuBar.add(editMenu);

        helpMenu.setText("Help");

        contentsMenuItem.setText("Contents");
        helpMenu.add(contentsMenuItem);

        aboutMenuItem.setText("About");
        helpMenu.add(aboutMenuItem);

        menuBar.add(helpMenu);

        setJMenuBar(menuBar);

        pack();
    }// </editor-fold>
    //GEN-END:initComponents



    private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_exitMenuItemActionPerformed
        System.exit(0);
    }// GEN-LAST:event_exitMenuItemActionPerformed

    /**
     * @param args
     *            the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new mainFrame().setVisible(true);
            }
        });
    }

    //GEN-BEGIN:variables
    // Variables declaration - do not modify
    private javax.swing.JMenuItem aboutMenuItem;
    private javax.swing.JButton btnDecrypt;
    private javax.swing.JButton btnEncrypt;
    private javax.swing.JButton btnSave;
    private javax.swing.JMenuItem contentsMenuItem;
    private javax.swing.JMenuItem copyMenuItem;
    private javax.swing.JMenuItem cutMenuItem;
    private javax.swing.JMenuItem deleteMenuItem;
    private javax.swing.JMenu editMenu;
    private javax.swing.JMenuItem exitMenuItem;
    private javax.swing.JMenu fileMenu;
    private javax.swing.JMenu helpMenu;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JScrollPane jScrollPane4;
    private javax.swing.JSplitPane jSplitPane1;
    private javax.swing.JTextArea jtCry;
    private javax.swing.JTextArea jtMess;
    private javax.swing.JTextArea jtRepRes;
    private javax.swing.JTextArea jtrepl;
    private javax.swing.JMenuBar menuBar;
    private javax.swing.JMenuItem openMenuItem;
    private javax.swing.JMenuItem pasteMenuItem;
    private javax.swing.JMenuItem saveAsMenuItem;
    private javax.swing.JMenuItem saveMenuItem;
    private javax.swing.JTextField tfdCry;
    private javax.swing.JTextField tfdCry2;
    private javax.swing.JTextField tfdkey;
    private javax.swing.JTextField tfdmessSrc;
    private javax.swing.JTextField tfdmessSrc2;
    // End of variables declaration//GEN-END:variables

}

(六)、明文文件、密文文件、解密后文件:

这里写图片描述
这里写图片描述
这里写图片描述

(七)、运行结果:

1、完整运行结果:

这里写图片描述

2、加密结果:

这里写图片描述

得到明文路径、密文路径,点击加密:

这里写图片描述

得到加密后的结果:

这里写图片描述

3、解密结果:

这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值