0

我有一个小程序,它以交换会话密钥进行通信开始,为此它使用 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 参数?

4

1 回答 1

1

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

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

当然,如果您还没有就预定义的参数达成一致,您可能还想从中检索参数localKey

于 2012-10-30T20:50:25.840 回答