OPENSSL生成非对称加密公私钥

前言

基本说明

  • 本文会尽量说明的更详细一些,避免误导一些对加密领域不太熟悉的同学,对于忽略掉未说明的且需要提前了解的内容也会尽量提示出来
  • 本文内生成的文件均为密钥,不涉及证书的内容,密钥与证书的关系,以及各位客官所需要的究竟是密钥还是证书请自行查阅
  • 不同格式的密钥,使用时也会有所不同,因此需要明确自己要用的是什么编码和格式的密钥

生成RSA公私钥

生成步骤

  1. 生成RSA私钥,以X509编码,指定生成的密钥的位数为2048位,该步生成的私钥是PKCS1格式,第二步将私钥转为PKCS#8编码。

    openssl genrsa -out rsa_private_key_2048.pem 2048

  2. 将上一步生成的RSA私钥转换成PKCS#8编码,作为最终使用的私钥。

    openssl pkcs8 -topk8 -in rsa_private_key_2048.pem -out pkcs8_rsa_private_key_2048.pem -nocrypt

  3. 导出RSA公钥,以X509编码,作为最终交换的公钥。

    openssl rsa -in rsa_private_key_2048.pem -out rsa_public_key_2048.pem -pubout

额外说明

  1. 公私钥一般有2种格式,pem和der格式,上面生成的是pem格式

    • der格式为二进制格式,通常不能直接查看,pem是将二进制转为base64格式,并添加头尾

    PKCS#8编码私钥头尾

    复制代码
       -----BEGIN PRIVATE KEY-----

    PKCS#1编码私钥头尾

    复制代码
       -----BEGIN RSA PRIVATE KEY-----

    PKCS#8编码公钥头尾

    复制代码
       -----BEGIN PUBLIC KEY-----
    • 私钥pem格式转der格式(公钥的话需要再增加-pubin选项)

      复制代码
      openssl pkey -inform PEM -outform DER -in rsa_private_key_2048.pem -out rsa_private_key_2048.der
    • 私钥der格式转pem格式(公钥的话需要再增加-pubin选项)

      复制代码
      openssl pkey -inform DER -outform PEM -in rsa_private_key_2048.der -out rsa_private_key_2048.pem
  2. RSA的密钥一般有2种编码方式,即PKCS#1和PKCS#8

    • 适用范围:
      • PKCS #1 仅适用于 RSA 密钥。
      • PKCS #8 是通用的,可以用于多种密钥类型。
    • 格式头:
      • PKCS #1 PEM 格式头为"-----BEGIN RSA PRIVATE KEY-----"。
      • PKCS #8 未加密的 PEM 格式头为"-----BEGIN PRIVATE KEY-----",加密的为"-----BEGIN ENCRYPTED PRIVATE KEY-----"。
    • 结构:
      • PKCS #1 直接包含 RSA 私钥参数。
      • PKCS #8 包含一个通用的密钥格式,能够封装不同类型的私钥信息和算法标识符。

生成ED25519公私钥

生成步骤

  1. 生成ed25519私钥

    openssl genpkey -algorithm ed25519 -out private.pem

  2. 从私钥中生成公钥

    openssl pkey -in private.pem -pubout -out public.pem

额外说明

1.低版本的openssl不支持ed25519算法

2.上面生成的密钥格式也是pem格式,pem格式与der格式的转换参考上面rsa的方式

3.ed25519算法原始的密钥长度是32字节的,但是openssl生成的私钥长度是48位,公钥长度是44位的。原因是openssl在私钥前添加了16位的前缀,公钥添加了12位的前缀,因此如果想要获取原始的32位密钥可以使用如下命令:

复制代码
cat private_key.der | tail -c 32 | xxd -p
  • 这里使用的是二进制的der格式密钥,最终拿到的是16进制的原始私钥

    如果仍然有疑问,欢迎留言!

相关推荐
Wx-bishekaifayuan17 分钟前
springboot房屋租赁系统11574-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·sql·spring·课程设计
三84433 分钟前
Fastjson 漏洞学习笔记 · 03 · 经典利用链:TemplatesImpl 与 JdbcRowSetImpl
java·web安全·fastjson
蜗牛互联网1 小时前
GPT-6.1 Sol迁移指南:从token单价转向每任务成本门禁
java·人工智能·后端·gpt
蜗牛互联网1 小时前
HSTU在Dynamo-Triton中的AOTI与KV缓存验收方法
java·人工智能·后端·缓存
Sirens.1 小时前
Java多线程实例:单例模式、阻塞队列、线程池与定时器
java·开发语言·单例模式
青山木1 小时前
秒杀系统设计(一):需求拆解与流量治理
java·数据库·redis·后端·架构
卓怡学长1 小时前
w195基于ssm“Fitfrend”个性化健身
java·intellij-idea
驭渊的小故事2 小时前
算法实战:滑动窗口、素数枚举与字符串模拟(三道经典题解)
java·算法
雪落漂泊2 小时前
Linux基本指令(下)
java·linux·服务器
Eloudy2 小时前
全文 - version.A - AMBA CHI Chip-to-Chip(C2C)
java·开发语言·数据库·gpu·chiplet