Java 如何从公钥中获取未编码的公共值字节
我有一个小程序,它以交换会话密钥开始通信,并为此使用diffie-hellmann协议。 在java中,第一部分是这样做的:Java 如何从公钥中获取未编码的公共值字节,java,cryptography,Java,Cryptography,我有一个小程序,它以交换会话密钥开始通信,并为此使用diffie-hellmann协议。 在java中,第一部分是这样做的: KeyPairGenerator keyPairGenerator1 = KeyPairGenerator.getInstance("DH"); keyPairGenerator1.initialize(Skip.sDHParameterSpec); KeyPair keyPair1 = keyPairGenerator1.generateKeyPair(); byte[
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”,但显然没有(或检查其他内容)。谢谢您的回答。也许有帮助?