title: Diffie-Hellman key exchange in Java
body: <p>I am working on a personal project in Java which involves sending sensitive data over an insecure channel. I need to know how to implement Diffie Hellman Key Exchange (DHKE) in java using its libraries. I know all the cryptographic theory about it so no need to go into details, I just need a very basic implementation so I cand have 2 programs share a secret key. I got the example from java2s.com, but it is not complete:</p>
  
  <pre><code>import java.math.BigInteger;
  import java.security.KeyFactory;
  import java.security.KeyPair;
  import java.security.KeyPairGenerator;
  import java.security.SecureRandom;
  
  import javax.crypto.spec.DHParameterSpec;
  import javax.crypto.spec.DHPublicKeySpec;
  
  public class Main {
    public final static int pValue = 47;
  
    public final static int gValue = 71;
  
    public final static int XaValue = 9;
  
    public final static int XbValue = 14;
  
    public static void main(String[] args) throws Exception {
      BigInteger p = new BigInteger(Integer.toString(pValue));
      BigInteger g = new BigInteger(Integer.toString(gValue));
      BigInteger Xa = new BigInteger(Integer.toString(XaValue));
      BigInteger Xb = new BigInteger(Integer.toString(XbValue));
  
      int bitLength = 512; // 512 bits
      SecureRandom rnd = new SecureRandom();
      p = BigInteger.probablePrime(bitLength, rnd);
      g = BigInteger.probablePrime(bitLength, rnd);
  
      createSpecificKey(p, g);
    }
  
    public static void createSpecificKey(BigInteger p, BigInteger g) throws Exception {
      KeyPairGenerator kpg = KeyPairGenerator.getInstance("DiffieHellman");
  
      DHParameterSpec param = new DHParameterSpec(p, g);
      kpg.initialize(param);
      KeyPair kp = kpg.generateKeyPair();
  
      KeyFactory kfactory = KeyFactory.getInstance("DiffieHellman");
  
      DHPublicKeySpec kspec = (DHPublicKeySpec) kfactory.getKeySpec(kp.getPublic(),
          DHPublicKeySpec.class);
    }
  }
  </code></pre>
  
  <p>How do I go on from this? Could anyone help me complete the remaining code?</p>