@Getter @Setter public class Person { private String name; private PublicKey publicKey; private PrivateKey privateKey; private byte[] secretKey;
public Person(String name) { this.name = name; try { KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH"); keyGen.initialize(512); KeyPair keyPair = keyGen.generateKeyPair(); this.setPrivateKey(keyPair.getPrivate()); this.setPublicKey(keyPair.getPublic()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } }
public void generateSecretKey(byte[] pubKeys) { X509EncodedKeySpec encodedKeySpec = new X509EncodedKeySpec(pubKeys); try { KeyFactory factory = KeyFactory.getInstance("DH"); PublicKey publicKey = factory.generatePublic(encodedKeySpec); KeyAgreement keyAgreement = KeyAgreement.getInstance("DH"); keyAgreement.init(this.privateKey); keyAgreement.doPhase(publicKey, true); this.secretKey = keyAgreement.generateSecret(); } catch (GeneralSecurityException e) { e.printStackTrace(); } }
@Override public String toString() { System.out.println(this.getName()); System.out.println("私钥:" + new BigInteger(1, this.getPrivateKey().getEncoded())); System.out.println("公钥:" + new BigInteger(1, this.getPublicKey().getEncoded())); System.out.println("密钥:" + new BigInteger(1, this.getSecretKey())); return ""; } public static void main(String[] args) { long start = System.currentTimeMillis(); Person xiaoming = new Person("小明"); Person xiaohong = new Person("小红"); xiaoming.generateSecretKey(xiaohong.getPublicKey().getEncoded()); xiaohong.generateSecretKey(xiaoming.getPublicKey().getEncoded()); xiaoming.toString(); xiaohong.toString(); long end = System.currentTimeMillis(); System.out.println("耗时:" + (end - start)); System.out.println(); } }
|