2

PEM でエンコードされた REST API から公開鍵を受け取ります。ここで、オブジェクトとして保存するためにエンコーディングを DER に変更する必要がありPublicKeyます。ただし、残念ながら、次のエラーが表示されます。

java.lang.IllegalArgumentException: getInstance の不明なオブジェクト: org.spongycastle.asn1.ASN1Integer

エラーは次の行を指しています。

RSAKeyParameters rsa = (RSAKeyParameters) PublicKeyFactory.createKey(pemReader.readPemObject().getContent());

公開鍵は次のようになります。

-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA04XyJ5K4sQCtqapk98yEAR/ECaVC85JYPsqC09GiZboNdSSxQXj3
UNb53Po8iNX24T4elyjjzqQpVcyi+eaFp9Fggg2ZDyK9Re1wTucs0APDQdsGe1Q5
KImT/SBycI7v1RwSgjQ4I6npMg/0lZY8bnw4Q1AaTIII0KFBHmIYBD1oeCSdVPED
JWQWTSXtStQj83Vyj1uSLEEzXLpVYW4fq8e24tH2D/1j6eIBnBw6YpkWE6T9pZlE
wIs8YoeQWt5+lPWI28PST8VKqXsxH6JVzu5Mj6jLw8WTZxyKvNaGgO4B3J/ze/58
zW0LtlhsKMEq48QdLgPJZ+tfac2EhKANrQIDAQAB
-----END RSA PUBLIC KEY-----

これが私のコードです:

public void setPublicKey(String publicKey) {
    try {
        PemReader pemReader = new PemReader(new StringReader(publicKey));
        RSAKeyParameters rsa = (RSAKeyParameters) PublicKeyFactory.createKey(pemReader.readPemObject().getContent());
        pemReader.close();
        RSAPublicKeySpec rsaSpec = new RSAPublicKeySpec(rsa.getModulus(), rsa.getExponent());
        KeyFactory kf = KeyFactory.getInstance("RSA/ECB/PKCS1Padding");
        this.publicKey = kf.generatePublic(rsaSpec);
    } catch (IOException | NoSuchAlgorithmException | InvalidKeySpecException ex) {
        ex.printStackTrace();
        throw new IllegalStateException("Cannot set public key.");
    }
}
4

1 に答える 1