如何从PublicKey获取未编码的公共值字节

时间:2012-10-30 17:43:50

标签: java cryptography

我有一个小程序,首先交换会话密钥进行通信,并使用diffie-hellmann协议。 在java中,第一部分是这样完成的:

KeyPairGenerator keyPairGenerator1 = KeyPairGenerator.getInstance("DH");
keyPairGenerator1.initialize(Skip.sDHParameterSpec);
KeyPair keyPair1 = keyPairGenerator1.generateKeyPair();
byte[] localKey1 = keyPair1.getPublic().getEncoded();
KeyAgreement keyAgreement1 = KeyAgreement.getInstance("DH");
keyAgreement1.init(keyPair1.getPrivate());
// getting remote key 
keyAgreement1.doPhase(theirPublicKey2, true);
byte[] sharedKey1 = keyAgreement1.generateSecret();

然后将localKey发送到远程部分,后者将其部分数据发送回计算DH共享密钥。 问题,另一个程序期望获取行数据(大整数),并从java程序中发送X509编码。

那么如何从PublicKey获取BigInteger(DH协议的本地Y值)? 或者可能有另一种方法来生成必要的DH参数?

1 个答案:

答案 0 :(得分:1)

只需将密钥转换为更专业的类型......

DHPublicKey localKey = (DHPublicKey) keyPair1.getPublic();
BigInteger localY = localKey.getY();

当然,如果您尚未就预定义参数达成一致,您可能也希望从localKey检索参数。