⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.java

📁 古老的加密算法
💻 JAVA
字号:
/*
 * Main.java
 *
 * Created on 2007年11月21日, 下午7:05
 */

package main;


/**
 *
 * @author  Administrator
 */
public class Main extends javax.swing.JFrame {
    
    /** Creates new form Main */
    public Main() {
        initComponents();
    }
    
    private String encrypt(String plaintext, String key)
    {
        key = key.toLowerCase();
        plaintext = plaintext.toLowerCase();
        key = key.replaceAll("\\W","");
        plaintext = plaintext.replaceAll("\\W","");
        System.out.println(key);
        char[][] matrix = new char[5][];
        for(int i=0; i<5; i++)
            matrix[i] = new char[5];
        int a = 0, b = 0;
        String text = "";
        for(int i=0; i<key.length(); i++)
        {
            char c = key.charAt(i);
            if(c == 'q')
                c = 'i';
            boolean flag = false;
            for(char t:text.toCharArray())
                {
                    if(t == c)
                    {
                        flag = true;
                        break;
                    }
                }
                if(!flag)
                    text = text + c;
        }
        for(char l='a'; l<='z'; l++)
        {
            if(l != 'q')
            {
                boolean flag = false;
                for(char c:key.toCharArray())
                {
                    if(c == l)
                    {
                        flag = true;
                        break;
                    }
                }
                if(!flag)
                    text = text + l;
            }
        }
        for(int i=0; i<text.length(); i++)
        {
            a = i/5;
            b = i%5;
            matrix[a][b] = text.charAt(i);
        }
        String squre = "";
        for(int i=0; i<5; i++)
        {
            for(int j=0; j<5; j++)
            {
                squre = squre + matrix[i][j] + "        ";
            }
            squre = squre + '\n';
        }
        jTextArea1.setText(squre);
        String ctext = "";//密文
        for(int i=0; i<plaintext.length(); i++)
        {
            char m,n;
            if(i == plaintext.length()-1)
            {
                m = plaintext.charAt(i);
                n = 'w';
            }
            else
            {
                m = plaintext.charAt(i);
                n = plaintext.charAt(i+1);
            }
            if(m == 'q')
                m = 'i';
            if(n == 'q')
                n = 'i';
            if(m == n)
                n = 'w';
            else
                i++;
            W wm, wn;
            wm = find(matrix, m);
            wn = find(matrix, n);
            if(wm.i == wn.i)
            {
                ctext = ctext + matrix[wm.i][(wm.j+1)%5];
                ctext = ctext + matrix[wn.i][(wn.j+1)%5];
            }
            else if(wm.j == wn.j)
            {
                ctext = ctext + matrix[(wm.i+1)%5][wm.j];
                ctext = ctext + matrix[(wn.i+1)%5][wn.j];
            }
            else
            {
                ctext = ctext + matrix[wm.i][wn.j];
                ctext = ctext + matrix[wn.i][wm.j];
            }
        }
        return ctext;
    }
    
    private String decrypt(String cyphertext, String key)
    {
        key = key.toLowerCase();
        cyphertext = cyphertext.toLowerCase();
        key = key.replaceAll("\\W", "");
        cyphertext = cyphertext.replaceAll("\\W", "");
        char[][] matrix = new char[5][];
        for(int i=0; i<5; i++)
            matrix[i] = new char[5];
        int a = 0, b = 0;
        String text = "";
        for(int i=0; i<key.length(); i++)
        {
            char c = key.charAt(i);
            if(c == 'q')
                c = 'i';
            boolean flag = false;
            for(char t:text.toCharArray())
                {
                    if(t == c)
                    {
                        flag = true;
                        break;
                    }
                }
                if(!flag)
                    text = text + c;
        }
        for(char l='a'; l<='z'; l++)
        {
            if(l != 'q')
            {
                boolean flag = false;
                for(char c:key.toCharArray())
                {
                    if(c == l)
                    {
                        flag = true;
                        break;
                    }
                }
                if(!flag)
                    text = text + l;
            }
        }
        for(int i=0; i<text.length(); i++)
        {
            a = i/5;
            b = i%5;
            matrix[a][b] = text.charAt(i);
        }
        String squre = "";
        for(int i=0; i<5; i++)
        {
            for(int j=0; j<5; j++)
            {
                squre = squre + matrix[i][j] + "        ";
            }
            squre = squre + '\n';
        }
        jTextArea1.setText(squre);
        String ctext = "";//明文
        for(int i=0; i<cyphertext.length(); i++)
        {
            char m,n;
            if(i == cyphertext.length()-1)
            {
                m = cyphertext.charAt(i);
                n = 'w';
            }
            else
            {
                m = cyphertext.charAt(i);
                n = cyphertext.charAt(i+1);
            }
            if(m == 'q')
                m = 'i';
            if(n == 'q')
                n = 'i';
            if(m == n)
                n = 'w';
            else
                i++;
            W wm, wn;
            wm = find(matrix, m);
            wn = find(matrix, n);
            if(wm.i == wn.i)
            {
                int r1 = (wm.j-1)%5;
                int r2 = (wn.j-1)%5;
                if(r1 < 0)
                    r1 += 5;
                if(r2 < 0)
                    r2 += 5;
                ctext = ctext + matrix[wm.i][r1];
                ctext = ctext + matrix[wn.i][r2];
            }
            else if(wm.j == wn.j)
            {
                ctext = ctext + matrix[(wm.i-1)%5][wm.j];
                ctext = ctext + matrix[(wn.i-1)%5][wn.j];
            }
            else
            {
                ctext = ctext + matrix[wm.i][wn.j];
                ctext = ctext + matrix[wn.i][wm.j];
            }
        }
        return ctext;
    }
    
    W find(char[][] A, char c)
    {
        W w = new W();
        for(int i=0; i<A.length; i++)
        {
            for(int j=0; j<A[i].length; j++)
            {
                if(A[i][j] == c)
                {
                    w.i = i;
                    w.j = j;
                }
            }
        }
        return w;
    }
    /** 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.
     */
    // <editor-fold defaultstate="collapsed" desc=" 生成的代码 ">//GEN-BEGIN:initComponents
    private void initComponents() {
        jLabel1 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jTextField2 = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Play fair");
        setBounds(new java.awt.Rectangle(300, 100, 0, 0));
        setResizable(false);
        jLabel1.setText("key:");

        jLabel2.setText("Text:");

        jTextArea1.setColumns(20);
        jTextArea1.setEditable(false);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        jButton1.setText("Encrypt");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText("Decrypt");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jLabel3.setText("Squre: ");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel1)
                    .addComponent(jLabel2)
                    .addComponent(jLabel3))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jTextField2, javax.swing.GroupLayout.DEFAULT_SIZE, 324, Short.MAX_VALUE)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 323, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 243, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jButton2)
                            .addComponent(jButton1))))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButton1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton2))
                    .addComponent(jLabel3)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 126, Short.MAX_VALUE))
                .addContainerGap())
        );
        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
// TODO 将在此处添加您的处理代码:
        jTextField2.setText(decrypt(jTextField2.getText(), jTextField1.getText()));
    }//GEN-LAST:event_jButton2ActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
// TODO 将在此处添加您的处理代码:
        jTextField2.setText(encrypt(jTextField2.getText(), jTextField1.getText()));
    }//GEN-LAST:event_jButton1ActionPerformed
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Main().setVisible(true);
            }
        });
    }
    
    // 变量声明 - 不进行修改//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // 变量声明结束//GEN-END:variables
    
}

class W
{
    public int i,j;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -