gpt4 book ai didi

java - 如何将 PEM 公钥转换为 DER 公钥?

转载 作者:行者123 更新时间:2023-11-29 04:54:21 25 4
gpt4 key购买 nike

我从我的 REST API 收到一个公钥,该公钥用 PEM 编码。现在,我需要将编码更改为 DER,以便将其存储为 PublicKey 对象。但是,不幸的是,我收到以下错误:

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.");
}
}

最佳答案

Java 真的很想看到编码的 SubjectPublicKeyInfo对象,但您有一个更简单的 PKCS#1 RSAPublicKey对象。

据我所知,最简单的方法是使用 PEMParser来自 bouncycaSTLe PKIX 库的类——应该有一个来自 SpongycaSTLe 的等效库。使用此类代替您当前使用的 PemReader 类,如:

        PEMParser pemParser = new PEMParser(new StringReader(publicKey));
SubjectPublicKeyInfo spki = (SubjectPublicKeyInfo) pemParser.readObject();
pemParser.close();
byte [] spkiEncoded = spki.getEncoded();
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(spkiEncoded);

KeyFactory kf = KeyFactory.getInstance("RSA");
this.publicKey = kf.generatePublic(keySpec);

关于java - 如何将 PEM 公钥转换为 DER 公钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34314965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com