You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从字符串创建RSA公钥时抛出InvalidKeySpecException异常求助

解决InvalidKeySpecException:公钥与证书混淆问题

核心问题很明确:你代码里的AppKeyPub是X.509证书的Base64内容,不是openssl rsa -pubout生成的RSA公钥内容,这就是导致KeyFactory.generatePublic()抛出异常的原因。

怎么区分两者?

  • openssl rsa -pubout生成的public-key.pem开头是:-----BEGIN PUBLIC KEY-----
  • 而自签名证书cert.pem开头是:-----BEGIN CERTIFICATE-----
    你当前用的是证书的内容,不是公钥,自然无法用X509EncodedKeySpec解析成公钥。

两种解决办法

办法一:使用正确的RSA公钥内容

  1. 打开你生成的public-key.pem文件
  2. 去掉首尾的-----BEGIN PUBLIC KEY-----和-----END PUBLIC KEY-----标记行
  3. 将中间的Base64字符串拼接成一个连续的字符串,替换到Java代码的AppKeyPub中

修正后的代码示例:

private void prepKeys() {
    // 替换成public-key.pem里的Base64内容
    String AppKeyPub =
        "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
        + "...";

    try {
        KeyFactory kFactory = KeyFactory.getInstance("RSA");
        byte[] decoded = Base64.getDecoder().decode(AppKeyPub);
        X509EncodedKeySpec spec = new X509EncodedKeySpec(decoded);
        PublicKey publicKey = kFactory.generatePublic(spec);

        System.out.println("Public Key: " + publicKey);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

办法二:从证书中提取公钥(如果确实需要用证书内容)

如果你手里只有证书文件,不想重新取公钥,可以用Java的CertificateFactory解析证书,再提取公钥:

private void prepKeysFromCert() {
    String certBase64 =
        "MIIFKzCCA5OgAwIBAgIUGRbwEi8QEl2q+5h9wQ8P5guIMuEwDQYJKoZIhvcNAQEL"
        + "..."; // 你当前的AppKeyPub内容

    try {
        CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
        byte[] decodedCert = Base64.getDecoder().decode(certBase64);
        X509Certificate cert = (X509Certificate) certFactory.generateCertificate(new ByteArrayInputStream(decodedCert));
        PublicKey publicKey = cert.getPublicKey();

        System.out.println("Public Key from Cert: " + publicKey);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

额外检查项

  • 确保Base64字符串没有多余的换行、空格或特殊字符
  • 确认OpenSSL生成的公钥是RSA类型(你用的genrsa命令没问题,是RSA密钥)

内容的提问来源于stack exchange,提问作者Vara Lakshmi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 12:15:57