gpt4 book ai didi

java - BouncycaSTLe 无法生成私钥 - 未知 KeySpec 类型 : java. security.spec.X509EncodedKeySpec

转载 作者:行者123 更新时间:2023-11-30 07:40:58 24 4
gpt4 key购买 nike

由于未知的 KeySpec 类型,我无法使用 bouncycaSTLe 生成私钥:java.security.spec.X509EncodedKeySpec。 (但是对公钥做同样的事情不会抛出异常并且有效 - 为什么?)

java.security.spec.InvalidKeySpecException: Unknown KeySpec type: java.security.spec.X509EncodedKeySpec at org.bouncycastle.jcajce.provider.asymmetric.rsa.KeyFactorySpi.engineGeneratePrivate(Unknown Source) at java.security.KeyFactory.generatePrivate(KeyFactory.java:366)

        PemReader pemReader = new PemReader(new InputStreamReader(new FileInputStream("private_unencrypted.pem")));
PemObject pemObject = pemReader.readPemObject();
pemReader.close();

KeyFactory keyFactory = KeyFactory.getInstance("RSA", "BC");
byte[] privateKeyBytes = pemObject.getContent();
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(privateKeyBytes);
PrivateKey privateKey = keyFactory.generatePrivate(x509KeySpec);

最佳答案

对于 RSA 私钥,您应该使用 PKCS8EncodedKeySpec如果您的 key 以 PKCS8 格式编码。 PKCS8 格式通常如下所示:

-----BEGIN PRIVATE KEY-----
base64 encoded der key
-----END PRIVATE KEY-----

如果您的 key 是 PKCS1 格式并且看起来像:

-----BEGIN RSA RIVATE KEY-----
base64 der encoded key
-----END RSA PRIVATE KEY-----

你应该先把它转换成PKCS8格式,然后再使用上面提到的类。

However doing same for public key doesn't throw exception and works - why?

因为通常作为证书一部分的公钥以 X509 格式编码,而私钥通常以 PKCS 格式编码。

关于java - BouncycaSTLe 无法生成私钥 - 未知 KeySpec 类型 : java. security.spec.X509EncodedKeySpec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56740715/

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