import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import javax.swing.Timer;
import java.sql.*;
import java.util.Random;
import javax.swing.border.Border;
public class RSA extends JFrame implements ActionListener {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int w = screenSize.width;
int h = screenSize.height;
int p;int q;int n; int e; int z;int d; boolean check1,check2;
int xx=0;int z2=0;
String message="";
String decmessage="";
char msgchars[];
int decmsgint[];int decmsgint2[];
char decchars[];
int xr1;
int msgint[];
int factors[];
double msgdouble[];double de;double msgdouble2[];double dd;
char chars[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q',
'r','s','t','u','v','w','x','y','z'};
JInternalFrame intfrsa1;
JPanel p1,p2;
JLabel lwelcome=new JLabel("Welcome to RSA Technique");
JLabel lp=new JLabel("please enter the first number(p):");
JLabel lq =new JLabel("please enter the second number(q):");
JLabel le =new JLabel();
JLabel lz =new JLabel();
JLabel ld =new JLabel();
JLabel lmessage=new JLabel("please enter the message you want to encrypt:");
JTextField tfp=new JTextField();
JTextField tfq=new JTextField();
JTextField tfe=new JTextField();
JTextField tfmessage=new JTextField();
JLabel lenc1=new JLabel("The encrypted message is:");
JLabel lenc2=new JLabel();
JButton bexit=new JButton("Exit");
JButton breset=new JButton("Reset");
JButton bnext=new JButton("Next");
JButton benc=new JButton("Encrypt");
JButton bdec=new JButton("Decrypt");
JMenuItem rsa=new JMenuItem("RSA");
JLabel ldec=new JLabel("Enter the Message you want to decrypt it:");
JLabel ldec1=new JLabel("The decrypted Message is:");
JLabel lkey=new JLabel("Enter Key:-");
JLabel lhint=new JLabel("Hint: you must enter message concatenated. a=1, z=26 or 0");
JLabel ldec2=new JLabel();
JTextField tfkey=new JTextField();
JRadioButton r1=new JRadioButton("Encrypt an Message");
JRadioButton r2=new JRadioButton("Decrypt an Message");
JButton bok=new JButton("OK");
public RSA() {
factors=new int[10];
p1=new JPanel();
p1.setLayout(null);
p1.setBackground(Color.green);
p2=new JPanel();
p2.setLayout(null);
p2.setBackground(Color.green);
intfrsa1=new JInternalFrame("RSA",true,true,true,true);
intfrsa1.setSize(w,h);
intfrsa1.getContentPane().add(p1);
lwelcome.setBounds(150,5,600,25);
lwelcome.setFont(new java.awt.Font("Dialog",1,20));
lp.setBounds(10,60,350,25);
tfp.setBounds(320,60,30,25);
lq.setBounds(10,100,300,25);
tfq.setBounds(320,100,30,25);
lp.setFont(new java.awt.Font("Dialog",1,17));
lq.setFont(new java.awt.Font("Dialog",1,17));
le.setFont(new java.awt.Font("Dialog",1,17));
lz.setFont(new java.awt.Font("Dialog",1,17));
ld.setFont(new java.awt.Font("Dialog",1,17));
bnext.setBounds(500,100,200,25);
bnext.setBackground(Color.cyan);
lenc2.setForeground(Color.red); lenc2.setFont(new java.awt.Font("Dialog",1,20));
ButtonGroup bg=new ButtonGroup();
r1.setBackground(Color.green);
r2.setBackground(Color.green);
bok.setBackground(Color.cyan);
lmessage.setFont(new java.awt.Font("Dialog",1,18));
tfmessage.setFont(new java.awt.Font("Dialog",1,18));
tfmessage.setForeground(Color.red);
ldec.setFont(new java.awt.Font("Dialog",1,18));
benc.setBackground(Color.cyan);
bdec.setBackground(Color.cyan);
lenc1.setFont(new java.awt.Font("Dialog",1,18));
ldec1.setFont(new java.awt.Font("Dialog",1,18));
ldec.setFont(new java.awt.Font("Dialog",1,18));
ldec2.setFont(new java.awt.Font("Dialog",1,18));
ldec2.setForeground(Color.red);
bexit.setBackground(Color.cyan);
breset.setBackground(Color.cyan);
breset.setBounds(560,400,100,25);
bexit.setBounds(670,400,100,25);
bg.add(r1);
bg.add(r2);
p1.add(lwelcome);
p1.add(lp);
p1.add(tfp);
p1.add(lq);
p1.add(tfq);
p1.add(le);
p1.add(lz);
p1.add(ld);
p1.add(tfe);
p1.add(bnext);
p1.add(r1);p1.add(r2);
p1.add(bok);
p1.add(lmessage);p1.add(lmessage);p1.add(lenc2);p1.add(lenc1);p1.add(ldec2);
p1.add(tfmessage);p1.add(benc);p1.add(bdec);p1.add(ldec);p1.add(ldec1);
p1.add(bexit);p1.add(breset);
rsa.addActionListener(this);
bnext.addActionListener(this);
bok.addActionListener(this);
r1.addActionListener(this);
r2.addActionListener(this);
benc.addActionListener(this);
bdec.addActionListener(this);
bexit.addActionListener(this);
breset.addActionListener(this);
}
public void actionPerformed(ActionEvent ee) {
if(ee.getSource()==rsa){
intfrsa1.setVisible(true);
}
if(ee.getSource()==bnext){
String se="e= ";String sz="Z= ";
xx=0;
p=Integer.parseInt(tfp.getText());
q=Integer.parseInt(tfq.getText());
check1=isPrime(p);
check2=isPrime(q);
if(check1==false&&check2==false){
JOptionPane.showMessageDialog(null,"Error:p and q are not prime");
xx=1;
}
if(check1==false&&xx!=1){
JOptionPane.showMessageDialog(null,"Error:p is not prime");
xx=1;
}
if(check2==false&&xx!=1){
JOptionPane.showMessageDialog(null,"Error:q is not prime");
xx=1;
}
else if(p*q<=26&&xx!=1){
JOptionPane.showMessageDialog(null,"Error:p*q must larger than 26");
xx=1;
}
else
if(check1==true&&check2==true){
n=p*q;
z=((p-1)*(q-1));
z2=z;
}
//////////////////////////////////////////////////////////////
int h=0;int counter=0;int safecounter=0;
//*********************************************contain factors of z
for (int i = 2; i <= z ; i++) {
if (z % i == 0) {
if (isPrime(i)) {
System.out.println(i);
factors[h]=i;
z /= i;
if(z%2==0){
i=1;
}
h++;
counter++;// for number of factors
}}}
// find e by comparing with factors*************
for(int i=3;i<n;i++){
for(int j=0;j<counter;j++){
if(i%factors[j]!=0){
safecounter++;
if(safecounter==counter){
e=i;///////////////////////////find e
i=n;//exit with this number
}
}
else if(i%factors[j]==0){
safecounter=0;
j=counter;//not this number
}
}}
if(xx!=1){
lz.setBounds(10,140,100,25);
le.setBounds(110,140,200,25);
ld.setBounds(210,140,300,25);
lz.setText("Z= "+z2);
le.setText("e= "+e);
}
//*************************************find d****************
int b=0;
for(int i=0;i<50;i++){
try{
d = ( ( (z2 * b) + 1) / e);
if ( ( (z2 * b) + 1) % e == 0 && d != e) {
System.out.print("d is " + d);
ld.setText("d= " + d);
i = 50;
}
}
catch(Exception ex){}
b++;
}
if(xx!=1){
r1.setBounds(10,170,200,25);
r2.setBounds(250,170,200,25);
bok.setBounds(470,170,150,25);
}
}
//**************************************bok***************************
if(ee.getSource()==bok){
if(r1.isSelected()){
xr1=1;
bdec.setBounds(0,0,0,0);
ldec.setBounds(0,0,0,0);
benc.setBounds(600,250,100,25);
lmessage.setBounds(20,220,600,30);
tfmessage.setBounds(10,250,500,25);
lhint.setBounds(10,270,500,25);
lkey.setBounds(600,200,200,30);
tfkey.setBounds(580,250,200,25);
}
else if(r2.isSelected()){
xr1=0;
benc.setBounds(0,0,0,0);
lmessage.setBounds(0,0,0,0);
bdec.setBounds(600,250,100,25);
ldec.setBounds(20,220,600,30);
tfmessage.setBounds(10,250,500,25);
lhint.setBounds(10,270,500,25);
lkey.setBounds(600,200,200,30);
tfkey.setBounds(580,250,200,25);
}
}
//************************************************encrypt*********
if(ee.getSource()==benc){
lenc1.setBounds(10, 320, 400, 25);
lenc2.setBounds(200,360,600,25);
ldec1.setBoun
评论0