openssl 生成pkcs1格式的私钥,密钥长度2048位, (PKCS1)

openssl genrsa -out private.pkcs1.pem 2048

PKCS1私钥转换为PKCS8

openssl pkcs8 -topk8 -inform PEM -in private.pkcs1.pem -outform pem -nocrypt -out private.pkcs8.pem

逆过程:PKCS8格式私钥再转换为PKCS1格式

openssl rsa -in private.pkcs8.pem -out private.pkcs1.pem

从pkcs1私钥中生成pkcs8公钥

openssl rsa -in private.pkcs1.pem -pubout -out public.pkcs8.pem

从pkcs8私钥中生成pkcs8公钥

openssl rsa -in private.pkcs8.pem -pubout -out public.pkcs8.pem

pkcs8公钥转pkcs1公钥

openssl rsa -pubin -in public.pkcs8.pem -RSAPublicKey_out -out public.pkcs1.pem

pkcs1公钥转换为pkcs8公钥

openssl rsa -RSAPublicKey_in -in public.pkcs1.pem -pubout -out public.pkcs8.pem

openssl生成的RSA私钥, 与 ssh-keygen生成的私钥, 格式相同,但是公钥格式不相同

使用openssl genrsa工具产生公钥指数为3密钥对。

首先产生私钥,使用如下命令(因为默认的是2048位,因此这里没有传入key len):

openssl genrsa -out private.pkcs1.pem 2048

默认2048位, -3 表示公钥指数e=3的RSA2048密钥对,提高验证签名的效率

openssl genrsa -3 -out private.pkcs1.pem

从pkcs1私钥中生成pkcs8公钥

使用如下命令:openssl rsa -pubout -in private.pkcs1.pem -out public.pkcs8.pem

使用ssh-keygen将pkcs8公钥转换成ssh格式

ssh-keygen -i [-m key_format] [-f input_keyfile]

ssh-keygen -f public.pkcs8.pem -i -mPKCS8 > pub.pem

转换完成的 priv.pem 和 pub.pem 即为符合ssh-keygen格式的密钥对。

openssl rsa命令生成RSA Key时,有3种可选格式,分别为PEM,DER和NET, 通过-inform参数指定,默认为PEM。

DER: 原始的RSA Key按照ASN1 DER编码的方式存储

PEM: DER经过base64编码转换为PEM格式

NET: OpenSSL的帮助提示显示,NET是一个同老式的Netscape server和微软IIS .key文件兼容的格式

私钥:PEM –(convert)–> DER

openssl rsa -inform PEM -in Key0.pem -outform DER -out Key0.der

公钥:PEM –(convert)> DER

openssl rsa -inform PEM -in Key0_pub.pem -pubin -outform DER -out Key0_pub.der

注意: PEM是DER格式进行base64编码的格式,那PEM通过base64解码应为DER格式:

私钥:PEM –(base64 decode)–> DER

openssl base64 -d -in Key0.pem -out Key0.bin

公钥:PEM –(base64 decryption)–> DER

openssl base64 -d -in Key0_pub.pem -out Key0_pub.bin

DER转PEM格式

使用openssl rsa命令转换:

私钥:DER –(convert)–> PEM

openssl rsa -inform DER -in Key0.der -outform PEM -out Key0.PEM

公钥:DER –(convert)–> PEM

openssl rsa -inform DER -in Key0_pub.der -pubin -outform PEM -out Key0_pub.PEM

使用openssl base64命令转换:

私钥:DER –(encryption)–> PEM

openssl base64 -e -in Key0.der -out Key0.pem

公钥:DER –(encryption)–> PEM

openssl base64 -e -in Key0_pub.der -out Key0_pub.pem

openssl rsa命令 与 openssl base64命令,唯一不同:

后者Key0_pub.pem是通过openssl base64命令得到的文件,

丢失了”—–BEGIN PUBLIC KEY—–“和”—–END PUBLIC KEY—–“这两条注释信息

PEM转TXT格式

直接通过openssl rsa命令的-text参数输出可读的TXT格式:

私钥:PEM –> TXT

openssl rsa -inform PEM -in Key0.PEM -text -out Key0.txt

公钥:PEM –> TXT

openssl rsa -inform PEM -in Key0_pub.PEM -pubin -text -out Key0_pub.txt

注意: 转换为TXT的PEM文件需要包含”—–BEGIN PUBLIC KEY—–“和”—–END PUBLIC KEY—–“标记,没有这个标记转换会失败

TXT转PEM格式

openssl rsa -inform PEM -in Key1.txt -outform PEM -out Key1.pem

TXT文件最后的”—–BEGIN PUBLIC KEY—–“和”—–END PUBLIC KEY—–“部分就是PEM内容

注意: 输入格式和输出格式都需要指定为PEM格式。

为什么输入明明是txt文本,却需要指定为PEM格式呢?

打开Key1.txt文件看下文件格式,除了前面部分RSA Key的各种参数外,

在文件最后面还包含了一段由

“—–BEGIN RSA PRIVATE KEY—–“和”—–END RSA PRIVATE KEY—–“包含的部分。

因此工具在处理输入的TXT文件时,会识别并提取

“—–BEGIN RSA PRIVATE KEY—–“和”—–END RSA PRIVATE KEY—–“字符串中间的部分。

