I have implemented RSA using java as shown below.
mport java.math.BigInteger;
import java.util.Random;
class SimpleRSA {
public static BigInteger p, q, N, v, k, d;
public static void main(String[] args) {
// p & q are prime numbers
Random myRandom = new Random(0);
p = BigInteger.probablePrime(512, myRandom);
q = BigInteger.probablePrime(512, myRandom);
System.out.println("Value of p:" + p);
System.out.println("Value of q:" + q);
// N = pq
N = p.multiply(q);
System.out.println("Value of N:" + N);
// v = (p-1)*(q-1)
v =
(p.subtract(BigInteger.valueOf(1))).multiply(
q.subtract(BigInteger.valueOf(1)));
System.out.println("Value of v:" + v);
// Compute k such that gcd(k, v) = 1
k = new BigInteger("3");
while(v.gcd(k).intValue() > 1) k = k.add(new BigInteger("2"));
System.out.println("Value of k:" + k);
// Compute d such that (d * k)%v = 1
d = k.modInverse(v);
System.out.println("Value of d:" + d);
System.out.println("Public Key (k,N): (" + k + "," + N + ")");
System.out.println("Private Key (d,N): (" + d + "," + N + ")");
// Encryption
String text = "Welcome to Java";
System.out.println("Sample text:" + text);
byte[] cipherData = text.getBytes();
BigInteger a = new BigInteger(cipherData);
System.out.println("BigInteger a:" + a);
BigInteger b = a.modPow(k, N);
System.out.println("Encrypted data:" + b);
// Decryption
BigInteger c = b.modPow(d, N);
byte[] decryptedData = c.toByteArray();
String plainText = new String(decryptedData);
System.out.println("Decrypted data:" + plainText);
}
}
Now i want to implement it using socket programming.please send me idea how to implement this using Socket programming and how to run this on different machines.
hoping for positive reply....thank you