java.security.InvalidKeyException: IOException : algid parse error, not a sequence

这篇具有很好参考价值的文章主要介绍了java.security.InvalidKeyException: IOException : algid parse error, not a sequence。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题:读取私钥时报错:


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://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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【文件合并下载报错java.io.IOException: Error: Header doesn‘t contain versioninfo】

    在开发完一个需求进行自测的时候,发现点下载按钮会报 的错误,看字面意思不清楚具体的问题,所以查资料后发现是文件的类型不一致导致了代码报错,当时写需求的时候没有考虑到PDF和DOC,pdfbox的MemoryUsageSetting.setupMainMemoryOnly方法会区分不同的文件类型,所以用结尾来区分

    2024年01月16日
    浏览(41)
  • java.io.IOException: Cannot run program “python“: CreateProcess error=2, 系统找不到指定的文件。

    java.io.IOException: Cannot run program “python”: CreateProcess error=2, 系统找不到指定的文件。 原因: python 这个命令 用java运行没有找到 解决:直接改用python.exe这个文件的绝对路径 错误源代码 修改后源代码

    2024年02月13日
    浏览(40)
  • java线上运行异常:Error parsing HTTP request header

    1.部署异常如下: 2.出现原因 这个问题的原因是高版本的tomcat中的新特性:就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ =

    2024年02月05日
    浏览(56)
  • Error parsing HTTP request header java.io.EOFException: null

    问题: 我用postman请求就是正常的,但是用java的程序去请求就会报错这个: 2024-01-17 16:38:52.077 DEBUG [http-nio-8885-exec-1][org.apache.coyote.http11.Http11Processor]182 Error parsing HTTP request header java.io.EOFException: null at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1259) at o

    2024年01月21日
    浏览(46)
  • JSON parse error: Cannot deserialize value of type `java.util.Date`

    不能解析我传递的日期数据:”2022-06-08“,它默认是要这样的\\\"yyyy-MM-dd HH:mm:ss\\\"。 直接在数据库对应的接受类对象和实体类对象上加日期转化的注解。 可能由于种种环境原因,不知道哪个一定正确,下面三个注解任选其一。 我发现我公司是用的DateUtil。

    2024年02月17日
    浏览(59)
  • JSON parse error: Cannot deserialize value of type `java.util.ArrayList<java.lang.String>`

    在前后端传递参数时,如果为JSON,后端使用@RequestBody对象类型接受数据,会出现 500/400错误。 也就是说,在前后端发送数据时,出现JSON格式转换错误,从而访问不到后台接口。 不添加 @RequestBody 虽然可以成功访问,但是无法获取到对象数据 警告内容: 不要使用对象类型接受

    2024年02月11日
    浏览(56)
  • HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.util.List

     今天与到一个报错,分享一下这个报错的解决方案,都是自己学的太浅的原因导致卡了半个小时 如图: 在Post请求的过程中,前端是一个JSON对象以请求体的形式传到了后端,而后端是以一个列表接收,这样导致的问题就是接收的不是一个对象 在Post请求想要接收请求体的数

    2024年01月16日
    浏览(58)
  • JSON parse error: Cannot deserialize value of type `java.util.ArrayList<java.lang.Long>` from Object

    JSON parse error: Cannot deserialize value of type `java.util.ArrayListjava.lang.Long` from Object value (token `JsonToken.START_OBJECT`); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.util.ArrayListjava.lang.Long` from Object value (token `JsonToken.START_O

    2024年02月09日
    浏览(76)
  • 已解决JSON parse error: Cannot deserialize value of type `java.time.LocalDateTime` from String

    已解决JSON parse error: Cannot deserialize value of type java.time.LocalDateTime from String 下滑查看解决方法 JSON parse error: Cannot deserialize value of type java.time.LocalDateTime from String 这个问题通常出现在将一个字符串转换为LocalDateTime对象时。 下滑查看解决方法 解决这个问题的方法取决于你使用的

    2024年02月08日
    浏览(62)
  • JSON parse error: Cannot deserialize value of type `java.util.ArrayList<XXX>……的解决方案

    “JSON parse error: Cannot deserialize value of type java.util.ArrayListXXX from String value (token JsonToken.VALUE_STRING ); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type java.util.ArrayListcom.ruoyi.sc.domain.ScHdImg from String value (token JsonToken.VALUE_STRING )n at [Source: (org.sp

    2024年02月11日
    浏览(88)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包