gpg常用命令


0x01


创建密钥对,期间会被要求输入密码用于保护密钥

1
2
gpg --full-gen-key
gpg --full-gen-key --expert

导出私钥/公钥

1
2
3
4
5
gpg -a --export-secret-key [keyID/email] > secret.key
gpg -o secret.key --export-secret-keys [keyID]

gpg -a --export [keyID/email] > public.key
gpg -ao public.key --export [keyID]

导入私钥/公钥,导入私钥需要输入保护私钥的密码,公钥也能从密钥服务器导入

1
2
gpg --import [secret.key/other's-public-key-file]
gpg --keyserver hkps.pool.sks-keyservers.net --search-keys [keyID/email]

列出所有私钥/公钥

1
2
gpg -K/--list-secret-keys
gpg -k/--list-keys

公钥上传到密钥服务器

1
gpg --keyserver [keyserverAddress] --send-keys [keyID/email]

--keyserver为可选项,[keyserverAddress]可不带前缀
gpg在--keyserver缺省时,默认使用https://keys.openpgp.org/ 作为密钥服务器,通过命令行--send-keys或网页上传公钥后,站点会发送验证邮件,15分钟有效。

吊销公钥证书

1
2
3
4
5
6
#生成吊销证书
gpg -o/--output revoke.asc --gen-revoke [keyID/email]
#导入吊销证书
gpg --import revoke.asc
#发送吊销证书到服务器,作废原证书
gpg --keyserver [keyserverAddress] --send-keys [keyID/email]


删除私钥/公钥,先删私钥再删公钥

1
2
gpg --delete-secret-keys [keyID]
gpg --delete-keys [keyID]

公钥指纹,用于判断导入的公钥是否正确

1
gpg --fingerprint [UserID]

修改密码

1
2
3
4
5
6
gpg --list-keys
gpg --edit-key [keyID]

#进入gpg提示符
gpg> passwd
gpg> save

0x02


加密,需提前导入接收者公钥

1
2
gpg --encrypt [filename]
gpg -r/--recipient [UserID] -o/--output [filename.encrypt] -e/--encrypt [filename]
  • –recipient,指定接收者公钥?

解密

1
2
3
gpg [filename.encrypt]
gpg -d [filename.encrypt]
gpg -o/--output [filename.decrypt] -d/--decrypt [filename.encrypt]

签名,包含原文件

1
2
3
4
5
#生成以二进制储存的[filename].gpg文件
gpg -s/--sign [filename]

#生成[filename].asc文件,后缀asc表示文件是ASCII码形式
gpg --clearsign [filename]

签名,原文件和签名分开,分离式签名

1
2
3
4
5
#生成单独的[filename].sig签名文件
gpg -b/--detach-sign [filename]

#生成单独的采用ASCII码形式的签名文件
gpg -a -b/--detach-sign [filename]

验证

1
2
3
4
5
6
7
#包含原文件和签名
gpg --verify [filename].gpg

#分离式签名
gpg --verify [filename].sig [filename]
#Example
gpg --verify test2.armor.detach.sig test2

签名并加密

1
2
3
4
gpg -u/--local-user [发件人UserID/email] -r/--recipient [收件人UserID/email] -a/--armor -s/--sign -e/--encrypt doc
#Example
gpg -o test.sig -ser [收件人UserID/email] test
gpg -u [email protected] -r recv@email -a -s -e testgpg
  • --local-user用(自己)发件人的私钥签名
  • --recipient用(对方)收件人的公钥加密
  • --armor,采用ASCII码形式显示
  • --sign,需要签名
  • --encrypt,指定源文件

接收人解密并验证
gpg test.sig


0x03


public/private key,fingerprint, keyID相互关系

  • public/private key 是密钥对
  • public key很长,一般通过文件的形式存放和传播
  • public key在哈希后得到40个字符长度的fingerprint
  • fingerprint的后16个字符为keyID

REF

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.