查看gpg
工具版本号
% gpg --version
gpg (GnuPG) 2.2.21
libgcrypt 1.8.6
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 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: /Users/user/.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 --gen-key
GnuPG 需要构建用户标识以辨认您的密钥。
真实姓名: test
姓名至少要有五个字符长
真实姓名: gpgtest
电子邮件地址: gpgtest@gpgtest.test
您选定了此用户标识:
“gpgtest <gpgtest@gpgtest.test>”
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? O
我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘
、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数
发生器有更好的机会获得足够的熵。
我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘
、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数
发生器有更好的机会获得足够的熵。
gpg: 密钥 721AD549AF7EE528 被标记为绝对信任
gpg: 吊销证书已被存储为‘/Users/user/.gnupg/openpgp-revocs.d/037C102307A3DEF80A15CB2A721AD549AF7EE528.rev’
公钥和私钥已经生成并被签名。
pub rsa2048 2021-04-10 [SC] [有效至:2023-04-10]
037C102307A3DEF80A15CB2A721AD549AF7EE528
uid gpgtest <gpgtest@gpgtest.test>
sub rsa2048 2021-04-10 [E] [有效至:2023-04-10]
使用gpg --gen-key
流程比较简略,许多参数自动使用默认配置,也可用使用gpg --full-generate-key
来自定义完整流程:
% gpg --full-generate-key
请选择您要使用的密钥类型:
(1) RSA 和 RSA (默认)
(2) DSA 和 Elgamal
(3) DSA(仅用于签名)
(4) RSA(仅用于签名)
(14) Existing key from card
您的选择是? 1
RSA 密钥的长度应在 1024 位与 4096 位之间。
您想要使用的密钥长度?(2048)
请求的密钥长度是 2048 位
请设定这个密钥的有效期限。
0 = 密钥永不过期
<n> = 密钥在 n 天后过期
<n>w = 密钥在 n 周后过期
<n>m = 密钥在 n 月后过期
<n>y = 密钥在 n 年后过期
密钥的有效期限是?(0)
密钥永远不会过期
这些内容正确吗? (y/N) y
GnuPG 需要构建用户标识以辨认您的密钥。
真实姓名: gpgtest
电子邮件地址: gpgtest@gpgtest.test
注释:
您选定了此用户标识:
“gpgtest <gpgtest@gpgtest.test>”
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? O
我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘
、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数
发生器有更好的机会获得足够的熵。
我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘
、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数
发生器有更好的机会获得足够的熵。
gpg: 密钥 721AD549AF7EE528 被标记为绝对信任
gpg: 吊销证书已被存储为‘/Users/user/.gnupg/openpgp-revocs.d/037C102307A3DEF80A15CB2A721AD549AF7EE528.rev’
公钥和私钥已经生成并被签名。
pub rsa2048 2021-04-10 [SC] [有效至:2023-04-10]
037C102307A3DEF80A15CB2A721AD549AF7EE528
uid gpgtest <gpgtest@gpgtest.test>
sub rsa2048 2021-04-10 [E] [有效至:2023-04-10]
默认会同时创建密钥对应的吊销证书。
密码限制:
- 至少8个字符
- 至少包含一个数字或特殊字符
创建吊销证书
% gpg --gen-revoke DCDECC17ADB5DC35
sec rsa2048/DCDECC17ADB5DC35 2021-04-10 gpgtest (test gpg key) <gpgtest@gpgptest.test>
要为这个密钥创建一个吊销证书吗?(y/N) y
请选择吊销的原因:
0 = 未指定原因
1 = 密钥已泄漏
2 = 密钥被替换
3 = 密钥不再使用
Q = 取消
(也许您会想要在这里选择 1)
您的决定是什么? 3
请输入描述(可选);以空白行结束:
> just a test
>
吊销原因:密钥不再使用
just a test
这样可以吗? (y/N) y
已强行使用 ASCII 字符封装过的输出。
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: This is a revocation certificate
iQFBBCABCAArFiEEo0Rf+7oYz3Yv6FiX3N7MF6213DUFAmBxE8ANHQNqdXN0IGEg
dGVzdAAKCRDc3swXrbXcNa8VCAC1uk3A3p2Lo1mLTx7TSSAtLqlkv8c6555UmAXE
3loY8sWPviWgZIAoXenYD3FMMW5ioRee+w4/S23AdZVqkFRqkQfwOMpUAHUrAnid
U9kVIhaLO+D056c47IiykZxncVfL+rBVdAXMYQC4a1DqcwUcr4ojcqWyXDAvXLmV
W1dqU67XbZnV6ALNgKrprVv0hZwufM19eu0L3cRTSk8Le8xv2vepQQBFC+SXhT8n
F3fhygyrUkDQcOdszbAQnSNUqi+lxwjX6t0Gtpmmyilnid8J0mmVNvkavgMAIQwm
36K+2untc/A8UDYzqeELwEdpA9tabY2JzvgVdR/N1cRrdNMn
=fR5F
-----END PGP PUBLIC KEY BLOCK-----
已创建吊销证书。
请把这个文件转移到一个您可以藏起来的介质上;如果坏人获取到了这
份证书的话,那么他就能使用它并让您的密钥无法继续使用。把此证书
打印出来再存放到安全的地方也是很好的方法,以免您的保存媒体变得
不可读。但是千万小心:您机器上的打印系统可能会在打印过程中储存
这些数据,并使得其他人看到!
列出已有密钥
% gpg -k
/Users/user/.gnupg/pubring.kbx
---------------------------
pub dsa2048 2010-08-19 [SC] [有效至:2024-05-11]
85E38F69046B44C1EC9FB07B76D78F0500D026C4
uid [ 未知 ] GPGTools Team <team@gpgtools.org>
uid [ 未知 ] [jpeg image of size 6329]
sub rsa4096 2014-04-08 [S] [有效至:2024-05-11]
sub rsa4096 2020-05-11 [E] [有效至:2024-05-11]
pub rsa4096 2020-05-04 [SC] [有效至:2024-05-03]
B97E9964ACAD1907970D37CC8A9E3745558E41AF
uid [ 未知 ] GPGTools Support <support@gpgtools.org>
sub rsa4096 2020-05-04 [E] [有效至:2024-05-03]
pub rsa2048 2021-04-10 [SC] [吊销于:2021-04-10]
037C102307A3DEF80A15CB2A721AD549AF7EE528
uid [ 已吊销 ] gpgtest <gpgtest@gpgtest.test>
pub rsa2048 2021-04-10 [SC]
A3445FFBBA18CF762FE85897DCDECC17ADB5DC35
uid [ 绝对 ] gpgtest (test gpg key) <gpgtest@gpgptest.test>
sub rsa2048 2021-04-10 [E]
或者
% gpg --list-keys
删除密钥
首先删除私钥
% gpg --delete-secret-keys 721AD549AF7EE528
...
sec rsa2048/721AD549AF7EE528 2021-04-10 gpgtest <gpgtest@gpgtest.test>
要从钥匙环里删除这个密钥吗?(y/N) y
这是一个私钥!- 真的要删除吗?(y/N) y
然后删除公钥
% gpg --delete-key 721AD549AF7EE528
pub rsa2048/721AD549AF7EE528 2021-04-10 gpgtest <gpgtest@gpgtest.test>
要从钥匙环里删除这个密钥吗?(y/N) y
导出密钥
导出二进制形式的公钥
% gpg --output public.key --export 721AD549AF7EE528
也可以导出文本形式的公钥
% gpg --armor --output public.key --export 721AD549AF7EE528
导出二进制形式私钥
% gpg --output secret.key --export-secret-keys 721AD549AF7EE528
也可以导出文本形式的私钥
% gpg --armor --output public.key --export-secret-keys 721AD549AF7EE528
导入密钥
% gpg --import 密钥文件
导入的密钥可以通过公共服务器搜索
搜索密钥
% gpg --keyserver hkps://keys.openpgp.org --search-keys [name]
上传到公钥服务器
% gpg --keyserver hkps://keys.openpgp.org --send-keys 721AD549AF7EE528
gpg: 正在发送密钥 721AD549AF7EE528 到 hkps://keys.openpgp.org
获取密钥指纹
% gpg --fingerprint 721AD549AF7EE528
pub rsa2048 2021-04-10 [SC]
A344 5FFB BA18 CF76 2FE8 5897 DCDE CC17 ADB5 DC35
uid [ 绝对 ] gpgtest (test gpg key) <gpgtest@gpgptest.test>
sub rsa2048 2021-04-10 [E]
加密
加密文件demo.txt
% gpg --recipient [name] --output demo.en.txt --encrypt demo.txt
解密
% gpg --output demo.de.txt --decrypt demo.en.txt
签名
生成二进制形式的签名文件
% gpg --sign demo.txt
生成文本形式的签名文件
% gpg --clearsign demo.txt
生成二进制形式独立签名文件
% gpg --detach-sign demo.txt
生成文本形式独立签名文件
% gpg --armor --detach-sign demo.txt
签名+加密
% gpg --local-user [发信者ID] --recipient [接收者ID] --armor --sign --encrypt demo.txt
验证签名
% gpg --verify demo.txt.asc demo.txt
gpg: 签名建立于 六 4/11 16:14:14 2020 CST
gpg: 使用 RSA 密钥 A3445FFBBA18CF762FE85897DCDECC17ADB5DC35
gpg: 完好的签名,来自于 “gpgtest <gpgtest@gpgtest.test>” [绝对]