我需要从pkcs12格式的privateKeyContent创建PrivateKey。下面的代码不适用。
KeyFactory kf = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec keySpecPKCS8 = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKeyContent));
PrivateKey privateRsaKey = kf.generatePrivate(keySpecPKCS8);
它给了我这个错误。
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : version mismatch: (supported: 00, parsed: 03
at java.base/sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:251)
at java.base/java.security.KeyFactory.generatePrivate(KeyFactory.java:390)
如何在java中正确地做到这一点?
2条答案
按热度按时间rfbsl7qr1#
PKCS12格式是一个可能具有多个密钥和证书的容器。PKCS8文件始终具有一个密钥。在代码示例中,您将PKCS8
EncodedKeySpec
应用于PKCS12输入,因此这显然不起作用。您需要从密钥级别API切换到密钥库API。您可以像这样读取PKCS12容器:
并从加载的存储器中提取特定密钥:
下面是从this specific demo .p12 file读取密钥的方法:
toe950272#
您的密钥似乎不是RSA密钥。
在使用密钥之前,您可能需要先转换密钥。例如:
有关详细信息,请参阅JAVA 11 - elliptic curve private key - Caused by: java.security.InvalidKeyException: IOException : version mismatch: (supported: 00, parsed: 01