$ gpg --help
gpg (GnuPG) 2.4.4
libgcrypt 1.10.3
Copyright © 2024 g10 Code GmbH
License GNU GPL-3.0-or-later https://gnu.org/licenses/gpl.html
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Home: /home/hjw/.gnupg
支持的算法:
公钥: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
密文: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
CAMELLIA128, CAMELLIA192, CAMELLIA256
散列: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
压缩: 不压缩, ZIP, ZLIB, BZIP2
语法:gpg [选项] [文件]
签名、检查、加密或解密
默认的操作依输入数据而定
命令:
-s, --sign 生成一份签名
--clear-sign 生成一份明文签名
-b, --detach-sign 生成一份分离的签名
-e, --encrypt 加密数据
-c, --symmetric 仅使用对称密文加密
-d, --decrypt 解密数据(默认)
--verify 验证签名
-k, --list-keys 列出密钥
--list-signatures 列出密钥和签名
--check-signatures 列出并检查密钥签名
--fingerprint 列出密钥和指纹
-K, --list-secret-keys 列出私钥
--generate-key 生成一个新的密钥对
--quick-generate-key 快速生成一个新的密钥对
--quick-add-uid 快速添加一个新的用户标识
--quick-revoke-uid 快速吊销一个用户标识
--quick-set-expire 快速设置一个过期日期
--full-generate-key 完整功能的密钥对生成
--generate-revocation 生成一份吊销证书
--delete-keys 从公钥钥匙环里删除密钥
--delete-secret-keys 从私钥钥匙环里删除密钥
--quick-sign-key 快速签名一个密钥
--quick-lsign-key 快速本地签名一个密钥
--quick-revoke-sig 快速吊销一个密钥签名
--sign-key 签名一个密钥
--lsign-key 本地签名一个密钥
--edit-key 签名或编辑一个密钥
--change-passphrase 更改密码
--export 导出密钥
--send-keys 将密钥导出到一个公钥服务器上
--receive-keys 从公钥服务器上导入密钥
--search-keys 在公钥服务器上搜索密钥
--refresh-keys 从公钥服务器更新所有密钥
--import 导入/合并密钥
--card-status 打印卡片状态
--edit-card 更改卡片上的数据
--change-pin 更改卡片的 PIN
--update-trustdb 更新信任数据库
--print-md 打印消息摘要
--server 以服务器模式运行
--tofu-policy VALUE 设置一个密钥的 TOFU 政策
控制诊断输出的选项:
-v, --verbose 详细模式
-q, --quiet 尽量减少提示信息
--options FILE 从 FILE 中读取选项
--log-file FILE 将服务器模式的日志写入到 FILE
控制配置的选项:
--default-key NAME 使用 NAME 作为默认的私钥
--encrypt-to NAME 同时给以 NAME 为名称的用户标识加密
--group SPEC 设置电子邮件别名
--openpgp 使用严格的 OpenPGP 行为
-n, --dry-run 不做任何更改
-i, --interactive 覆盖前提示
控制输出的选项:
-a, --armor 创建 ASCII 字符封装的输出
-o, --output FILE 写输出到 FILE
--textmode 使用规范的文本模式
-z N 设置压缩等级为 N (0 为禁用)
控制密钥导入导出的选项:
--auto-key-locate MECHANISMS 通过邮件地址定位密钥时使用机制 MECHANISMS
--auto-key-import 从签名中导入缺少的密钥
--include-key-block 在签名中包含公钥
--disable-dirmngr 禁用对 dirmngr 的所有访问
指定密钥的选项:
-r, --recipient USER-ID 为 USER-ID 加密
-u, --local-user USER-ID 使用 USER-ID 来签名或者解密
(请参考手册页以获得所有命令和选项的完整列表)
例子:
-se -r Bob [文件] 为用户 Bob 签名和加密
--clear-sign [文件] 创建一个明文签名
--detach-sign [文件] 创建一个分离签名
--list-keys [名字] 列出密钥
--fingerprint [名字] 显示指纹
请向 https://bugs.gnupg.org 报告程序缺陷。
请向 i18n-zh@googlegroups.com 邮件列表反映简体中文的翻译问题或建议。
以下是基于 gpg (GnuPG) 2.4.4 的详细使用范例整理,涵盖密钥管理、加密解密、签名验证等常见场景,并附上实际命令示例和说明。
1. 密钥管理
1.1 生成密钥对
快速生成密钥(推荐)
bash
gpg --quick-generate-key "用户名 <邮箱>" rsa4096 never
-
参数说明 :
rsa4096:密钥算法和长度。never:密钥永不过期(可替换为1y表示 1 年后过期)。
-
示例 :
bashgpg --quick-generate-key "Alice <alice@example.com>" rsa4096 1y
完整生成密钥(自定义参数)
bash
gpg --full-generate-key
- 按提示选择密钥类型、长度、过期时间等。
1.2 列出密钥
列出所有公钥
bash
gpg --list-keys
-
显示指纹 :
bashgpg --list-keys --with-fingerprint -
示例输出 :
pub rsa4096 2024-01-01 [SC] [expires: 2025-01-01] 1234ABCD5678EFGH90IJ1234KL5678MN90PQ12RS uid [ultimate] Alice <alice@example.com> sub rsa4096 2024-01-01 [E] [expires: 2025-01-01]
列出所有私钥
bash
gpg --list-secret-keys
1.3 导出密钥
导出公钥(ASCII 格式)
bash
gpg --export --armor "用户名 <邮箱>" > pubkey.asc
-
示例 :
bashgpg --export --armor "Alice <alice@example.com>" > alice_pub.asc
导出私钥(谨慎操作!)
bash
gpg --export-secret-keys --armor "用户名 <邮箱>" > privkey.asc
1.4 导入密钥
从文件导入
bash
gpg --import pubkey.asc
-
从公钥服务器导入 :
bashgpg --keyserver keyserver.ubuntu.com --recv-keys 1234ABCD
1.5 删除密钥
删除公钥
bash
gpg --delete-keys "用户名 <邮箱>"
删除私钥
bash
gpg --delete-secret-keys "用户名 <邮箱>"
2. 加密与解密
2.1 加密文件
使用公钥加密
bash
gpg --encrypt --recipient "用户名 <邮箱>" 文件名
-
示例 :
bashgpg --encrypt --recipient "Alice <alice@example.com>" secret.txt- 生成加密文件
secret.txt.gpg。
- 生成加密文件
对称加密(无公钥)
bash
gpg --symmetric 文件名
- 输入密码后生成
文件名.gpg。
2.2 解密文件
使用私钥解密
bash
gpg --decrypt 加密文件.gpg > 解密后文件.txt
-
示例 :
bashgpg --decrypt secret.txt.gpg > secret_decrypted.txt
解密对称加密文件
bash
gpg --decrypt 对称加密文件.gpg > 解密后文件.txt
- 输入密码后解密。
3. 签名与验证
3.1 生成签名
创建明文签名
bash
gpg --clear-sign 文件名
-
生成
文件名.asc(包含原文和签名)。 -
示例 :
bashgpg --clear-sign document.txt
创建分离签名
bash
gpg --detach-sign 文件名
- 生成
文件名.sig(仅签名)。
直接签名并加密
bash
gpg --sign --encrypt --recipient "用户名 <邮箱>" 文件名
-
示例 :
bashgpg --sign --encrypt --recipient "Alice <alice@example.com>" message.txt
3.2 验证签名
验证明文签名
bash
gpg --verify 文件名.asc
-
示例 :
bashgpg --verify document.txt.asc
验证分离签名
bash
gpg --verify 文件名.sig 文件名
-
示例 :
bashgpg --verify document.sig document.txt
4. 密钥服务器操作
4.1 搜索密钥
bash
gpg --keyserver keyserver.ubuntu.com --search-keys "用户名或邮箱"
-
示例 :
bashgpg --keyserver keyserver.ubuntu.com --search-keys "alice@example.com"
4.2 上传密钥
bash
gpg --keyserver keyserver.ubuntu.com --send-keys 1234ABCD
4.3 刷新密钥
bash
gpg --keyserver keyserver.ubuntu.com --refresh-keys
5. 高级操作
5.1 编辑密钥
bash
gpg --edit-key "用户名 <邮箱>"
- 交互命令 :
adduid:添加用户 ID。revuid:吊销用户 ID。expire:修改过期时间。trust:设置信任级别。quit:退出编辑。
5.2 生成吊销证书
bash
gpg --generate-revocation --armor "用户名 <邮箱>" > revocation.asc
- 用于吊销丢失或泄露的密钥。
5.3 查看密钥详细信息
bash
gpg --show-keys --keyid-format LONG 1234ABCD
- 参数说明 :
--keyid-format LONG:显示完整指纹(40 位)。--keyid-format SHORT:显示短KEY_ID(8 位)。
6. 实际场景示例
场景 1:加密文件并发送给 Alice
-
加密文件:
bashgpg --encrypt --recipient "Alice <alice@example.com>" secret.txt -
发送
secret.txt.gpg给 Alice。
场景 2:验证收到的签名文件
-
下载
document.txt.asc和document.txt。 -
验证签名:
bashgpg --verify document.txt.asc document.txt
场景 3:备份私钥
-
导出私钥:
bashgpg --export-secret-keys --armor "Alice <alice@example.com>" > alice_priv.asc -
将
alice_priv.asc存储在安全位置。
7. 注意事项
- 保护私钥:私钥泄露会导致加密数据被解密,签名被伪造。
- 备份密钥 :建议备份
.gnupg目录或导出密钥文件。 - 验证公钥:从可信渠道获取公钥,避免中间人攻击。
- 过期密钥:定期更新密钥的过期时间。
通过以上命令,您可以完成 GPG 的常见操作,包括密钥管理、加密解密、签名验证等。根据实际需求选择合适的命令和参数。