問題:讀取私鑰時報錯:
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
解決辦法主要參考來源:文章來源:http://www.zghlxwxcb.cn/news/detail-405941.html
https://stackoverflow.com/questions/6559272/algid-parse-error-not-a-sequence/46988448
?文章來源地址http://www.zghlxwxcb.cn/news/detail-405941.html
到了這里,關于java.security.InvalidKeyException: IOException : algid parse error, not a sequence的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!