PGP(Pretty Good Privacy)是一种广泛使用的加密技术,常用于邮件加密、签名以及身份认证等安全场景。
本文介绍如何在 Linux 系统中使用 `gpg` 命令生成并导出 PGP 公钥,兼顾 **老版本 GnuPG** 与 **新版本 GnuPG(2.1+)**。
---
## 一、环境准备
首先确认系统已安装 GnuPG:
```bash
gpg --version
输出类似:
gpg (GnuPG) 2.0.22
如果你看到 gpg: invalid option "--quick-gen-key"
这样的报错,说明你用的是 老版本 GnuPG(如 2.0 / 1.x),该版本不支持 --quick-gen-key
。
本文将分别介绍两种版本的密钥生成方法。
二、老版本 GnuPG(无 --quick-gen-key
)
老版本(如 GnuPG 2.0 / 1.x)必须使用交互式命令:
1. 生成密钥对
gpg --gen-key
然后按提示依次输入:
- 密钥类型:选择
1
(RSA and RSA) - 密钥长度:建议输入
4096
- 有效期:输入
0
表示永不过期,或1y
表示一年 - 姓名 / 邮箱:任意填写
- 口令:用于保护私钥
完成后 GPG 会在本地生成一对密钥(私钥 + 公钥)。
2. 查看已生成的密钥
gpg --list-keys
输出示例:
/root/.gnupg/pubring.gpg
------------------------
pub 4096R/2C09D88D 2025-08-21
uid <你的名字与邮箱>
sub 4096R/CBF9B651 2025-08-21
其中:
2C09D88D
是主公钥的 KEYIDCBF9B651
是加密子钥的 KEYID
3. 导出公钥(ASCII 装甲)
gpg --armor --export 2C09D88D > public.asc
也可以用邮箱导出:
gpg --armor --export "yourname@example.com" > public.asc
public.asc
内容如下:
-----BEGIN PGP PUBLIC KEY BLOCK-----
...
-----END PGP PUBLIC KEY BLOCK-----
此文件即可安全地发给他人,用于加密或验证签名。
三、新版本 GnuPG(2.1+)
GnuPG 2.1 及以上版本支持 --quick-gen-key
命令,一条命令即可生成密钥对。
1. 一条命令生成密钥
gpg --quick-gen-key "Your Name <yourname@example.com>" default default 0
参数说明:
default
表示使用默认算法(ed25519 签名 + cv25519 加密)- 最后一个
0
表示永不过期(也可以写成1y
表示一年)
2. 导出公钥
gpg --armor --export yourname@example.com > public.asc
或用 --list-keys
查出 KEYID 后用 KEYID 导出:
gpg --list-keys
gpg --armor --export <KEYID> > public.asc
四、导出私钥(仅限备份)
警告:私钥必须妥善保管,绝不能泄露!
gpg --armor --export-secret-keys 2C09D88D > private.asc
private.asc
文件建议离线保存,切勿上传或发送给他人。
五、常用命令速查表
功能 | 命令示例 |
---|---|
生成密钥(老版本) | gpg --gen-key |
生成密钥(新版本) | gpg --quick-gen-key "Name <Email>" default default 0 |
查看密钥列表 | gpg --list-keys |
导出公钥 | gpg --armor --export <KEYID> > public.asc |
导出私钥 | gpg --armor --export-secret-keys <KEYID> > private.asc |
查看指纹 | gpg --fingerprint <KEYID> |
六、结语
无论你使用的是老版本 GnuPG 还是新版本,只要掌握了 gpg --gen-key
与 gpg --armor --export
这两步,就能顺利生成并导出符合 PGP 标准的公钥。
如果你看到 gpg: WARNING: nothing exported
,说明你导出命令中用的邮箱或 KEYID 不存在,先用 --list-keys
查出正确的 KEYID 即可。
掌握这些基础命令,你就可以安全地进行邮件加密、文件签名与身份认证等操作了。