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