GPG加密/解密/密钥管理等常用命令总结分享

GnuPG,简称 GPG,用于加密、数字签名及产生非对称密钥对。这里分享了一些常用的 GPG 命令。

密钥管理篇

生成密钥

一般情况下,我们按照默认配置生成密钥对,可使用:

1
gpg --generate-key

如果需要手动配置更多细节,需要使用:

1
gpg --full-generate-key

使用专家模式,可以进行更加细节的操作:

1
gpg --expert --full-generate-key

列出密钥

简单地查看,只需要使用:

1
gpg -k

或者使用:

1
gpg --list-keys

如果需要查看子密钥的 KEYID ,则需要使用:

1
gpg -k --keyid-format SHORT(或者LONG)

编辑密钥

主要命令格式(示例):

1
gpg --edit-key 7EBBC86694AA7E21

修改信任度:输入 trust 然后回车

添加子密钥:输入 addkey 然后回车

编辑完成后,应输入 save 以保存并退出

导入密钥

(以下为示例)

导入公钥:

1
gpg --import ~/mygpgkey_pub.gpg

导入私钥:

1
gpg --allow-secret-key-import --import ~/mygpgkey_sec.gpg

从服务器搜索公钥:

1
gpg --keyserver hkp://keyserver.ubuntu.com --search-keys hui-shao

注意将 "hui-shao" 替换为你所需要搜索的 id.

导出密钥

(以下为示例)

主公钥:

1
gpg -a -o f:\gpg_pub_key.pub --export 7EBBC86694AA7E21

其中,7EBBC86694AA7E21 为主密钥的 ID。经测试,对子密钥导出公钥,得到的还是主公钥。

私钥:

1
gpg -a -o f:\gpg_sec_key --export-secret-keys 7EBBC86694AA7E21!

注意,ID 结尾需要加上 !,否则默认会导出全部私钥。

子私钥:

1
gpg -a -o f:\gpg_sec_subkey --export-secret-subkeys 7EBBC86694AA37AD!

注意,此时的 ID 应该为对应的子密钥的 ID。

吊销证书:

1
gpg -o f:\gpg_revocation  --generate-revocation 7EBBC86694AA7E21

注:命令中的 -a 参数指定了以 ASCII 码格式导出,-o 参数指定了导出的文件名

私钥 与 吊销证书 应当严格保密

删除密钥

(以下为示例)

删除公钥:

1
gpg --delete-keys 7EBBC86694AA7E21

删除私钥:

1
gpg --delete-secret-keys 7EBBC86694AA7E21

上传密钥

上传公钥至服务器(示例):

1
gpg --send-keys 7EBBC86694AA7E21 --keyserver hkp://subkeys.pgp.net

应用操作篇

文件加密

命令示例:

1
gpg -o test_out.zip -r 74A64469 -e test.zip

其中,-r 用于指定接收用户的 id,-o 指定输出文件名(进行加密时可选择不指定该参数,默认会在文件名末尾加上“.pgp”后缀)

当加密文本文件时,建议加入 -a 参数,便于文本的传递分享

注意,所有选项都应该添加在 -e 之前

文件解密

命令示例:

1
gpg -o test.7z -d test.7z.pgp

注意,解密非文本类文件时,建议加入 -o 参数,否则默认会将解密的内容在控制台输出

文件签名

命令示例:

1
gpg --sign test.txt

以上命令生成的是一个二进制文件,若需要生成 ASCII 码的签名文件,应使用:

1
gpg --clearsign test.txt

(该方法比较适合用于文本的签名)

若需生成单独的签名文件,与文件内容分开存放,可以使用:

1
gpg -a --detach-sign test.txt
-a 指定生成 ASCII 码的签名文件)

验证签名

命令示例:

1
gpg --verify test.txt.asc test.txt

签名并加密

命令示例:

1
gpg --local-user [发信者ID] --recipient [接收者ID] --armor --sign --encrypt test.txt

The End

参考资料:GPG入门指南(加密/签名)