Linux gpg命令超全详解|文件加密解密、密钥管理、签名验证实战教程
1. 命令简介
gpg (GNU Privacy Guard) 是一个功能强大的开源加密软件套件,完整实现了 OpenPGP 标准(RFC 4880)。它用于保护数据的隐私性、真实性和完整性,核心功能包括数字签名、数据加密与解密、密钥管理以及构建信任网络(Web of Trust)。
gpg 是经典的 PGP(Pretty Good Privacy)加密工具的免费替代品,广泛应用于软件包签名验证、安全电子邮件通信、文件加密备份及代码提交签名等场景。
2. 语法格式
gpg [选项] [命令] [文件...]
格式说明:
[选项]: 用于修改命令默认行为的标志,例如控制输出格式、启用详细模式等。
[命令]: 指定 gpg 要执行的核心操作,例如 --sign, --encrypt。大多数操作都需要明确指定命令。
[文件...]: 一个或多个输入文件。若未指定文件或使用 -,则从标准输入(stdin)读取数据。
3. 常用命令及说明
下表列出了执行核心操作的主要命令:
命令 | 缩写 | 说明 |
|---|---|---|
--sign | -s | 创建包含原始数据和签名的二进制文件(.gpg)。 |
--clear-sign | - | 创建 ASCII armored 明文签名文件(.asc),内容可读。 |
--detach-sign | -b | 创建一个独立的二进制签名文件(.sig),与原始文件分离。 |
--encrypt | -e | 使用接收者的公钥加密数据。 |
--symmetric | -c | 仅使用对称加密算法(如AES)和密码短语加密数据。 |
--decrypt | -d | 解密数据或验证并提取已签名的文件内容。当输入是加密或签名文件时,此为默认操作。 |
--verify | - | 验证分离签名或明文签名文件的完整性。 |
--list-keys | -k | 列出公钥环中的所有公钥。 |
--list-secret-keys | -K | 列出私钥环中的所有私钥。 |
--import | - | 从文件导入密钥到本地密钥环。 |
--export | - | 将本地密钥导出到文件。 |
--generate-key | - | 交互式生成一个新的密钥对。 |
--quick-generate-key | - | 非交互式快速生成密钥对。 |
4. 常用选项及说明
下表列出了用于调整命令行为的常用选项:
选项 | 缩写 | 说明 |
|---|---|---|
--armor | -a | 生成 ASCII 文本格式(Armored)的输出,而非二进制格式,便于邮件发送或网页粘贴。 |
--recipient | -r | 指定加密数据的接收者(用户ID、邮箱或密钥ID)。可多次使用以加密给多人。 |
--local-user | -u | 指定用于签名或解密的私钥(用户ID或密钥ID)。 |
--output | -o | 将输出写入指定的文件,而不是标准输出(stdout)。 |
--verbose | -v | 启用详细输出模式。可多次使用(如 -vv)以增加信息详细程度。 |
--quiet | -q | 安静模式,减少警告和信息输出。 |
--batch | - | 启用批处理模式,禁止所有交互式查询,适用于脚本。 |
--yes | - | 默认对所有交互询问回答“是”。 |
--pinentry-mode | - | 控制密码短语输入方式。例如,loopback用于脚本从管道输入密码。 |
5. 示例用法
5.1 密钥管理
生成密钥对:
# 交互式生成密钥对(推荐新手) gpg --full-generate-key # 快速非交互式生成一个2048位RSA密钥对,有效期为365天 gpg --batch --passphrase '' --quick-generate-key "Alice Dev " rsa2048 default 365
列出与导出密钥:
# 列出所有公钥 gpg --list-keys # 列出所有私钥 gpg --list-secret-keys # 将 Alice 的公钥以 ASCII 格式导出到文件 gpg --armor --export alice@example.com > alice_public.asc # 导入 Bob 的公钥文件 gpg --import bob_public.asc
5.2 签名与验证
# 为 package.tar.gz 创建二进制签名文件 package.tar.gz.gpg gpg --sign package.tar.gz # 为 release_notes.txt 创建 ASCII 明文签名文件 release_notes.txt.asc gpg --clear-sign release_notes.txt # 为重要文件 document.pdf 创建独立的分离签名 document.pdf.sig gpg --detach-sign document.pdf # 验证上述分离签名 gpg --verify document.pdf.sig document.pdf # 验证一个明文签名文件,并提取原始内容到 verified.txt gpg --verify document.txt.asc && gpg --decrypt document.txt.asc > verified.txt
5.3 加密与解密
# 使用 Bob 的公钥(已导入)加密 secret_message.txt 给 Bob gpg --encrypt --recipient bob@example.com secret_message.txt # 输出默认二进制文件 secret_message.txt.gpg # 使用 ASCII 格式,加密给多人(Alice和Bob) gpg --armor --encrypt -r alice@example.com -r bob@example.com secret.txt # 输出 secret.txt.asc # 仅使用密码进行对称加密(不涉及密钥对) gpg --symmetric confidential.txt # 命令会提示输入并确认密码 # 解密收到的加密文件(gpg会自动寻找对应的私钥) gpg --decrypt secret_message.txt.gpg # 或将解密内容输出到文件 gpg --decrypt -o decrypted_message.txt secret_message.txt.gpg
6. 注意事项
私钥安全: 私钥是您数字身份的核心,必须妥善保管(例如使用强密码短语保护)。丢失私钥意味着无法解密以其公钥加密的文件,私钥泄露则意味着身份可能被冒用。
信任链: 加密的安全性依赖于对公钥真实性的信任。请通过安全渠道验证从网上下载或收到的公钥指纹(Fingerprint),不要盲目信任未知来源的密钥。
算法选择: 较旧版本的 GPG 可能默认使用不够安全的算法(如 RSA-1024, SHA1)。建议在生成密钥时明确指定更安全的算法,如 rsa4096 或 ed25519。
批处理脚本: 在脚本中使用 gpg 时,务必结合 --batch、--pinentry-mode loopback 以及通过文件或环境变量安全地传递密码短语,以避免脚本挂起等待输入。
输出目标: 使用 --encrypt 或 --sign 等命令时,默认会生成新文件(原文件名加 .gpg 等后缀)。使用 -o 选项可以明确指定输出文件名和位置。
获取更多Linux学习资料请关注“阿成学长工具包”,对话框中输入2647获取