?? rsafrm.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("素數(shù)p(保密)");
JLabel qlabel=new JLabel("素數(shù)q(保密)");
JLabel nlabel=new JLabel("公鑰n(公開)");
JLabel elabel=new JLabel("公鑰e(隨機(jī)數(shù)公開)");
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)
{//求公鑰與私鑰函數(shù)
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();
// }
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -