【问题标题】:X509 certificate get PublicKeyX509 证书获取 PublicKey
【发布时间】:2018-11-24 23:22:35
【问题描述】:

我有一个以 Base64 编码的 X509 证书 (RSA) 字符串值(以 MII...开头)。

我使用 Base64 对其进行解码并创建 X509 证书。

  public X509Certificate getCertificateX509(CertificateFactory factory, InputStream input) throws XX {
    try {
      return (X509Certificate) factory.generateCertificate(input);
    } catch (CertificateException e) {
      throw new XX("");
    }
  }

  public CertificateFactory getCertificateFactoryX509() throws XX {
    try {
      return CertificateFactory.getInstance("X.509");
    } catch (CertificateException e) {
      throw new XX("");
    }
  }

我不明白的是,当我执行x509.getPublicKey().getEncoded() 时,我得到一个字节数组。

编码为 Base64 我得到一个以 MII 开头的新字符串(与第一个不同),我认为不是 PublicKey 吗?只有证书以 MII 开头不是吗?

谢谢

【问题讨论】:

  • 你可以为你得到的两个输出添加代码部分吗?

标签: java security base64 certificate


【解决方案1】:

我得到的证书是: MIIDKTCCAhGgAwIBAgIDC5hFMA0GCSqGSIb3DQEBCwUAMEkxCzAJBgNVBAYTAkZSMQ4wDAYDVQQKEwVFQklDUzESMBAGA1UECxMJVFJBTlNQT1JUMRYwFAYDVQQDEw1LaXRVdGlsaXRhaXJlMB4XDTE2MTEwODA5MTcyNFoXDTIxMTEwNzA5MTcyNFowSTELMAkGA1UEBhMCRlIxDjAMBgNVBAoTBUVCSUNTMRIwEAYDVQQLEwlUUkFOU1BPUlQxFjAUBgNVBAMTDUtpdFV0aWxpdGFpcmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBPcI+m6bb1lGrI+rZGmXj8alF8T2eM3WSN7qI5QQi/GhZDmoH8fxUUWSmHtT2Zv9Ar7tG3/1390JN2u7YF8w+yRtdgamF61ANjd7wMRAKhFc2djLZ3OSSPW4la4sUTBnAQftkekQ/0edZagQES7SvqMIkGeIlGvNTxQcpnlLl+Qb8E5y8Akh0LJLUd4Ks5pDjs86LGLtt3Q/T6x9ciNKVjp5/xbwLeRHej6ZUxmjOQLw8CmhDNsJYywWnVAaUu5KR4/4Vc25EebWvo1fVRUOxLv5L7Hx1dzjxWpXHBMbkYCXBKFDr2lMGpGxjQQ815Vhyal1nT93i2593nIiJVG+xAgMBAAGjGjAYMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgZAMA0GCSqGSIb3DQEBCwUAA4IBAQCmv2wm1Nb0IXD6iMnVvFAM2ymSp/5xPBkZEFRPVmIxg+fPtX8xcDYzHX3msAcLIUry5bh6FqT2Mdd11RHdjAMucFO2CB9kjxzxdTcN8MJIkrpCybnh5Ei+O61eqanBNsg45mHxIbiEf2F3QBmZQXKEhK9Ept7lByeFhPzmhY1sD1YRu6mr5iN/J3OdIgLfPPJ6wnrOY8vZ/+qQualM2po7yBzSgzFb4vXW7CRtiIxmHvKOC1nGkI8UPW0kUfY2xjL3gwlQ0EXoCMD4/6E7RDIW9jP5l94eiJTmtBHMP/DMLsYAkEFRYjN2hGUQN4p4vQJ3P1f7hXAIf2QhULffT+J+

以及 Base64 中的 x509.PublicKey.getEncoded() : MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwT3CPpum29ZRqyPq2Rpl4/GpRfE9njN1kje6iOUEIvxoWQ5qB/H8VFFkph7U9mb/QK+7Rt/9d/dCTdru2BfMPskbXYGphetQDY3e8DEQCoRXNnYy2dzkkj1uJWuLFEwZwEH7ZHpEP9HnWWoEBEu0r6jCJBniJRrzU8UHKZ5S5fkG/BOcvAJIdCyS1HeCrOaQ47POixi7bd0P0+sfXIjSlY6ef8W8C3kR3o+mVMZozkC8PApoQzbCWMsFp1QGlLuSkeP+FXNuRHm1r6NX1UVDsS7+S+x8dXc48VqVxwTG5GAlwShQ69pTBqRsY0EPNeVYcmpdZ0/d4tufd5yIiVRvsQIDAQAB

【讨论】:

    【解决方案2】:

    没错。

    String"MII" 是 base64 字符串格式的开头。

    如果你需要字节的公钥只使用这个代码:

    byte[] public = x509.getPublicKey();
    

    并获取公钥字符串:

    byte[] public = x509.getPublicKeyString();
    

    这个函数将公钥作为字节返回给你。

    但使用 .getEncoded() 函数返回 base64 字节的公钥。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多