GPG 加密与签名
GPG 实战命令:密钥生成与导出、文件加解密、数字签名与验签、公钥交换与信任模型
GPG 密钥生成
基本写法:生成 GPG 密钥对
gpg --generate-key
# 交互式生成 GPG 密钥对
gpg --generate-key
基本写法:完全交互式生成
gpg --full-generate-key
# 完整选项生成密钥
gpg --full-generate-key
基本写法:快速生成密钥
gpg --quick-generate-key <用户ID>
# 快速生成密钥
gpg --quick-generate-key "user@example.com"
基本写法:指定算法生成
gpg --full-generate-key --expert
# 专家模式选择算法
gpg --full-generate-key --expert
密钥管理
基本写法:列出公钥
gpg --list-keys
# 列出所有公钥
gpg --list-keys
基本写法:列出私钥
gpg --list-secret-keys
# 列出所有私钥
gpg --list-secret-keys
基本写法:列出密钥指纹
gpg --fingerprint <用户ID>
# 查看密钥指纹
gpg --fingerprint user@example.com
基本写法:导出公钥
gpg --export -a <用户ID> > <文件>
# 导出 ASCII 格式公钥
gpg --export -a user@example.com > public.key
基本写法:导出私钥
gpg --export-secret-keys -a <用户ID> > <文件>
# 导出 ASCII 格式私钥
gpg --export-secret-keys -a user@example.com > private.key
基本写法:导入密钥
gpg --import <文件>
# 导入 GPG 密钥
gpg --import public.key
基本写法:删除公钥
gpg --delete-keys <用户ID>
# 删除公钥
gpg --delete-keys user@example.com
基本写法:删除私钥
gpg --delete-secret-keys <用户ID>
# 删除私钥
gpg --delete-secret-keys user@example.com
文件加密
基本写法:对称加密文件
gpg -c <文件>
# 使用密码对称加密文件
gpg -c secret.txt
基本写法:使用公钥加密
gpg -e -r <接收者> <文件>
# 使用接收者公钥加密
gpg -e -r user@example.com secret.txt
基本写法:签名并加密
gpg -e -s -r <接收者> <文件>
# 签名并加密文件
gpg -e -s -r user@example.com secret.txt
基本写法:指定输出文件
gpg -o <输出文件> -e -r <接收者> <文件>
# 指定输出文件名
gpg -o encrypted.gpg -e -r user@example.com secret.txt
基本写法:加密为 ASCII 格式
gpg -a -e -r <接收者> <文件>
# 输出 ASCII 装甲格式
gpg -a -e -r user@example.com secret.txt
文件解密
基本写法:解密文件
gpg -d <文件>
# 解密 GPG 文件
gpg -d secret.txt.gpg
基本写法:解密到指定文件
gpg -o <输出文件> -d <文件>
# 解密并保存到指定文件
gpg -o decrypted.txt -d secret.txt.gpg
基本写法:解密对称加密文件
gpg -d <文件>
# 解密对称加密的文件
gpg -d secret.txt.gpg > decrypted.txt
数字签名
基本写法:签名文件
gpg -s <文件>
# 为文件创建签名
gpg -s document.txt
基本写法:分离签名
gpg -b <文件>
# 创建分离的签名文件
gpg -b document.txt
基本写法:清除签名
gpg --clearsign <文件>
# 创建清除签名(签名嵌入文本)
gpg --clearsign document.txt
基本写法:验证签名
gpg --verify <签名文件>
# 验证文件签名
gpg --verify document.txt.sig
基本写法:验证分离签名
gpg --verify <签名文件> <原文件>
# 验证分离的签名
gpg --verify document.txt.sig document.txt
基本写法:验证清除签名
gpg --verify <文件>
# 验证清除签名的文件
gpg --verify document.txt.asc
密钥服务器
基本写法:发送密钥到服务器
gpg --send-keys <密钥ID> --keyserver <服务器>
# 上传公钥到密钥服务器
gpg --send-keys ABC12345 --keyserver keys.gnupg.net
基本写法:从服务器接收密钥
gpg --recv-keys <密钥ID>
# 从密钥服务器下载公钥
gpg --recv-keys ABC12345
基本写法:搜索密钥
gpg --search-keys <关键词>
# 在密钥服务器搜索
gpg --search-keys user@example.com
基本写法:刷新密钥
gpg --refresh-keys
# 从服务器刷新本地密钥
gpg --refresh-keys
信任管理
基本写法:编辑密钥信任度
gpg --edit-key <用户ID>
# 交互式编辑密钥信任级别
gpg --edit-key user@example.com
# 然后输入 trust 命令
基本写法:签名公钥
gpg --sign-key <用户ID>
# 为他人公钥签名表示信任
gpg --sign-key user@example.com
基本写法:检查签名
gpg --check-sigs <用户ID>
# 查看密钥的签名情况
gpg --check-sigs user@example.com
加密目录
基本写法:加密整个目录
tar czf - <目录> | gpg -c > <文件>
# 压缩并加密整个目录
tar czf - /secret | gpg -c > secret.tar.gz.gpg
基本写法:解密并解压目录
gpg -d <文件> | tar xzf -
# 解密并解压目录
gpg -d secret.tar.gz.gpg | tar xzf - -C /restore
基本写法:使用公钥加密目录
tar czf - <目录> | gpg -e -r <接收者> > <文件>
# 压缩并用公钥加密目录
tar czf - /data | gpg -e -r user@example.com > data.tar.gz.gpg
批处理操作
基本写法:批量加密
for f in *.txt; do gpg -e -r <接收者> "$f"; done
# 批量加密所有 txt 文件
for f in *.txt; do gpg -e -r user@example.com "$f"; done
基本写法:批量解密
for f in *.gpg; do gpg -d "$f" > "${f%.gpg}"; done
# 批量解密所有 gpg 文件
for f in *.gpg; do gpg -d "$f" > "${f%.gpg}"; done
基本写法:无交互加密
gpg --batch --yes -e -r <接收者> <文件>
# 批处理模式无交互加密
gpg --batch --yes -e -r user@example.com secret.txt
实用 GPG 组合
基本写法:安全删除原文件
gpg -c <文件> && shred -u <文件>
# 加密后安全删除原文件
gpg -c secret.txt && shred -u secret.txt
基本写法:验证并解密
gpg --verify <签名> && gpg -d <文件>
# 先验证签名再解密
gpg --verify document.sig && gpg -d document.gpg
基本写法:加密邮件内容
gpg -a -e -r <接收者> <邮件文件>
# 加密邮件内容为 ASCII 格式
gpg -a -e -r recipient@example.com email.txt
基本写法:备份 GPG 密钥
gpg --export-secret-keys -a > <文件>; gpg --export -a >> <文件>
# 备份所有 GPG 密钥到文件
gpg --export-secret-keys -a > backup.key
gpg --export -a >> backup.key