📄 main.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 + -