Click here to Skip to main content
14,735,594 members
Please Sign up or sign in to vote.
3.00/5 (1 vote)
See more:

I am doing project in concurrent Java. If anyone know RSA algorithm in concurrent Java or using threads.
Find my code for the sequential RSA algorithm. Can anyone change paralleize this code.
import javax.crypto.Cipher;
public class rsa {
  private static byte[] encrypt(byte[] inpBytes, PublicKey key,
      String xform) throws Exception {
    Cipher cipher = Cipher.getInstance(xform);
    cipher.init(Cipher.ENCRYPT_MODE, key);
    return cipher.doFinal(inpBytes);
  private static byte[] decrypt(byte[] inpBytes, PrivateKey key,
      String xform) throws Exception{
    Cipher cipher = Cipher.getInstance(xform);
    cipher.init(Cipher.DECRYPT_MODE, key);
    return cipher.doFinal(inpBytes);
  public static void main(String[] unused) throws Exception {
   long starttime =System.currentTimeMillis();
   String xform = "RSA/NONE/PKCS1PADDING";
    // Generate a key-pair
    KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
    kpg.initialize(1024); // 1024 is the keysize.
    KeyPair kp = kpg.generateKeyPair();
    PublicKey pubk = kp.getPublic();
    PrivateKey prvk = kp.getPrivate();
    byte[] dataBytes =
        "J2EE Security for Servlets, EJBs and Web Services".getBytes();
    byte[] encBytes = encrypt(dataBytes, pubk, xform);
    byte[] decBytes = decrypt(encBytes, prvk, xform);
    String res=new String(decBytes);
    boolean expected = java.util.Arrays.equals(dataBytes, decBytes);
    System.out.println("Test " + (expected ? "SUCCEEDED!" : "FAILED!"));
    long endtime=System.currentTimeMillis();
System.out.println("Time required for sequential rsa algorithm:"+(endtime-starttime)+"millisecond");
Updated 31-Mar-11 3:03am
Sandeep Mewara 31-Mar-11 8:03am
What does: "Can anyone change paralleize this code" this mean?
Keith Barrow 31-Mar-11 10:28am
There isn't any loop to parallelize. Even if there were, IIRC RSA needs to run sequentially to work.

1 solution

Dude, your code isn't doing the actual encoding. All you're doing is using the encryption classes built into the Java libraries. You're not implementing the algorithm at all!

Besides, RSA is a sequential algorithm. You cannot encode the next block of data without knowing the result of the previous block. That alone says you can't parallelize it.

About the only thing you can do is put each instance of your RSA class on a seperate thread so you can encrypt/decrypt different datasets at the same time.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900