Skip to content

Commit

Permalink
Update RSA密匙对生成.md
Browse files Browse the repository at this point in the history
  • Loading branch information
magicianlib authored Apr 18, 2024
1 parent 5348bdb commit d4d9727
Showing 1 changed file with 12 additions and 12 deletions.
24 changes: 12 additions & 12 deletions 加密算法/RSA非对称加密算法/RSA密匙对生成.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
# 前言

生成 rsa 密匙对有许多中方式,而在系统中使用最多的就是 `openssl`。如果你的操作系统还没有 openssl,就需要手动安装
生成 rsa 密匙对有许多中方式,而在系统中使用最多的就是 `openssl`。如果你的操作系统还没有 openssl,就需要手动安装

Windows 用户需要到官网 [https://www.openssl.org](https://www.openssl.org) 进行下载安装。

Unix-Like 玩家可以直接使用默认的包管理工具进行安装。具体可以参考:[https://command-not-found.com/openssl](https://command-not-found.com/openssl),这里提供了各种发行版对应的安装命令。
Windows 用户需要到官网 [https://www.openssl.org](https://www.openssl.org) 进行下载安装。Unix 用户可以直接使用默认的包管理工具进行安装。具体可以参考:[https://command-not-found.com/openssl](https://command-not-found.com/openssl),这里提供了各种发行版对应的安装命令。

# OpenSSL 生成 RSA 密钥对

Expand All @@ -14,11 +12,12 @@ Unix-Like 玩家可以直接使用默认的包管理工具进行安装。具体
$ openssl genrsa -out private_key.pem length
```

`private_key.pem` 是要输出的私钥文件名,而 `length` 则用于指定私钥长度(如 1024、2048),越长表示加密性越强。
- `private_key.pem`:输出的私钥文件名
- `length`:指定私钥长度(如 1024、2048),越长表示加密性越强。

PEM (Privacy-Enhanced Mail) 是一种常见的密钥和证书格式,它使用 Base64 编码的 ASCII 文本表示密钥和证书,并且通常以 .pem 作为文件扩展名。
`openssl genrsa` 命令默认生成的是 PEM 格式私钥文件,PEM (Privacy-Enhanced Mail) 是一种常见的密钥和证书格式,它使用 Base64 编码的 ASCII 文本表示密钥和证书,并且通常以 .pem 作为文件扩展名。

需要特别说明说明的一点是,openssl 在 3.0 之前 `openssl genrsa` 命令默认生成的私钥文件是 PKCS#1 标准格式。但是从 3.0 开始,默认生成的是 PKCS#8 标准格式
需要特别说明说明的一点是,openssl 在 3.0 之前 `openssl genrsa` 命令生成的私钥文件默认使用的是 PKCS#1 标准。但是从 3.0 开始,默认为 PKCS#8 标准

如何区分生成的私钥是 PKCS#1 标准还是 PKCS#8 标准呢?只需要打开生成的私钥文件,看开头和结尾内容标识即可:

Expand Down Expand Up @@ -81,10 +80,11 @@ PKCS#8 格式是一种更通用的私钥格式标准(如果你使用的是 Jav
命令如下:

```bash
$ openssl pkcs8 -topk8 -inform PEM -in private_key.pem -outform PEM -nocrypt -out private_key_pkcs8.pem
$ openssl pkcs8 -topk8 -inform PEM -in private_key.pem -outform PEM -out private_key_pkcs8.pem [-nocrypt]
```

其中 `private_key_pkcs8.pem` 就是要输出的 PSCK#8 格式文件。至于 `-nocrypt` 则是用于指定不使用密码加密 PKCS#8 文件内容。如果在 `openssl pkcs8` 命令中不指定 `-nocrypt` 参数,但也没有指定密码,那么 OpenSSL 会提示你输入一个密码来加密私钥。通常提示信息如下:
- `private_key_pkcs8.pem`:要输出的 PSCK#8 格式文件
- `-nocrypt`:用于指定不对 PKCS#8 文件内容加密(根据实际需要使用,不过通常都会加上该参数)。如果不指定该参数,那么 OpenSSL 会提示你输入一个密码来加密私钥。通常提示信息如下:

```bash
Enter Encryption Password:
Expand All @@ -97,7 +97,7 @@ $ ls
private_key.pem public_key.pem private_key_pkcs8.pem
```

因为 PEM 格式内容本身就是 Base64 编码的 ASCII 文本。如果程序不想以文件的形式读取 private_key_pkcs8.pem 文件,想直接通过字符串的形式使用,只需要删除文件首尾两行并去除换行即可。
因为 PEM 格式内容本身就是 Base64 编码的 ASCII 文本。如果程序不想以文件的形式读取 private_key_pkcs8.pem 文件,而是通过字符串的形式使用,只需要删除文件首尾两行并去除换行即可。

# DER 和 PEM 格式区别

Expand Down Expand Up @@ -132,13 +132,13 @@ openssl rsa -in private_key.pem -outform DER -out private_key.der
## PKCS#1PKCS#8

```bash
openssl pkcs8 -topk8 -inform PEM -in private_key.pem -outform PEM -nocrypt -out private_key_pkcs8.pem
openssl pkcs8 -topk8 -inform PEM -in private_key.pem -outform PEM -out private_key_pkcs8.pem [-nocrypt]
```

## PKCS#8 转 DER

```bash
openssl pkcs8 -topk8 -in private_key.pem -outform DER -out private_key_pkcs8.der
openssl pkcs8 -topk8 -in private_key.pem -outform DER -out private_key_pkcs8.der [-nocrypt]
```

# 公钥为什么不需要做格式转换
Expand Down

0 comments on commit d4d9727

Please sign in to comment.