RSA公私钥pkcs1与pkcs8格式的转换
RSA密钥对生成
生成RSA密钥对有两个工具:
- openssh的ssh-keygen
- openssl
#通过ssh-keygen生成的私钥是pkcs1格式,但公钥是ssh特有格式(不是pkcs8也不是pkcs1)
ssh-keygen -t rsa -b 1024
#通过openssl生成密钥对,默认私钥是pkcs1格式,不输出公钥(因为公钥可以通过私钥导出)
openssl genrsa -out rsa_private_key.pem 1024
openssl也可以在制作申请证书用的csr时生成私钥:
openssl req -x509 -days 365 -newkey rsa:2048 -keyout private.pem -out req_csr.pem -nodes
从RSA私钥中提取公钥
# 用ssh-keygen输出ssh格式的公钥,这个格式比较特殊,只适用于ssh的场景
ssh-keygen -y -f priKey.pem > sshPubkey.pub
# openssl默认输出的是pkcs8格式的公钥
openssl rsa -pubout -in rsa_key.private -out rsa_key.public
将OpenSSH格式公钥转换成OpenSSL的pkcs1格式公钥
ssh-keygen -e -m PEM -f ssh_PubKey.pub > ssl_PubKey.pem #-m支持 PEM,PKCS8,RFC4716
将OpenSSL的pkcs8格式公钥转换成OpenSSH的格式公钥
ssh-keygen -i -m PKCS8 -f rsa_public_key.pem > id_rsa.pub
关于RSA密钥的pkcs1与pkcs8格式互转
说区别,借一个网上看到的总结:
通俗点讲吧,PKCS1是标准RSA秘钥对标准规范,但是都是裸奔的;
PKCS8是对加密后的秘钥进行了描述,就是说P8格式的秘钥不是裸奔了
java中的加解密用的包,默认生成的是私钥pkcs1,公钥pkcs8
最早openssl生成的公钥私钥默认都是pkcs1格式的,但是在后来的版本中,公钥默认为了pkcs8格式(私钥还是pkcs1格式,或许是为了迎合java吧,个人猜测)
将pkcs1格式的私钥转为pkcs8格式
注:openssh和openssl的私钥都默认是pkcs1结构的pem格式
openssl pkcs8 -topk8 -inform PEM -in id_rsa_cert -outform PEM -nocrypt -out id_rsa_cert_pkcs8.pem
将PKCS8格式私钥再转换为PKCS1格式
openssl rsa -in pkcs8.pem -out pkcs1.pem
将pkcs8公钥转pkcs1公钥
openssl rsa -pubin -in rsa_pub_pkcs8.pem -RSAPublicKey_out -out rsa_pub_pkcs1.pem
将pkcs1公钥转换为pkcs8公钥
openssl rsa -RSAPublicKey_in -in pub_pkcs1.pem -pubout -out pub_pkcs8.pem
SM2密钥对生成
openssl 1.1.1+ 版本增加了对SM2 的支持,所以可以使用openssl来生成SM2密钥对
# 检查openssl版本是否支持sm2
openssl ecparam -list_curves | grep SM2
# 生成ec参数:ec参数其实包含了ec参数和私钥
openssl ecparam -out ec_param.pem -name SM2 -param_enc explicit -genkey
ec_param.pem内容如下:
-----BEGIN EC PARAMETERS-----MIHgAgEBMCwGByqGSM49AQECIQD+/wAAAAD//zBEBCD+/wAAAAD//AQgKOn6np2fXjRNWp5Lz2UJp/OXifUVq4+S3by9QU2UDpMEQQQyxK4sHxmBGV+ZBEZqOcmUj+MLv/JmC+FxWkWJM0x0x7w3NqL09necWb3O42tpIVPQqYd8xipHQALfMuUhOfCgAiEA/v///3ID32shxgUrU7v0CTnVQSMCAQE=-----END EC PARAMETERS----------BEGIN EC PRIVATE KEY-----MIIBUQIBAQQg2EJXgrXjC6iwwCCW5qbR9kwVcp6Gd164ElDPKyipiO2ggeMwgeACAQEwLAYHKoZIzj0BAQIhAP7/AAAAAP//MEQEIP7/AAAAAP/8BCAo6fqenZ9eNE1ankvPZQmn85eJ9RWrj5LdvL1BTZQOkwRBBDLEriwfGYEZX5kERmo5yZSP4wu/8mYL4XFaRYkzTHTHvDc2ovT2d5xZvc7ja2khU9Cph3zGKkdAAt8y5SE58KACIQD+cgPfayHGBStTu/QJOdVBIwIBAaFEA0IABOJVD/jik5D5XVCQ+2tX23HR74N4URgoRtSa9gx0/kV9rasQA7XrQQ9Y543MfFDdblvJRKqajnmpmgf+1smw60E=-----END EC PRIVATE KEY-----
# 查看和检查ec参数
openssl ecparam -in ec_param.pem -text
openssl ecparam -in ec_param.pem -check
# 导出私钥:pkcs8格式
openssl pkcs8 -topk8 -inform PEM -in ec_param.pem -outform pem -nocrypt -out pri_key_pkcs8.pem
# 导出公钥:pkcs8格式
openssl ec -in ec_param.pem -pubout -out pub_key.pem
RSA公私钥pkcs1与pkcs8格式的转换相关推荐
- java读取pem格式私钥_openssl生成RSA格式及pkcs1与pkcs8格式互相转换
openssl简介 OpenSSL 是一个开源项目,其组成主要包括以下三个组件: openssl:多用途的命令行工具 libcrypto:加密算法库 libssl:加密模块应用库,实现了ssl及tls ...
- openssl生成RSA格式及pkcs1与pkcs8格式互相转换
openssl简介 OpenSSL 是一个开源项目,其组成主要包括一下三个组件: openssl:多用途的命令行工具 libcrypto:加密算法库 libssl:加密模块应用库,实现了ssl及tls ...
- RSA公私钥格式分析及其在Java和Openssl之间的转换方法
文章目录 PKCS#1和PKCS#8 X.509公钥证书 ASN.1抽象语法标记 DER和PEM编码 OID对象标识符 用openssl命令生成PKCS1#格式的RSA密钥对 生成私钥 从私钥中导出公 ...
- java中使用openssl生成的rsa公私钥进行数据加解密_使用openssl生成RSA公钥和私钥对...
在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...
- Java(111):非对称加密RSA的使用(openssl生成RSA公私钥对)
Java(111):非对称加密RSA的使用(openssl生成RSA公私钥对) 1.openssl生成RSA公私钥对 [root@loaclhost ~]# openssl version OpenS ...
- 使用Java代码生成RSA公私钥的.pem文件
大家好,我是神韵,是一个技术&生活博主.出文章目的主要是两个,一是好记忆不如烂笔头,记录总结中提高自己.二是希望我的文章可以帮到大家.欢迎大家留言讨论,你们的行动将是我无限的动力. 本篇主题是 ...
- 妙借Git自带的OpenSSL生成RSA公私钥的.pem 文件
大家好,我是神韵,是一个技术&生活博主.出文章目的主要是两个,一是好记忆不如烂笔头,记录总结中提高自己.二是希望我的文章可以帮到大家.欢迎来点赞打卡,你们的行动将是我无限的动力. 本篇主题是: ...
- pkcs1转pkcs8 php,pkcs1与pkcs8格式RSA私钥互相转换
注:亲验可用 转载自:https://www.jianshu.com/p/08e41304edab 1.PKCS1私钥生成 openssl genrsa -out private.pem 1024 p ...
- (PKCS1) RSA 公私钥 pem 文件 提取 公私钥 e d 和 模数 n
参考链接:RSA公钥文件(PEM)解析 参考链接:OPENSSL中RSA私钥文件(PEM格式)解析[一] 参考:使用openssl命令剖析RSA私钥文件格式 RSA PKCS8 与 PKCS1 公私钥 ...
- java pkcs1转pkcs8_.NET Core RSA密钥的xml、pkcs1、pkcs8格式转换和JavaScript、Java等语言进行对接...
众所周知在.NET下的RSA类所生成的密钥为Xml格式,而其他语言比如java一般使用pkcs8格式的密钥,JavaScript一般使用pkcs1格式.我们在开发过程中很可能遇到需要与其他语言开发的a ...
最新文章
- Gson与FastJson比较
- C++ 栈和堆上建立对象的区别
- 计算机辅助审计的特点是,浅谈新环境下计算机辅助审计的特点和应用_1
- CIO大咖专访 | 从实战中提炼的企业数字化转型要点
- HTML5 API详解(6):getUserMedia实现拍照功能
- Celery增加Systemd配置
- 工信部:不得利用“携号转网”实施恶性竞争行为
- C语言 exit() _exit()
- Windows域控管理 常用操作 详细汇总
- 指针的高阶用法——指向指针的指针
- Linux 开源 ssh 工具,【原创开源】jssh linux scp ssh 免密登录工具
- Conditional GET Request(缓存协商)
- 计算机软件429修复工具,运行时错误 429,ActiveX部件不能创建对象的解决方法小结...
- 新冠疫情分析(疫情数据爬取+数据分析+网页排版展示)
- 真北敏捷会员0002陈旭:身心俱疲的暗黑Scrum
- 宁皓网 react native 视频教程 ECMAScript6
- Java表的设计合同_java毕业设计_springboot框架的基于合同管理系统
- 干货 | PCB设计中焊盘的种类和设计标准
- [总结]视音频编解码技术零基础学习方法
- Acwing2041. 干草堆
热门文章
- android系统电源管理驱动分析
- Javaweb(html+css+javascript)
- 已解决-Excel选择多个单元格,只有计数,没有合计和平均值
- SQL Server索引 - 聚集索引、非聚集索引、非聚集唯一索引 第八篇
- SQL查询条件传入参数为空查询全部数据,不为空指定查询,可选参数查询
- html对话框取消确定,alert 确定 取消
- POI填充Excel背景色
- ceph command returned non-zero exit status: 1
- 计算机顶级水平,2009年的顶级电脑配置, 相当于中国现在电脑的什么水平?
- 阿里ACP云计算认证快速通关分享