RSA密钥对生成

生成RSA密钥对有两个工具:

  1. openssh的ssh-keygen
  2. 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密钥的pkcs1pkcs8格式互转

说区别,借一个网上看到的总结:

通俗点讲吧,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格式的转换相关推荐

  1. java读取pem格式私钥_openssl生成RSA格式及pkcs1与pkcs8格式互相转换

    openssl简介 OpenSSL 是一个开源项目,其组成主要包括以下三个组件: openssl:多用途的命令行工具 libcrypto:加密算法库 libssl:加密模块应用库,实现了ssl及tls ...

  2. openssl生成RSA格式及pkcs1与pkcs8格式互相转换

    openssl简介 OpenSSL 是一个开源项目,其组成主要包括一下三个组件: openssl:多用途的命令行工具 libcrypto:加密算法库 libssl:加密模块应用库,实现了ssl及tls ...

  3. RSA公私钥格式分析及其在Java和Openssl之间的转换方法

    文章目录 PKCS#1和PKCS#8 X.509公钥证书 ASN.1抽象语法标记 DER和PEM编码 OID对象标识符 用openssl命令生成PKCS1#格式的RSA密钥对 生成私钥 从私钥中导出公 ...

  4. java中使用openssl生成的rsa公私钥进行数据加解密_使用openssl生成RSA公钥和私钥对...

    在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...

  5. Java(111):非对称加密RSA的使用(openssl生成RSA公私钥对)

    Java(111):非对称加密RSA的使用(openssl生成RSA公私钥对) 1.openssl生成RSA公私钥对 [root@loaclhost ~]# openssl version OpenS ...

  6. 使用Java代码生成RSA公私钥的.pem文件

    大家好,我是神韵,是一个技术&生活博主.出文章目的主要是两个,一是好记忆不如烂笔头,记录总结中提高自己.二是希望我的文章可以帮到大家.欢迎大家留言讨论,你们的行动将是我无限的动力. 本篇主题是 ...

  7. 妙借Git自带的OpenSSL生成RSA公私钥的.pem 文件

    大家好,我是神韵,是一个技术&生活博主.出文章目的主要是两个,一是好记忆不如烂笔头,记录总结中提高自己.二是希望我的文章可以帮到大家.欢迎来点赞打卡,你们的行动将是我无限的动力. 本篇主题是: ...

  8. pkcs1转pkcs8 php,pkcs1与pkcs8格式RSA私钥互相转换

    注:亲验可用 转载自:https://www.jianshu.com/p/08e41304edab 1.PKCS1私钥生成 openssl genrsa -out private.pem 1024 p ...

  9. (PKCS1) RSA 公私钥 pem 文件 提取 公私钥 e d 和 模数 n

    参考链接:RSA公钥文件(PEM)解析 参考链接:OPENSSL中RSA私钥文件(PEM格式)解析[一] 参考:使用openssl命令剖析RSA私钥文件格式 RSA PKCS8 与 PKCS1 公私钥 ...

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

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

最新文章

  1. Gson与FastJson比较
  2. C++ 栈和堆上建立对象的区别
  3. 计算机辅助审计的特点是,浅谈新环境下计算机辅助审计的特点和应用_1
  4. CIO大咖专访 | 从实战中提炼的企业数字化转型要点
  5. HTML5 API详解(6):getUserMedia实现拍照功能
  6. Celery增加Systemd配置
  7. 工信部:不得利用“携号转网”实施恶性竞争行为
  8. C语言 exit() _exit()
  9. Windows域控管理 常用操作 详细汇总
  10. 指针的高阶用法——指向指针的指针
  11. Linux 开源 ssh 工具,【原创开源】jssh linux scp ssh 免密登录工具
  12. Conditional GET Request(缓存协商)
  13. 计算机软件429修复工具,运行时错误 429,ActiveX部件不能创建对象的解决方法小结...
  14. 新冠疫情分析(疫情数据爬取+数据分析+网页排版展示)
  15. 真北敏捷会员0002陈旭:身心俱疲的暗黑Scrum
  16. 宁皓网 react native 视频教程 ECMAScript6
  17. Java表的设计合同_java毕业设计_springboot框架的基于合同管理系统
  18. 干货 | PCB设计中焊盘的种类和设计标准
  19. [总结]视音频编解码技术零基础学习方法
  20. Acwing2041. 干草堆

热门文章

  1. android系统电源管理驱动分析
  2. Javaweb(html+css+javascript)
  3. 已解决-Excel选择多个单元格,只有计数,没有合计和平均值
  4. SQL Server索引 - 聚集索引、非聚集索引、非聚集唯一索引 第八篇
  5. SQL查询条件传入参数为空查询全部数据,不为空指定查询,可选参数查询
  6. html对话框取消确定,alert 确定 取消
  7. POI填充Excel背景色
  8. ceph command returned non-zero exit status: 1
  9. 计算机顶级水平,2009年的顶级电脑配置, 相当于中国现在电脑的什么水平?
  10. 阿里ACP云计算认证快速通关分享