尝试读取SSLeay格式私钥时抛出InvalidKeyException。
请在下面找到详细信息:-我有一个SSLeay Format私钥。pem格式以以下文件开头
开始RSA私钥
我正在编写代码以获取以字节格式保存的私钥并将其转换为Private ateKey。变量privacy ateKeyBytes包含字节格式的私钥/
String pkStrFormat = new String(privateKeyBytes, "UTF-8");
pkStrFormat = pkStrFormat.replaceAll("(-----BEGIN RSA PRIVATE KEY-----\\r?\\n|-----END RSA PRIVATE KEY-----+\\r?\\n?)","");
byte[] keyBytesOfPrivateKey = org.bouncycastle.util.encoders.Base64
.decode(pkStrFormat.getBytes());
KeyFactory ecKeyFac = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytesOfPrivateKey);
PrivateKey priKey = ecKeyFac.generatePrivate(keySpec);
我得到以下例外:-
Caused by: java.security.InvalidKeyException: IOException : version mismatch: (supported: 00, parsed: 01
at sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:350)
at sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:356)
使用PKCS8格式键时,代码工作正常。
以BEGINRSAPRIVATE KEY
开头的PEM文件是PKCS#1,而不是PKCS#8。PKCS#1本质上是PKCS#8,用于固定算法RSA因此删除了算法标识符。要么像https://superuser.com/questions/606215/openssl-pkcs8-default-format-gives-rsa-private-key一样转换您的密钥:
openssl pkcs8 -topk8 -inform pem -in file.key -outform pem -nocrypt -out file.pem
或使用类似于Bouncy Castle的PEMParser
:PEMReader=