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);
}
}
}
}
.