This is a cryptology question. If needed, please refer to the course textbook, I
ID: 3696543 • Letter: T
Question
This is a cryptology question. If needed, please refer to the course textbook, Introduction to Modern Cryptography by Katz and Lindell, to answer the question. It should be available for reference online. Here is a link: https://drive.google.com/file/d/0B2K23P7N2S-Sc1ZOYk9ZeDJhckk/view?usp=sharing
Please answer the question fully, and with any necessary examples/proofs. Please show ALL steps and explain logic fully.
Explanation / Answer
import java.math.BigInteger; import java.util.Random; import java.io.*; public class RSA { private BigInteger p; private BigInteger q; private BigInteger N; private BigInteger phi; private BigInteger e; private BigInteger d; private int bitlength = 1024; private int blocksize = 256; //blocksize in byte private Random r; public RSA() { r = new Random(); p = BigInteger.probablePrime(bitlength, r); q = BigInteger.probablePrime(bitlength, r); N = p.multiply(q); phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE)); e = BigInteger.probablePrime(bitlength/2, r); while (phi.gcd(e).compareTo(BigInteger.ONE) > 0 && e.compareTo(phi) < 0 ) { e.add(BigInteger.ONE); } d = e.modInverse(phi); } public RSA(BigInteger e, BigInteger d, BigInteger N) { this.e = e; this.d = d; this.N = N; } public static void main (String[] args) throws IOException { RSA rsa = new RSA(); DataInputStream in=new DataInputStream(System.in); String teststring ; System.out.println("Enter the plain text:"); teststring=in.readLine(); System.out.println("Encrypting String: " + teststring); System.out.println("String in Bytes: " + bytesToString(teststring.getBytes())); // encrypt byte[] encrypted = rsa.encrypt(teststring.getBytes()); System.out.println("Encrypted String in Bytes: " + bytesToString(encrypted)); // decrypt byte[] decrypted = rsa.decrypt(encrypted); System.out.println("Decrypted String in Bytes: " + bytesToString(decrypted)); System.out.println("Decrypted String: " + new String(decrypted)); } private static String bytesToString(byte[] encrypted) { String test = ""; for (byte b : encrypted) { test += Byte.toString(b); } return test; } //Encrypt message public byte[] encrypt(byte[] message) { return (new BigInteger(message)).modPow(e, N).toByteArray(); } // Decrypt message public byte[] decrypt(byte[] message) { return (new BigInteger(message)).modPow(d, N).toByteArray(); } }Related Questions
Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.