提问者:小点点

使用弹跳城堡读取SSLeay格式私钥


尝试读取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格式键时,代码工作正常。


共1个答案

匿名用户

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=