码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • OpenSSL生成PKCS#8私钥和公钥


    生成环境

    openssl version
    OpenSSL 1.1.1q 
    
    • 1
    • 2

    生成PKCS #1私钥

    openssl genrsa -out private#1.pem
    
    • 1

    默认生成的PKCS#1

    -----BEGIN RSA PRIVATE KEY-----
    密钥内容
    -----END RSA PRIVATE KEY-----
    
    • 1
    • 2
    • 3

    生成PKCS#8私钥

    openssl pkcs8 -topk8 -inform PEM -in private#1.pem -outform PEM -nocrypt -out private#8.pem
    
    • 1

    借助已生成的PKCS #1私钥通过命令生成PKCS #8私钥

    -----BEGIN PRIVATE KEY-----
    密钥内容
    -----END PRIVATE KEY-----
    
    • 1
    • 2
    • 3

    PKCS#8和PKCS#1的明显区别是BEGIN和END中的RSA标识去掉了,对比内容,也不太一样,想要看具体的结构区别,可以通过ASN1在线解析工具,把密钥粘贴进去,通过解码可以看出来两者结构有明显区别。

    生成PKCS#8公钥

    openssl  rsa -in private#1.pem -pubout -out public#8.pem
    
    • 1

    内容如下

    -----BEGIN PUBLIC KEY-----
    密钥内容
    -----END PUBLIC KEY-----
    
    • 1
    • 2
    • 3

    细心的朋友可能发现,生成公钥是通过PKCS #1私钥生成的,这样得到的结果会是PKCS#8公钥吗,通过生成的结果可以看到,得到的确实是是PKCS#8公钥(因为没有RSA标识)。但是和通过PKCS #8私钥生成的结果一致吗?结果是一致的,如果不相信,可以试试看。

    openssl  rsa -in private#8.pem -pubout -out public#8_2.pem
    
    • 1

    如果想要PKCS #1的公钥可以吗,当然可以

    通过PKCS#8公钥生成PKCS#1公钥

    openssl rsa -pubin -in public#8.pem -RSAPublicKey_out -out public#1.pem
    
    • 1

    如果生成的公钥默认是PKCS#1,可以生成PKCS#8的公钥吗,当然可以

    通过PKCS#1公钥生成PKCS#8公钥

    openssl rsa -in public#1.pem -pubout -RSAPublicKey_in -out public#8.pem
    
    • 1

    总结

    OpenSSL 1.1.1q (应该是1.1.x版本都是,但是未测试其他)默认生成的PKCS#1私钥,如果需要PKCS#8私钥需要转换,默认生成的是PKCS#8公钥,如果需要PKCS#1公钥,需要转换。

  • 相关阅读:
    深兰科技荣获2024年度金势奖“AI出海先锋品牌”金奖
    opencv滤波技术
    C. Link Cut Centroids(树的重心性质)
    实验室管理系统
    ES6 入门教程 24 Module 的语法 24.3 export 命令
    深度解析Socks5代理与IP代理的网络应用
    代码随想录算法训练营 单调栈part01
    智能空开让用电更安全、管理更智能——电脑APP远程控制开合闸
    【云原生 | Kubernetes 实战】06、Pod高级实战:基于污点、容忍度、亲和性的多种调度策略(下)
    linux内核调度
  • 原文地址:https://blog.csdn.net/a7442358/article/details/127888512
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号