📄 vigenere.java
字号:
import javax.swing.*;
import java.awt.event.*;
public class Vigenere
{ JButton a,b;
public JTextField t1,t2,t3,t4;
GDFrame ks;
String k;
public Vigenere()
{
ks=new GDFrame("Vigenere密码");
ks.show();
a=ks.getB1();
b=ks.getB2();
a.addActionListener(new Ca());
b.addActionListener(new Cb());
t1=ks.getT1();
t2=ks.getT2();
t3=ks.getT3();
t4=ks.getT4();
}
class Ca implements ActionListener{
public void actionPerformed(ActionEvent e)
{
String m,c;
char s1[]=new char[26],t,cc[]=new char[50];
int lenm,lenk,posm[]=new int[50],posk[]=new int[50],posc[]=new int[50]; //lenm,lenk为明文和密钥长度,posm[]\posk[]\posc分别存放明文、密钥、密文位置序列 //存放明文和密钥长度
for(int i=0;i<=25;i++) //存放26个字母原序
{s1[i]=(char)(97+i);
}
m=t1.getText(); //文本1里面的字符串,明文
k=t2.getText(); //密钥输入的字符串
lenm=m.length();
lenk=k.length();
for(int i=0;i<lenm;i++)
{t=m.charAt(i);
for(int j=0;j<26;j++)
if(t==s1[j])
posm[i]=j;
}
for(int i=0;i<lenk;i++)
{t=k.charAt(i);
for(int j=0;j<26;j++)
if(t==s1[j])
posk[i]=j;
}
for(int i=0;i<lenm;i++)
posc[i]=(posm[i]+posk[i%lenk])%26;
for(int i=0;i<lenm;i++)
cc[i]=s1[posc[i]];
c=new String(cc,0,lenm);
t3.setText(c);
}
}
class Cb implements ActionListener{
public void actionPerformed(ActionEvent e)
{
String m,c;
char s1[]=new char[26],t,mm[]=new char[50];
int lenc,lenk,posm[]=new int[50],posk[]=new int[50],posc[]=new int[50]; //lenm,lenk为明文和密钥长度,posm[]\posk[]\posc分别存放明文、密钥、密文位置序列 //存放明文和密钥长度
for(int i=0;i<=25;i++) //存放26个字母原序
{s1[i]=(char)(97+i);
}
c=t3.getText();
lenc=c.length(); //得到密文长度
lenk=k.length(); //密钥长度
for(int i=0;i<lenc;i++)
{t=c.charAt(i);
for(int j=0;j<26;j++)
if(t==s1[j])
posc[i]=j;
}
for(int i=0;i<lenk;i++)
{t=k.charAt(i);
for(int j=0;j<26;j++)
if(t==s1[j])
posk[i]=j;
}
for(int i=0;i<lenc;i++)
posm[i]=(posc[i]-posk[i%lenk]+26)%26;
for(int i=0;i<lenc;i++)
mm[i]=s1[posm[i]];
m=new String(mm,0,lenc);
t4.setText(m);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -