使用GPG加密

GPG秘钥对生成

gpg --gen-key 生成公钥和私钥对。

这个网络上很多,不详述。

导出公钥

gpg --list-keys 查看公钥
gpg --armor -o public.gpg.key --export [ID or Email]
导出的公钥具体叫什么可以自己定,比如 public_key.asc

导入公钥

获得对方(你希望解密文件的人)的公钥后需要导入公钥,使用
gpg --import [ID or Email]

添加公钥后进行加密的时候也许会遇到下面的问题

It is NOT certain that the key belongs to the person named
in the user ID.  If you *really* know what you are doing,
you may answer the next question with yes.

已知有三种方法能够解决这个问题。
第一种方法见小技巧,给定默认的answer到gpg。
第二种方法是修改不被信任的公钥为绝对信任,注意安全风险

gpg --edit-key YOUR@KEY.ID
gpg> trust
Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)

  1 = I don't know or won't say
  2 = I do NOT trust
  3 = I trust marginally
  4 = I trust fully
  5 = I trust ultimately
  m = back to the main menu

Your decision? 5
Do you really want to set this key to ultimate trust? (y/N) y

第三种方法是导出公钥的时候采用
--export-ownertrust
导入公钥的时候采用
--import-ownertrust
这种方式本人尚未验证

导出私钥

gpg --list-secret-keys 查看私钥
gpg --export-secret-keys --armor -o keyname.sec.key [KEYID]

导入私钥

gpg --allow-secret-key-import --import keyname.sec.key
gpg --import public.gpg.key

如果有多个私钥,想要默认选择一个私钥,则修改 ~/.gnupg/gpg.conf,把原先的 default-key
default-key KEYID

加密文件

gpg -r [ID or Email] -o outfilename -e targetfilename
如果不用-o选项,默认的输出名字是 targetfilename.gpg
可以使用多个公钥进行加密,这样也就有多个人能够解密文件。使用-r [ID] -r [ID]隔开即可。

解密文件

收到对方用自己的公钥加密后的文件后得到 targetfilename.gpg
gpg targetfilename.gpg 最简单的写法,解密得到加密前原始文件。

也可以指定使用哪个人的公钥进行解密。
gpg -u [ID or Email] -d targetfilename.gpg

以上两种都会提示用户输入密码来使能自己的私钥进行解密,可以在命令行给定么?答案是可以的,但是不是很推荐这么做,密码容易泄露。

使用 gpg -u [ID or Email] --passphrase [password] -d targetfilename.gpg
或者用文件指定,gpg会读取文件的第一行作为私钥的解密密码。
gpg -u [ID or Email] --passphrase-fd 0 -d targetfilename.gpg < passphrase.txt

给文件签名

加密和签名是两种不同的过程。加密过程采用对方的公钥加密,对方用自己的私钥解密。签名过程是使用自己的私钥加密,对方使用我们的公钥进行验证。签名可以用于保证我们发送的文件不被篡改,并且加上了时间戳。

gpg -o outfile --sign file
输入密码来解锁使用自己的私钥

收到一个签名的文件,我们可以验证签名。
gpg --verify file
或者验证签名并且恢复原文件。使用解密命令即可--decrypt
gpg -o outfile -d filename

给Email等需要即时阅读的内容签名

上面的--sign选项签名文件后内容就不方便读了。
可以使用--clearsign选项进行签名,这样签名后的文件格式是ASCII格式的文件。
gpg --clearsign doc
当前要恢复原始文件还是要用--decrypt的。

签名和原文件分离

小伙伴们马上能想到为什么非要有一个把签名去除的过程呢?把两者分开岂不是更好?
是的,使用 gpg --detach-sig 选项即可。

小技巧

有时候会遇到gpg在命令行上跳出要求确认是否进行文件覆盖啦,是否信任某个公钥啦的问题。可以指定一个选项让gpg不输出这些信息,默认指定yes or no。
采用该命令即可: gpg --batch --yes xxxxx

总结

终极加密:
gpg --batch --yes -r [ID or Email] -r [ID or Email] ... -o outfilename -e targetfilename

终极解密:
gpg --batch --yes -u [ID or Email] --passphrase-fd 0 -o filename -d targetfilename < passphrase.txt

OpenPGP 签名验证指南1

华为在发布产品的时候会使用数字签名的方式保证数据完整性。可参看链接 OpenPGP 签名验证指南。


  1. https://support.huawei.com/carrier/docview!docview?nid=PK100000008&path=false ↩︎

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值