问题:读取私钥时报错:
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyPEM));
错误原因 :
私钥格式错误,错误的privateKey是通过openssl生成的私钥,默认pkcs1格式(将文件中去掉私钥头-----BEGIN RSA PRIVATE KEY-----和私钥尾-----END RSA PRIVATE KEY-----得到),代码中的是用的PKC8格式解析私钥。
注:
PKCS8私钥文件是以-----BEGIN PRIVATE KEY-----开头
PKCS1私钥文件是以-----BEGIN RSA PRIVATE KEY-----开头
解决办法 :
一、对原有私钥进行格式转换
例如使用如下openssl命令生成的私钥文件格式为pkcs1
openssl genrsa -out private.key 2048
可使用如下openssl命令,将 PKCS1 格式的 private.key 文件转为PKCS8格式的新私钥文件 pkcs8Private.key
openssl pkcs8 -topk8 -inform PEM -in private.key -outform pem -nocrypt -out pkcs8Private.key
pkcs8转成pkcs1命令:
openssl pkcs8 -in pkcs8.pem -nocrypt -out pri_key.pem
二、直接生成PKC8格式的私钥
私钥生成命令
openssl genrsa 2048 | openssl pkcs8 -topk8 -nocrypt -out client.key
三、java采用BouncyCastle库中的PEMReader读取PEM格式的私钥
reader = new PEMReader(new InputStreamReader(new ByteArrayInputStream(keyBytes)));
PrivateKey key = (PrivateKey)reader.readObject();
bouncycastle库链接 http://www.bouncycastle.org/documentation.html
参考链接:java使用pem格式SSL证书请求https
https://blog.csdn.net/tuanyuanmian/article/details/88607621
解决办法主要参考来源:文章来源:https://www.toymoban.com/news/detail-405941.html
https://stackoverflow.com/questions/6559272/algid-parse-error-not-a-sequence/46988448
文章来源地址https://www.toymoban.com/news/detail-405941.html
到了这里,关于java.security.InvalidKeyException: IOException : algid parse error, not a sequence的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!