Я получаю открытый ключ от моего REST API, который закодирован в PEM. Теперь мне нужно изменить кодировку на DER, чтобы сохранить ее как объект PublicKey
. Однако, к сожалению, я получаю следующее сообщение об ошибке:Как преобразовать открытый ключ PEM в открытый ключ DER?
java.lang.IllegalArgumentException: unknown object in 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.");
}
}
где именно вы получаете NPE? в 'new PemReader (новый StringReader (publicKey));' statement? Можете ли вы предоставить образец открытого ключа, который вы пытаетесь преобразовать? – user1516873
Благодарим за помощь. Ну, я получил NPE, потому что я удалил '----- BEGIN RSA PUBLIC KEY -----' и '----- END RSA PUBLIC KEY -----' из ключа вручную на бэкэнд , Теперь я удалил операцию подстроки, и я получаю эту ошибку: 'java.lang.IllegalArgumentException: неизвестный объект в getInstance: org.spongycastle.asn1.ASN1Integer'. – user3475602