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

📄 rsafrm.java

📁 常用加密解密算法
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class RSAFrm{
	JFrame frm=new JFrame("RSA公钥密码");
	JLabel mlabel=new JLabel("明文m");
	JLabel plabel=new JLabel("素数p(保密)");
	JLabel qlabel=new JLabel("素数q(保密)");
	JLabel nlabel=new JLabel("公钥n(公开)");
	JLabel elabel=new JLabel("公钥e(随机数公开)");
  JLabel qnlabel=new JLabel("私钥Φ(n)(保密)");	
	JLabel dlabel=new JLabel("私钥d(保密)");
	JLabel fenzulabel=new JLabel("分组长度");
	JLabel miwenl=new JLabel("密文c");
	JLabel mingwenl=new JLabel("明 文m");
	
	JTextField mfield=new JTextField(10);
	JTextField pfield=new JTextField(10);
	JTextField qfield=new JTextField(10);
	JTextField nfield=new JTextField(10);
	JTextField efield=new JTextField(10);
  JTextField qnfield=new JTextField(10);
  JTextField dfield=new JTextField(10);
  JTextField fenzufld=new JTextField(10);
  JTextField miwenfld=new JTextField(10);
  JTextField mingwenfld=new JTextField(10);
     
  JButton b1=new JButton(" 加  密 ");
  JButton b2=new JButton(" 解  密 ");
  //b2.setEnabled(false);
  JButton b3=new JButton("解公钥与私钥");
  
  int n,p,q,q_n,e,d;
  int zulen;
    
  RSAFrm()
  { nfield.setEditable(false);
  	efield.setEditable(false);
  	qnfield.setEditable(false);
  	dfield.setEditable(false);
  	miwenfld.setEditable(false);
  	mingwenfld.setEditable(false);
  	
  	JPanel labelPanel=new JPanel();
  	labelPanel.setLayout(new GridLayout(10,1));
  	labelPanel.add(mlabel);
  	labelPanel.add(plabel);
  	labelPanel.add(qlabel);
  	labelPanel.add(nlabel);
  	labelPanel.add(elabel);
  	labelPanel.add(qnlabel);
  	labelPanel.add(dlabel);
  	labelPanel.add(fenzulabel);
  	labelPanel.add(miwenl);
  	labelPanel.add(mingwenl);
  	
  	JPanel fieldPanel=new JPanel();
  	fieldPanel.setLayout(new GridLayout(10,1));
  	fieldPanel.add(mfield);
  	fieldPanel.add(pfield);
  	fieldPanel.add(qfield);
  	fieldPanel.add(nfield);
  	fieldPanel.add(efield);
  	fieldPanel.add(qnfield);
  	fieldPanel.add(dfield);
  	fieldPanel.add(fenzufld);
  	fieldPanel.add(miwenfld);
  	fieldPanel.add(mingwenfld);
  	
  	JPanel bPanel=new JPanel();
  	BConstraints bs=new BConstraints();
  	GridBagLayout gridbag=new GridBagLayout();
  	GridBagConstraints c=new GridBagConstraints();
  
    bs.buildConstraints(c,0,0,1,1,1,1);
	  gridbag.setConstraints(b3,c);
	  bPanel.add(b3);
  
  	bs.buildConstraints(c,1,0,1,1,1,1);
	  gridbag.setConstraints(b1,c);
	  bPanel.add(b1);

   	bs.buildConstraints(c,2,0,1,1,1,1);
	  gridbag.setConstraints(b2,c);
	  bPanel.add(b2);
	  
	  b3.addActionListener(new RSAB3());
	  b1.addActionListener(new RSAB1());
    b2.addActionListener(new RSAB2());	  
	  
    JPanel northPanel=new JPanel();
    northPanel.setLayout(new GridLayout(1,2));
    northPanel.add(labelPanel);
    northPanel.add(fieldPanel);
    
    Container cp=frm.getContentPane();
    cp.add(northPanel,BorderLayout.CENTER);
    cp.add(bPanel,BorderLayout.SOUTH);
  	
  	frm.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  	frm.pack();
  	frm.setBounds(150,150,430,300);
  	frm.setResizable(false);
  	frm.setVisible(true);
  	}
  private long modn(int m,int u)
  {long n1,n2,b1,b2,r,qq,t;
   n1=m;
   n2=u;
   b1=0;b2=1;
   while((n2!=1)&&(n2!=0))
        { 
        	qq=n1/n2;
        	r=n1%n2;
        	t=b2;
        	b2=b1-qq*b2;
        	b1=t;
        	n1=n2;
        	n2=r;
         	}	
    if(n2==0)
      t=0;
    else
      t=b2;
      
    if(b2<0)
      t=b2+m;  
    return t;              	
  	}	
  private long mr_modn(int m,int r,int p)
  {
  	long a,b,c;
  	a=m;
  	b=r;
  	c=1;
  	while(b!=0)
  	  {                                 
  	  	if((b%2)!=0)
  	  	  {
  	  	   b=b-1;
  	  	   c=(a*c)%p;
  	  	  }
  	  	else
  	  	  {
  	  	  	b=b/2;
  	  	  	a=(a*a)%p;
  	  	  	}  	
  	  	}
  	return c;  	
  	}
  class RSAB3 implements ActionListener {
  	public void actionPerformed(ActionEvent ev3)
  	{//求公钥与私钥函数
  	 int i,flag;
  	 String ps,qs;
  	 p=Integer.parseInt(pfield.getText());
  	 q=Integer.parseInt(qfield.getText());
  	 q_n=(p-1)*(q-1);
  	 n=p*q;
  	 flag=0;
  	 while(flag==0)
  	    {
  	     e=(int)(Math.random()*100);
  	     if((e>10)&&(e<q_n))
  	       {System.out.println(e);
  	       	int a,b,t;
  	       	a=q_n;b=e;
  	       	while((a%b)!=0)
  	       	     {t=b;
  	       	     	b=a%b;
  	       	     	a=t;
  	       	     	}
  	       	if(b==1)
  	       	  flag=1;
  	        }
  	      }
  	  nfield.setText(Integer.toString(n));
  	  efield.setText(Integer.toString(e));
  	  qnfield.setText(Integer.toString(q_n));
  	  d=(int)(modn(q_n,e));
  	  dfield.setText(Integer.toString(d));
  		}
  	}	
  
  class RSAB1 implements ActionListener {
  	public void actionPerformed(ActionEvent ev1)
  	{
  		//处理加密
  	 int []c=new int[20];
  	 String  ms=mfield.getText(),sc;
  	 zulen=Integer.parseInt(fenzufld.getText());
  	 int mlen,zushu,yushu,i,j,t1,t2,k,t;
   	 mlen=ms.length();
  	 zushu=mlen/zulen;
  	 yushu=mlen%zulen;
  	 System.out.println("yushu="+yushu+"\n");
  	 System.out.println("original data:");
  	 for(i=0;i<zushu;i++)
  	    {t1=0;
  	    	for(j=0;j<zulen;j++)
  	    	  {t2=ms.charAt(i*zulen+j)-97;
  	    	   t1=t1*100+t2;
  	    	  	}
  	    	System.out.print(t1+" ");  	
  	    	c[i]=(int)(mr_modn(t1,e,n));  	
  	    	}
   	  if(yushu!=0)
  	    { t1=0;  	
  	      for(j=0;j<yushu;j++)
  	        {t2=(ms.charAt(i*zulen+j)-97);
  	         t1=t1*100+t2;
  	         }
  	     for(j=yushu;j<zulen;j++)
  	        {t1=t1*100+30;
  	     	    }
  	  System.out.print(t1+"\n");  	   	
  	  c[i]=(int)(mr_modn(t1,e,n));  
  	    i++;
  	    }    
  	  
  	  byte []char_c=new byte[i*zulen*2];   
  	  System.out.println("\nafter secreted:NO1:::");
  	  for(j=0;j<i;j++)
  	     {t=c[j];
  	     	for(k=0;k<zulen*2;k++)
  	     	   {char_c[(j+1)*zulen*2-1-k]=(byte)(t%10+48);
  	     	   	t=t/10;
  	           System.out.print(char_c[(j+1)*zulen*2-1-k]);
  	          }
  	       System.out.print("  ");   
  	       }
  	       
  	  sc=new String(char_c);
  	  System.out.println("\nafter secreted:\n"+sc);
  	  miwenfld.setText(sc); 
  	  //b2.setEnabled(true); 
  		}
  	}
  		
  class RSAB2 implements ActionListener {
  	public void actionPerformed(ActionEvent ev2)
  	{//解密算法
  	 int i,j,k,clen,zushu,t;
  	 int []prem=new int[20],aftm=new int[20];
  	 byte []finalm=new byte[20];
  	 
  	 String cs;
  // zulen;
  	 cs=miwenfld.getText();
  	 clen=cs.length();
  	 byte []cbyte=new byte[clen];
  	 cbyte=cs.getBytes();
  
  	 for(i=0;i<clen;i++)
  	     cbyte[i]=(byte)(cbyte[i]-48);
  	 zushu=clen/2/zulen;
  	 System.out.println("\nzushu="+zushu);
  	 for(i=0;i<zushu;i++)
  	    {t=0;
  	     for(j=0;j<zulen*2;j++)
  	        {t=t*10+cbyte[i*2*zulen+j];
  	        }
  	     prem[i]=t;
  	     aftm[i]=(int)(mr_modn(prem[i],d,n));  
  	    }   	
  	  System.out.print("\nafter desecreted:\n");   
  	 for(i=0;i<zushu;i++)
  	     System.out.print(aftm[i]+" ");   	
  	 for(i=0;i<zushu;i++)
  	     {t=aftm[i];
  	     	for(j=0;j<zulen;j++)
  	     	   {
  	     	   	finalm[(i+1)*zulen-1-j]=(byte)(t%100);
  	     	   	t=t/100;
  	     	   	}
  	     	}
  	 for(j=0,t=0;j<zushu*zulen;j++)
  	    if((finalm[j]>=0)&&(finalm[j]<=25))
  	      {finalm[j]=(byte)(finalm[j]+97);
  	       t++;
  	      }
  	 mingwenfld.setText(new String(finalm,0,t));         	   
  	    
  	 //System.out.println("\nafter desecreted:"+tm);
  	
  	}		
   }	
//  public static void main(String args[])
//  {
//  	RSAFrm rsaf=new RSAFrm();
//  	}
  }

⌨️ 快捷键说明

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