Sunteți pe pagina 1din 4

1. To encrypt the plaintext message using RSA algorithm.

Then perform the


reverse operation to get original plaintext.

import java.io.*;
import java.math.*;
import java.util.*;

public class RSA


{
private final BigInteger TWO=new BigInteger ("2");
private final BigInteger THREE=new BigInteger ("3");
private BigInteger d; //decryptionexponent
public BigInteger n;
public BigInteger e=new BigInteger ("3");
public RSA({intsize, Randomrnd)
{
generateKeyPair (size, rnd);
}
public void generateKeyPair(intsize, Randomrnd)
{
int sizel=size/2;
int size2=sizel;
int offsetl=(int) (5.0*rnd.nextDouble()+5.0);
int offset2=-offsetl;
if (rnd.nextDouble()<0.5)
{
offsetl=-offsetl;
offset2=-offset2;
}
sizel+=offsetl;
size2t+=offset?2;

//Generates two random primes so that p*q=n has size bits


BigInteger pl=new BigInteger (sizel,rnd);
BigInteger p=nextPrime (pl);

BigInteger pMl=p.subtract (BigInteger.ONE);


BigInteger ql=new BigInteger (sizez, rnd};
BigInteger g=nextPrime (ql);

BigInteger gMl=q.subtract (Biginteger.ONE);


n=p.multiply(q);
BigIntegerphiN=pM1.multiply (ql);

BigInteger e=-THREE;

d=e.modinverse (phin) ;
}

//next prime p after x, with p-l and 3 relatively prime


public BigIintegernextPrime (BigInteger x)
{
if (x.remainder (TWO) .equals (BigInteger. ZERO))
K=x.add (BigInteger .ONE);
while (true)
{
BigInteger xMl=x.subtract (Biginteger,.ONE);
if(! (xMl.remainder (THREE) } .equals (BigInteger. ZERO) )
if(s.isProbablePrime(10)) break;
x=x.add (TWO);
}
return x;
}
public BigintegergetN()
{
return(n);
}
public BigIntegergetE()
{
return (e);
}
public BigIntegergetD()
{
return (d);
}
//Encryption String type data
public BigIntegerRSAEncrypt (String s,BigIntegers, BigInteger nj
{
String t=new String();
for (inti=O;i¢s.length[);i++)
{//This loop converts Character String ascii equivalent String
inttmp=100+s.charAt (il;
t=t.concat (“"+tmp) ;
}
BigInteger m=new Biginteger(t);
return m.modPow(/e,n);
}
//Decryption String type data
public String RSADecrypt (BigInteger co)
{
BigInteger bi=c.modPow(d,n);
String cs=bi.toString();
String m=new String();
for(int j=0;j<cs.length () ;3+=3)
{
//This loop converts ascii equivalent String to character String
String tmpString=cs.substring(4,3+3);
inttmpInt=Integer.parselInt (tmpString})-100;
m=m.concat (m.valueOt ( (char) tmpInt));
}
return m;
}
//Enecryption BigInteger Number
public BigInteger RSAEncrypt2 (Bigintegerm, Bigintegere, BigInteger n)
{
return m.modPow(/e,n);
}
//Decryption BigInteger Number
public BigInteger RSADecrypt2? (BigInteger ¢)
{
return c.modPowtd,n);
}
public static void main(String[] args }
{
BigIntegerc,m2;
Random rand=new Random(50) ;
RSA rsa=new RSA(128, rand);
BigInteger m=néew BigInteger ("100");
c=rsa.RSAEncrypt2 (m,rsa.getE(),rsa.getN(}));
System.out.printlnic);
mM2=rsa.RSADecryptd2 (c);
System.out.println(m2) ;
}
}

S-ar putea să vă placă și