Java 字符串到公钥

Java 字符串到公钥,java,string,public-key,Java,String,Public Key,在那里。我正在java应用程序和php服务器之间实现Diffie-Hellman密钥交换协议。当我从php服务器获取密钥时,出现了一些问题,密钥是字符串格式,我想将其转换为公钥以执行协议。 代码是下一个: public static PublicKey getPublicKey(String publicKey) throws Exception { byte[] byteKey =publicKey.getBytes(); X509EncodedKeySpec x509KeyS

在那里。我正在java应用程序和php服务器之间实现Diffie-Hellman密钥交换协议。当我从php服务器获取密钥时,出现了一些问题,密钥是字符串格式,我想将其转换为公钥以执行协议。 代码是下一个:

public static PublicKey getPublicKey(String publicKey) throws Exception {
    byte[] byteKey =publicKey.getBytes();
    X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(byteKey);
    KeyFactory keyFact = KeyFactory.getInstance("DH");
    PublicKey pubKey = keyFact.generatePublic(x509KeySpec);
    DHPublicKey dhPublicKey;
    return pubKey;
}
运行此函数时,出现以下异常:

Exception in thread "main" java.security.spec.InvalidKeySpecException: Inappropriate key specification
at com.sun.crypto.provider.DHKeyFactory.engineGeneratePublic(DHKeyFactory.java:87)
at java.security.KeyFactory.generatePublic(Unknown Source)
at main2.getPublicKey(main2.java:47)
at main2.main(main2.java:108)
键是一个大整数类型,如:“27308339115172776610828293484095305159300344154987099616280024338836450624038361024199059825825751059231643059969145622906355021487887788144551871008554848191” 我怎样才能纠正这个问题?
感谢您抽出时间

我已经解决了问题,感谢用户3062946。代码如下:

public static PublicKey getPublicKey(BigInteger publicKey, BigInteger p, BigInteger g) throws Exception {
    DHPublicKeySpec dhspec=new DHPublicKeySpec(publicKey,p,g);
    KeyFactory keyFact = KeyFactory.getInstance("DH");
    PublicKey pubKey = keyFact.generatePublic(dhspec);

    return pubKey;
}

我没有直接的答案,但基本上以前也问过同样的问题,唯一的答案似乎暗示您的公钥字符串可能不是正确的ASN.1结构:非常感谢,我没有用搜索按钮找到它!我有生成器和素数,但问题仍然存在,我无法将它们转换为公钥。