Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从公钥中获取未编码的公共值字节_Java_Cryptography - Fatal编程技术网

Java 如何从公钥中获取未编码的公共值字节

Java 如何从公钥中获取未编码的公共值字节,java,cryptography,Java,Cryptography,我有一个小程序,它以交换会话密钥开始通信,并为此使用diffie-hellmann协议。 在java中,第一部分是这样做的: KeyPairGenerator keyPairGenerator1 = KeyPairGenerator.getInstance("DH"); keyPairGenerator1.initialize(Skip.sDHParameterSpec); KeyPair keyPair1 = keyPairGenerator1.generateKeyPair(); byte[

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

那么,如何从公钥中获取biginger(DH协议的本地Y值)?
或者可能有其他方法来生成必要的DH参数?

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

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

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

哦,呃,不要忘记验证参数,不要忘记DH本身只帮助防止窃听……我以为我尝试了“keyPair.getPublic()instanceof DHPublicKey”,但显然没有(或检查其他内容)。谢谢您的回答。也许有帮助?