pkcs1转pkcs8 php,openssl RSA密钥格式PKCS1和PKCS8相互转换
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相互转换相关推荐
- java rsa 公钥格式_JAVA,NET RSA密钥格式转换
JAVA和NET RSA密钥格式相互转换(公钥,私钥) 做了一个小项目遇到java和.net非对称加密问题,java的公钥和私钥就直接是一个字符串的形式展示的,但是.net是以xml简单包裹形式展示的 ...
- java pkcs1转pkcs8_.NET Core RSA密钥的xml、pkcs1、pkcs8格式转换和JavaScript、Java等语言进行对接...
众所周知在.NET下的RSA类所生成的密钥为Xml格式,而其他语言比如java一般使用pkcs8格式的密钥,JavaScript一般使用pkcs1格式.我们在开发过程中很可能遇到需要与其他语言开发的a ...
- PHP rsa私钥pkcs8加密,Openssl rsa私钥的PKCS#1和PKCS#8格式以及加密和转化
这里主要介绍: 私钥的PKCS#1格式,及PKCS#8格式 格式PKCS#1和PKCS#8之间的互相转化 私钥的加密,解密 PKCS#1 -> PKCS#8 生成PKCS#1私钥 $ opens ...
- RSA密钥格式解析 DER-PEM 转换代码
环境: ubuntu20.4 内核 5.10.10 RSA是最常见的非对称加密算法,RSA的原理就不做介绍了,主要介绍一下密钥格式,linux 进行密钥转换编程. 要学习RSA编码,首先需要理解RSA ...
- openssl rsa密钥
#include <boost/asio/ssl.hpp> #include #if defined(WINDOWS) #if (OPENSSL_VERSION_NUMBER >= ...
- php pkcs 1格式的公钥,解说--2--微信支付RSA公钥PKCS1格式转化成PKCS8格式的公钥
最近在开发一个功能:微信自动转账给个人用户(个人微信零钱.银行卡) 今天只讲RSA公钥PKCS1格式转化成PKCS8格式的公钥 先说说解决过程(一路心酸,一万个······): 1.昨晚开始转格式,未 ...
- openssl和keytool生成rsa密钥及证书开发指南
目录 一 .什么是RSA 二.der编码与pem编码 三.openssl命令生成rsa密钥 四.RSA加密标准PKCS 五.密钥与证书 六.jks证书 一. 什么是RSA RSA是一种公钥密码算法,它 ...
- 记一次工作需求: RSA密钥之C#格式与Java格式转换
前言 最近由于项目需求,服务端由c#编写,客户端由java编写.通信数据使用RSA非对称加密.但是java和c#生成的密钥格式是不一样的,所以需要转换格式才可以正常使用.网上搜到使用java进行格式转 ...
- 使用OpenSSL加密,使用Java解密,使用OpenSSL RSA公钥
抽象 在2017年,我撰写了一个由三部分组成的系列文章,内容涉及选择最佳的哈希和加密算法. 在对该系列进行研究时,我学到了很多有关哈希和加密的知识. 我学到的最重要的事情是,尽管我必须对如何使用最安全 ...
最新文章
- 以太坊Sharding FAQ
- SAAS平台的基本元素
- linux查找有用日志常用技巧
- 安全维护上最不应该犯的十个基本错误
- 【Mysql】存储emoji表情报错(Incorrect string value: ‘\xF0\x9F\x98\x82\xF0\x9F...‘)的解决方案
- SQL那些事儿(十一)--ODBC,OLE-DB,ADO.NET区别
- 【转载】Java工程师路线图
- 以太坊系列之十四: solidity特殊函数
- python中url是什么意思_Python中url标签使用详解
- 微软小冰之父李迪创业,沈向洋任执行董事,「红棉小冰」单飞
- 这特么也太好看了----------博客园主题美化
- 【嵌入式】上学期末整理的一些知识点
- 无心剑汉英双语诗005.《抒怀》
- 和sar比起来,其他Linux命令都是猹
- MySQL数据打标_易打标(标签条码打印软件)
- 中国科学院大学计算机研究所推免,国科大“推免面试直通车”首入上海交大校园...
- 你的变量究竟存储在什么地方 全局内存
- 科比:向火箭脱帽致敬!
- iPhone锁屏密码怎么解除
- GORM 预加载和自引用
热门文章
- 制作 小 linux 教程,用BusyBox制作Linux最小系统
- Java通过反射访问成员变量
- python求最大值最小值_Python求可变参数的最大值最小值以及参数个数
- berkeley db java edition 源码,Berkeley DB Java Edition
- python记录日志_记录python日志
- mysql or走索引吗_加了索引,mysql查询就一定会用吗?
- c语言建立动态链表ppt,C语言链表讲解.ppt
- linux vmware硬盘,给vmware的Linux虚拟机增添硬盘
- sql语句 int(11)含义误区
- C++基础17-纯虚函数和抽象类