code rsa en - de

2
Sample Java Code for RSA Encryption and Decryption Prepared by: Dr. Natarajan Meghanathan Any questions and/or feedback, email: [email protected] The code given below does the following: It takes two inputs from the user – an integer value for a minimum value of the public key and an integer value corresponding to an ASCII value for encryption The code generates two Big Integers, bigB_p and bigB_q, forming the basis for generating the public key and private key. The user input is first tried for a probable public key; if it cannot be a public key, then the input value is continuously incremented until we can find a public key. Once we find the public key, we use the RSA basics to find the corresponding private key. Using the public key, we encrypt the ASCII value entered by the user and print a Big Integer cipher value. We then decrypt the cipher value using the private key and extract the plaintext integer ASCII value. The BigInteger API in Java would be very useful. It is located at http://download.oracle.com/javase/1.4.2/docs/api/java/math/BigInteger.html import java.util.*; import java.math.BigInteger; class RSAtest{ public static void main(String[] args){ /* Creating two random number generators, each with a different seed */ Random rand1 = new Random(System.currentTimeMillis()); Random rand2 = new Random(System.currentTimeMillis()*10); int asciiVal = Integer.parseInt(args[1]); int pubKey = Integer.parseInt(args[0]); /* public key is at least a certain value input by the user */ /* returns a BigInteger that is not prime with probability less than 2^(-100) */ BigInteger bigB_p = BigInteger.probablePrime(32, rand1); BigInteger bigB_q = BigInteger.probablePrime(32, rand2); BigInteger bigB_n = bigB_p.multiply(bigB_q); BigInteger bigB_p_1 = bigB_p.subtract(new BigInteger("1")); //p-1 BigInteger bigB_q_1 = bigB_q.subtract(new BigInteger("1")); //q-1 BigInteger bigB_p_1_q_1 = bigB_p_1.multiply(bigB_q_1); // (p-1)*(q-1) // generating the correct public key

Upload: hades

Post on 28-Apr-2015

16 views

Category:

Documents


1 download

DESCRIPTION

code java untuk algoritma enkripsi dekripsi RSA. ilustrasi pada java code

TRANSCRIPT

Page 1: Code RSA En - De

Sample Java Code for RSA Encryption and Decryption

Prepared by: Dr. Natarajan Meghanathan

Any questions and/or feedback, email: [email protected]

The code given below does the following:

• It takes two inputs from the user – an integer value for a minimum value of the public key

and an integer value corresponding to an ASCII value for encryption

• The code generates two Big Integers, bigB_p and bigB_q, forming the basis for

generating the public key and private key. The user input is first tried for a probable

public key; if it cannot be a public key, then the input value is continuously incremented

until we can find a public key.

• Once we find the public key, we use the RSA basics to find the corresponding private

key.

• Using the public key, we encrypt the ASCII value entered by the user and print a Big

Integer cipher value. We then decrypt the cipher value using the private key and extract

the plaintext integer ASCII value.

The BigInteger API in Java would be very useful. It is located at

http://download.oracle.com/javase/1.4.2/docs/api/java/math/BigInteger.html

import java.util.*;

import java.math.BigInteger;

class RSAtest{

public static void main(String[] args){

/* Creating two random number generators, each with a different seed */

Random rand1 = new Random(System.currentTimeMillis());

Random rand2 = new Random(System.currentTimeMillis()*10);

int asciiVal = Integer.parseInt(args[1]);

int pubKey = Integer.parseInt(args[0]); /* public key is at least a

certain value input by the user */

/* returns a BigInteger that is not prime with probability less than 2^(-100)

*/

BigInteger bigB_p = BigInteger.probablePrime(32, rand1);

BigInteger bigB_q = BigInteger.probablePrime(32, rand2);

BigInteger bigB_n = bigB_p.multiply(bigB_q);

BigInteger bigB_p_1 = bigB_p.subtract(new BigInteger("1")); //p-1

BigInteger bigB_q_1 = bigB_q.subtract(new BigInteger("1")); //q-1

BigInteger bigB_p_1_q_1 = bigB_p_1.multiply(bigB_q_1); // (p-1)*(q-1)

// generating the correct public key

Page 2: Code RSA En - De

while (true){

BigInteger BigB_GCD = bigB_p_1_q_1.gcd(new BigInteger(""+pubKey));

if (BigB_GCD.equals(BigInteger.ONE)){

break;

}

pubKey++;

}

BigInteger bigB_pubKey = new BigInteger(""+pubKey);

BigInteger bigB_prvKey = bigB_pubKey.modInverse(bigB_p_1_q_1);

System.out.println("bigB_p: "+bigB_p);

System.out.println("bigB_q: "+bigB_q);

System.out.println(" public key : "+bigB_pubKey+" , "+bigB_n);

System.out.println(" private key: "+bigB_prvKey+" , "+bigB_n);

/* encrypting an ASCII integer value using the public key and decrypting

the cipher value using the private key and extracting the ASCII value back */

BigInteger bigB_val = new BigInteger(""+asciiVal);

BigInteger bigB_cipherVal = bigB_val.modPow(bigB_pubKey, bigB_n);

System.out.println("ciphertext: "+bigB_cipherVal);

BigInteger bigB_plainVal = bigB_cipherVal.modPow(bigB_prvKey, bigB_n);

int plainVal = bigB_plainVal.intValue();

System.out.println("plaintext: "+plainVal);

}

}

Sample Output: