import java.math.BigInteger; public class Test_RSA2 { public static void main(String[] args) { BigInteger p = new BigInteger("32416183339"); BigInteger pminus1 = new BigInteger("32416183338"); BigInteger q = new BigInteger("4222234763"); BigInteger qminus1 = new BigInteger("4222234762"); BigInteger n = p.multiply(q);// 136868736177707213657 BigInteger pqminus1=pminus1.multiply(qminus1); BigInteger e=new BigInteger("2147"); BigInteger d=e.modInverse(pqminus1); String TheString="RSA encryption is a topic discussed a bit in CS4010."; String After_en_decrypting=""; int parts=(TheString.length()/5); parts=((TheString.length()-5*parts)==0)?parts:(parts+1); BigInteger holder=BigInteger.ZERO; BigInteger[] encrypt=new BigInteger[parts]; BigInteger[] decrypt=new BigInteger[parts]; for (int i=0;i<parts;i++) { if (i==parts-1) { System.out.println(TheString.substring(i*5)); holder=new BigInteger(TheString.substring(i*5).getBytes()); } else { System.out.println(TheString.substring(i*5,i*5+5)); holder=new BigInteger(TheString.substring(i*5,i*5+5).getBytes()); } encrypt[i]=holder.modPow(e,n); } for (int i=0;i<parts;i++) { decrypt[i]=encrypt[i].modPow(d,n); After_en_decrypting=After_en_decrypting+(new String(decrypt[i].toByteArray())); } System.out.println(After_en_decrypting); System.exit(0); } }