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

📄 rsa.txt

📁 经典而且著名的三大加密算法:RSA算法 DES算法 Diddie-Hellman算法--java实现
💻 TXT
字号:
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
import java.math.*;
public class RSA {
JFrame f;
JTextField t1;
JTextField t2;
JTextField t3;
JTextField t4;
JTextField t5;
JButton b;
JLabel l1;
JLabel l2;
JLabel l3;
JLabel l4;
JLabel l5;
int data[]=new int[4];
int fai=0;
int d;
int e=0;
int en;
int miwen;
int mingwen;
String lo;
int p;
int q;
int a[]=new int[100];
int number=0;
int shuru=0;
public RSA()
   {
	f=new JFrame("RSA");
	f.setLocation(400,240);
	f.setSize(400,200);
	t1=new JTextField(8);
	t2=new JTextField(8);
	t3=new JTextField(8);
	t4=new JTextField(8);
	t5=new JTextField(8);
	b=new JButton("start");
	l1=new JLabel("明文");
	l2=new JLabel("素数");
	l3=new JLabel("素数");
	l4=new JLabel("密文");
	l5=new JLabel("解密");
	
	l1.setBounds(17,10,60,20);
	l2.setBounds(95,10,60,20);
	l3.setBounds(173,10,60,20);
	l4.setBounds(248,10,60,20);
	l5.setBounds(330,10,60,20);
	
	t1.setBounds(10,30,60,30);
	t2.setBounds(85,30,60,30);
	t3.setBounds(165,30,60,30);
	t4.setBounds(245,30,60,30);
	t5.setBounds(320,30,60,30);
	b.setBounds(150,100,70,25);
	
	Container c=f.getContentPane();
	c.setLayout(null);
	c.add(t1,null);
	c.add(t2,null);
	c.add(t3,null);
	c.add(t4,null);
	c.add(t5,null);
	c.add(b,null);
	c.add(l1,null);
	c.add(l2,null);
	c.add(l3,null);
	c.add(l4,null);
	c.add(l5,null);
	b.addActionListener(
  			 new ActionListener()
  			 {
  				 public void actionPerformed(ActionEvent g)
  				 {
  					 shuru=Integer.parseInt(t1.getText());//String
  					 int p=Integer.parseInt(t2.getText());//int
  				     int q=Integer.parseInt(t3.getText());//int
  				     all(p,q);
  				     toerjinzhi(e);
  				     addsum1(shuru,a,number,en);
  				     String good=String.valueOf(miwen);
  				     t4.setText(good);
  				     toerjinzhi(d);
  				     addsum2(miwen,a,number,en);
  				     String nice=String.valueOf(mingwen);
  				     t5.setText(nice);
  				 }
  			 });
	    
	f.setVisible(true);
	
   }
public void all(int p,int q)
    {
	   this.p=p;
	   this.q=q;
	   en=p*q;//n
	   fai=(p-1)*(q-1);//fai n
	   e=Selecte(fai);
	   d=addd(e,fai);
	   
	 
    }
public int Selecte(int fai)//随机选择素数e
  {
	this.fai=fai;
	int j,k,n,c,s;
	int madom[]=new int[50];
	madom[0]=2;
	int temp=0;
	Random random=new Random();
	c=1;
	n=1;
	k=3;
	do{//求素数
	j=3;
	while(j<Math.sqrt(k)&&(k%j!=0))
		j=j+2;
		if(j>=Math.sqrt(k))
		{
			temp=k;
			if(c<50)
			{
				madom[c]=temp;
				c++;
				n++;
			}
			
		}
		k=k+2;
	}while(k<fai);
	s=Math.abs(random.nextInt())%(n+1);//随机选择数组下标
	e=madom[s];
	return e;
	
  }
public int addd(int e,int fai)
   {
	 this.e=e;
	 this.fai=fai;
	 int n=1;
	 while(true)
	 {
		 
		 if((n*fai+1)%e!=0){n++;}
		 else{d=(n*fai+1)/e;break;}
	 }
	 return d;
   }
public int[] toerjinzhi(int e)//e转换为二进制数
{
   this.e=e;


int i;int j=0;

for(i=0;i<99;i++)
   {j=e%2;
     e=e/2;
    a[i]=j;
    if(e==0)
     {number=i; break;}}

return a;

 
}//number
public int addsum1(int shuru,int[]a,int number,int en)//加密求模
   {
	this.shuru=shuru;
	this.number=number;
	this.en=en;
	this.a=a;
	int re=1;
	int rf=0;int j=number;
	for(int i=0;i<=number;i++)
	{
	rf=rf*2;
	re=(re*re)%en;
	if(a[j]==1)
	   {
	      rf=rf+1;
	      re=(re*shuru)%en;
	      miwen=re;
	    }
        j--;
	}
	return miwen;
   }
public int addsum2(int miwen,int[]a,int number,int en)////解密求和
{
	this.miwen=miwen;
	this.number=number;
	this.en=en;
	this.a=a;
	int re=1;
	int rf=0;int j=number;
	for(int i=0;i<=number;i++)
	{
	rf=rf*2;
	re=(re*re)%en;
	if(a[j]==1)
	   {
	      rf=rf+1;
	      re=(re*miwen)%en;
	      mingwen=re;
	    }
     j--;
	}
	return mingwen;
}
public static void main(String args[])
    {
	   new RSA();
    }
}

⌨️ 快捷键说明

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