所以, 即使在TXT文件内输入其它的字符,openssl工具也可以正确提取,前提是”BEGIN”和”END”格式字符串内是一个完整的Key。

pkcs1转pkcs8 php,openssl RSA密钥格式PKCS1和PKCS8相互转换相关推荐

  1. java rsa 公钥格式_JAVA,NET RSA密钥格式转换

    JAVA和NET RSA密钥格式相互转换(公钥,私钥) 做了一个小项目遇到java和.net非对称加密问题,java的公钥和私钥就直接是一个字符串的形式展示的,但是.net是以xml简单包裹形式展示的 ...

  2. java pkcs1转pkcs8_.NET Core RSA密钥的xml、pkcs1、pkcs8格式转换和JavaScript、Java等语言进行对接...

    众所周知在.NET下的RSA类所生成的密钥为Xml格式,而其他语言比如java一般使用pkcs8格式的密钥,JavaScript一般使用pkcs1格式.我们在开发过程中很可能遇到需要与其他语言开发的a ...

  3. PHP rsa私钥pkcs8加密,Openssl rsa私钥的PKCS#1和PKCS#8格式以及加密和转化

    这里主要介绍: 私钥的PKCS#1格式,及PKCS#8格式 格式PKCS#1和PKCS#8之间的互相转化 私钥的加密,解密 PKCS#1 -> PKCS#8 生成PKCS#1私钥 $ opens ...

  4. RSA密钥格式解析 DER-PEM 转换代码

    环境: ubuntu20.4 内核 5.10.10 RSA是最常见的非对称加密算法,RSA的原理就不做介绍了,主要介绍一下密钥格式,linux 进行密钥转换编程. 要学习RSA编码,首先需要理解RSA ...

  5. openssl rsa密钥

    #include <boost/asio/ssl.hpp> #include #if defined(WINDOWS) #if (OPENSSL_VERSION_NUMBER >= ...

  6. php pkcs 1格式的公钥,解说--2--微信支付RSA公钥PKCS1格式转化成PKCS8格式的公钥

    最近在开发一个功能:微信自动转账给个人用户(个人微信零钱.银行卡) 今天只讲RSA公钥PKCS1格式转化成PKCS8格式的公钥 先说说解决过程(一路心酸,一万个······): 1.昨晚开始转格式,未 ...

  7. openssl和keytool生成rsa密钥及证书开发指南

    目录 一 .什么是RSA 二.der编码与pem编码 三.openssl命令生成rsa密钥 四.RSA加密标准PKCS 五.密钥与证书 六.jks证书 一. 什么是RSA RSA是一种公钥密码算法,它 ...

  8. 记一次工作需求: RSA密钥之C#格式与Java格式转换

    前言 最近由于项目需求,服务端由c#编写,客户端由java编写.通信数据使用RSA非对称加密.但是java和c#生成的密钥格式是不一样的,所以需要转换格式才可以正常使用.网上搜到使用java进行格式转 ...

  9. 使用OpenSSL加密,使用Java解密,使​​用OpenSSL RSA公钥

    抽象 在2017年,我撰写了一个由三部分组成的系列文章,内容涉及选择最佳的哈希和加密算法. 在对该系列进行研究时,我学到了很多有关哈希和加密的知识. 我学到的最重要的事情是,尽管我必须对如何使用最安全 ...

最新文章

  1. 以太坊Sharding FAQ
  2. SAAS平台的基本元素
  3. linux查找有用日志常用技巧
  4. 安全维护上最不应该犯的十个基本错误
  5. 【Mysql】存储emoji表情报错(Incorrect string value: ‘\xF0\x9F\x98\x82\xF0\x9F...‘)的解决方案
  6. SQL那些事儿(十一)--ODBC,OLE-DB,ADO.NET区别
  7. 【转载】Java工程师路线图
  8. 以太坊系列之十四: solidity特殊函数
  9. python中url是什么意思_Python中url标签使用详解
  10. 微软小冰之父李迪创业,沈向洋任执行董事,「红棉小冰」单飞
  11. 这特么也太好看了----------博客园主题美化
  12. 【嵌入式】上学期末整理的一些知识点
  13. 无心剑汉英双语诗005.《抒怀》
  14. 和sar比起来,其他Linux命令都是猹
  15. MySQL数据打标_易打标(标签条码打印软件)
  16. 中国科学院大学计算机研究所推免,国科大“推免面试直通车”首入上海交大校园...
  17. 你的变量究竟存储在什么地方 全局内存
  18. 科比:向火箭脱帽致敬!
  19. iPhone锁屏密码怎么解除
  20. GORM 预加载和自引用

热门文章

  1. 制作 小 linux 教程,用BusyBox制作Linux最小系统
  2. Java通过反射访问成员变量
  3. python求最大值最小值_Python求可变参数的最大值最小值以及参数个数
  4. berkeley db java edition 源码,Berkeley DB Java Edition
  5. python记录日志_记录python日志
  6. mysql or走索引吗_加了索引,mysql查询就一定会用吗?
  7. c语言建立动态链表ppt,C语言链表讲解.ppt
  8. linux vmware硬盘,给vmware的Linux虚拟机增添硬盘
  9. sql语句 int(11)含义误区
  10. C++基础17-纯虚函数和抽象类