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

最佳答案

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

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


当然,如果您尚未同意预定义的参数,则可能还希望从localKey检索参数。

关于java - 如何从PublicKey获取未编码的公共(public)值字节,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13144732/

10-12 02:20