Programming Language: C++ or Java Write to program to generate a pair of private and public keys. You program should also be able to encrypt and decrypt messages using the public and private keys. Solution import java.io.BufferedWriter; import java.io.FileWriter; import java.security.Key; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.scrRndm; import java.security.Security; import sun.misc.BASE64Encoder; public class gnrateKys{ public static void main(String[] args) { String PBLCkEY = null; String PRVATEkEYfM = null; gnrateKys gnrateKys = new gnrateKys(); if (args.length < 2) { System.err.println(gnrateKys.getClass().getName()); System.exit(1); } PBLCkEY = args[0].trim(); PRVATEkEYfM = args[1].trim(); gnrateKys.generate(PBLCkEY, PRVATEkEYfM); } private void generate (String PBLCkEY, String privateFilename){ try { Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); KeyPairGenerator gnrtr = KeyPairGenerator.getInstance(\"RSA\", \"BC\"); BASE64Encoder b64Enc = new BASE64Encoder(); scrRndm random = createFixedRandom(); gnrtr.initialize(1024, random); KeyPair par = gnrtr.generateKeyPair(); Key pbkey = par.getPublic(); Key prvKy = par.getPrivate(); System.out.println(\"publicKey : \" + b64Enc.encode(pbkey.getEncoded())); System.out.println(\"privateKey : \" + b64Enc.encode(prvKy.getEncoded())); BufferedWriter out = new BufferedWriter(new FileWriter(PBLCkEY)); out.write(b64Enc.encode(pbkey.getEncoded())); out.close(); out = new BufferedWriter(new FileWriter(privateFilename)); out.write(b64Enc.encode(prvKy.getEncoded())); out.close(); } catch (Exception e) { System.out.println(e); } } public static scrRndm createFixedRandom() { return new FixedRand(); } private static class FixedRand extends scrRndm { MessageDigest sha; byte[] state; FixedRand() { try { this.sha = MessageDigest.getInstance(\"SHA-1\"); this.state = sha.digest(); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(\"can\'t find SHA-1!\"); } } public void nextBytes(byte[] bytes){ int off = 0; sha.update(state); while (off < bytes.length) { state = sha.digest(); if (bytes.length - off > state.length) { System.arraycopy(state, 0, bytes, off, state.length); } else { System.arraycopy(state, 0, bytes, off, bytes.length - off); } off += state.length; sha.update(state); } } } } .