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

📄 jmjm.java

📁 JAVA实现的基本用户界面的
💻 JAVA
字号:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
/*构造古典加密算法界面*/
public class JMJM extends WindowAdapter implements ActionListener,ItemListener
{
	Label l1=new Label("输入:"),l2=new Label("加密:"),l3=new Label("解密:"),l4=new Label("密钥:");    
	JFrame f;
	TextField t1=new TextField(55),t2=new TextField(55),t3=new TextField(55),t4=new TextField(20);
	Button b1=new Button("加密"),b2=new Button("解密"),b3=new Button("清屏");
	Choice c1;
	Panel p1,p2,p3,p4,p5,p6,p7,p8,p9;
	public void display(){
    f=new JFrame("加密算法 宋鹏 20042170 QQ348946154 ");
	f.setSize(480,200);
	f.setLocation(200,140);
	f.setBackground(Color.lightGray);
	f.setLayout(new BorderLayout());
	tiajiazujian();
	f.setVisible(true);
	}
/*添加界面组件以及监听器*/
	public void tiajiazujian(){             
	c1=new Choice();
	c1.add("移位算法");c1.add("仿射算法");c1.add("维吉尼亚算法");c1.add("置换算法");
	c1.addItemListener(this);
	f.add(c1,"North");
	p1=new Panel();
	p3=new Panel();
	f.add(p3,"Center");
	p3.setLayout(new FlowLayout());
	p3.add(l1);p3.add(t1);p3.add(l2);p3.add(t2);p3.add(l3);p3.add(t3);
	p2=new Panel();
	f.add(p2,"South");
	p2.setLayout(new GridLayout(1,5));
	p2.add(l4);p2.add(t4);p2.add(b1);p2.add(b2);p2.add(b3);
	b1.addActionListener(this);
	b2.addActionListener(this);
	b3.addActionListener(this);
	}
/*对应不同加密算法的按钮点击事件*/
	public void actionPerformed(ActionEvent e){                     
	if (e.getSource()==b3&&c1.getSelectedIndex()==0){
	t1.setText(" ");t2.setText(" ");t3.setText(" ");
	}
	if (e.getSource()==b1&&c1.getSelectedIndex()==0)
	{
		ywjiami();
	}
	
	if(e.getSource()==b2&&c1.getSelectedIndex()==0){
		ywjiemi();
	}
	if(e.getSource()==b1&&c1.getSelectedIndex()==1)
	{
		fcjiami();
	}
	if(e.getSource()==b2&&c1.getSelectedIndex()==1){
		fcjiemi();
	}
	if(e.getSource()==b1&&c1.getSelectedIndex()==2){
		wjnyjiami();
	}
	if(e.getSource()==b2&&c1.getSelectedIndex()==2){
		wjnyjiemi();
	}
	if(e.getSource()==b1&&c1.getSelectedIndex()==3){
		zhjiami();
	}
	if(e.getSource()==b2&&c1.getSelectedIndex()==3){
		zhjiemi();
	}
	}
	public void itemStateChanged(ItemEvent e){
	
	
	}
/*移位加密算法*/
	public void ywjiami(){                       
	String s1;
	String s2;
	char zifu[];
    s1=t1.getText();
	s2=t4.getText();
	int a;
	a=Integer.parseInt(s2);
	zifu = s1.toCharArray();
	 for (int i = 0;i<zifu.length ;i++ )
	 {  
		 zifu[i]=(char)(((zifu[i]-97+a)%26)+97);
		
	 }
	String s3=new String(zifu);
	s3=s3.toUpperCase();
	t2.setText(s3);
}
    
/*移位解密算法*/
	public void ywjiemi(){                        
	String s1;
	String s2;
	char zifu[];
    s1=t2.getText();
	s2=t4.getText();
	int a;
	a=Integer.parseInt(s2);
	zifu = s1.toCharArray();
	 for (int i = 0;i<zifu.length ;i++ )
	 {  
		 zifu[i]=(char)(((zifu[i]-97-a)%26)+97);
		
	 }
	String s3=new String(zifu);
	s3=s3.toLowerCase();
	t3.setText(s3);
}

/*求最大公约数-辗转相除法*/
int gcd(int a, int b)                             
{
	int k = 0;

	do
	{
	    k = a%b;
	    a = b;
	    b = k;
	}while(k!=0);
	return a;
}

/*求模逆*/
int Ni(int a, int b)                             
{
	int i = 0;
	while(a*(++i)%b!=1);
	return i;
}
/*仿射加密算法*/
public void fcjiami(){                          
	int  i=0, a=0, b=0, tmp;
	String s1;
	String s2;
	char zifu[];
    s1=t1.getText();
	s2=t4.getText();
    a=Integer.parseInt(s2)/10;
	b=Integer.parseInt(s2)%10;
	zifu = s1.toCharArray();
/*如果输入密钥不合法则显示密钥错误*/
if(gcd(a,26)!=1)                               
	{
	    String s3=new String();
			s3="密钥错误";
		    t3.setText(s3);
	}

	for(i=0; i<zifu.length; i++)
	{
	    if(zifu[i]>96&&zifu[i]<123)
		zifu[i] = (char)((a*(zifu[i]-97)+b)%26+65);
	    else if(zifu[i]>64&&zifu[i]<91)
		zifu[i] = (char)((a*(zifu[i]-65)+b)%26+65);
	}
	String s4=new String(zifu);
	t2.setText(s4);
}
/*仿射解密算法*/
public void fcjiemi(){                         
	int  i=0, a=0, b=0, tmp;
	String s1;
	String s2;
	char zifu[];
    s1=t1.getText();
	s2=t4.getText();
/*在密钥输入文本框中输入2位密钥首先转换成2位整数在利用‘/’和‘%’算法求出2个合法密钥在进行计算*/
    a=Integer.parseInt(s2)/10;
	b=Integer.parseInt(s2)%10;
	zifu = s1.toCharArray();

for(i=0; i<zifu.length; i++)
	{
	    if(zifu[i]>64&&zifu[i]<91)
	    {
		tmp = Ni(a,26)*((zifu[i]-65)-b);
		if(tmp<0)
		    zifu[i] = (char)(tmp%26+26+97);
		else
		    zifu[i] = (char)(tmp%26+97);
	    }
	}
         String s4=new String(zifu);
	     t3.setText(s4);
	
}

/*维吉尼亚加密算法*/
public void wjnyjiami()    
{
int i,j,s=0;
int k=0 ;
	String s1;
	String s2;
	char zifu[],miyao[];
    s1=t1.getText();
	s2=t4.getText();
	miyao =s2.toCharArray();
	zifu = s1.toCharArray();
	
for(i=0; i<zifu.length; i++)
	{

	//	System.out.println(zifu[i]-'a');
		
		
		zifu[i] = (char)((zifu[i]-'a'+(miyao[k%miyao.length]-'a'))%26+'a');
		
//		System.out.println(zifu[i]+"#$$%$%"+k+"$4$$$"+miyao[k%miyao.length]);
		k++;
		
	    
	 
	}
String s3=new String(zifu);
s3=s3.toUpperCase();
t2.setText(s3);
}
/*维吉尼亚解密算法*/
public void wjnyjiemi()    
{
    int i,j,k=0,tmp;
	String s1;
	String s2;
	char zifu[],miyao[];
    s1=t2.getText();
	s2=t4.getText();
	s1=s1.toLowerCase();
	miyao =s2.toCharArray();
	zifu = s1.toCharArray();
/*解密算法中会出现减出负数的状况如果出现负数加26解决问题*/
	  for (i =0;i<zifu.length ;i++ )
	  {   
		  tmp = (zifu[i]-miyao[k%(miyao.length)]); 
		  zifu[i]=(char)(tmp+65);
		  if (tmp<0)
		  zifu[i] =(char)(tmp+65+26);
	  k++;
	  };
String s3=new String(zifu);
s3=s3.toLowerCase();
t3.setText(s3);
}

/*置换加密算法*/
public void zhjiami()    
{
    int i,k=0,tmp;
	String s1;
	String s2;
	char zifu[],miyao[];
	s1=t1.getText();
	s2=t4.getText();
    zifu=s1.toCharArray();
    miyao =s2.toCharArray();
	char zifu1[]=new char[zifu.length];
	int j[]=new int[miyao.length];
/*将输入的密钥的ASC码减去字符0对应的ASC码得数相应密钥对应的整形数值存取在
整型数组j中*/
	for(i=0;i<miyao.length;i++){
	j[i]=miyao[i]-48;
	};

	for(i=0; i<zifu.length; i++)
	{
	  tmp = i/miyao.length;
	  zifu1[i] =zifu[j[i%miyao.length]+(tmp*miyao.length)-1];
	  
	};


	
	String s3=new String(zifu1);
	s3=s3.toUpperCase();
	t2.setText(s3);
 
}

/*置换解密算法*/
public void zhjiemi()    
{
    int i,k=0,tmp;
	String s1;
	String s2;
	char zifu[],miyao[];
	s1=t2.getText();
	s2=t4.getText();
    zifu=s1.toCharArray();
    miyao =s2.toCharArray();
	char zifu1[]=new char[zifu.length];
	int j[]=new int[miyao.length];
/*将输入的密钥的ASC码减去字符0对应的ASC码得数相应密钥对应的整形数值存取在
整型数组j中*/
	for(i=0;i<miyao.length;i++){
	j[i]=miyao[i]-48;
	};
    for(i=0; i<zifu.length; i++){
	tmp = i/miyao.length;
    zifu1[j[i%miyao.length]+tmp*miyao.length-1] =zifu[i];
	};
	
	String s3=new String(zifu1);
	s3=s3.toLowerCase();
	t3.setText(s3);
 
}
public static void main(String arg[])
	{
	JMJM ob=new JMJM();
	ob.display();
	}
}

⌨️ 快捷键说明

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