用GnuPG加密文件

GnuPG软件

http://gnupg.org/

GnuPG(英文:GNU Privacy Guard,简称:GPG)是一种加密软件,它是PGP加密软件的满足GPL协议的替代物。

GnuPG是自由软件基金会的GNU计划的一部份,目前受德国政府资助。以GNU通用公共许可证第三版授权。

GnuPG使用用户自行生成的非对称密钥对来加密信息,由此产生的公钥可以同其他用户以各种方式交换,如密钥服务器。他们必须小心交换密钥,以防止得到伪造的密钥。GnuPG还可以向信息添加一个加密的数字签名,这样,收件人可以验证信息完整性和发件人。

GnuPG不利用专利或其他方式限制软件或算法,就像IDEA算法一开始出现在PGP中一样。(可以通过下载相关插件在GnuPG中使用IDEA算法,不过如果在一些IDEA算法为专利的国家中使用,可能需要一份许可)。

GnuPG同样也使用各种其他非专利的算法:

  • 分组密码:CAST5,Camellia,Triple DES,AES,Blowfish,Twofish
  • 非对称加密密码:ElGamal,RSA
  • 加密哈希:RIPEMD-160,MD5,SHA-1,SHA-2,Tiger
  • 数字签名:DSA,RSA

GnuPG是一个混合加密软件程序,它使用常规对称密钥提高加密速度,使用公钥便于交换。通常使用一次性的收件人公钥用以加密会话。

GNU/Linux环境下的使用:非对称加密

通过GnuPG获取私钥、公钥,我可以将公钥发布给朋友,私钥自己保存;当朋友用我的公钥加密文件后,我可以通过私钥来对文件进行解密;当我用私钥对文件进行签名,朋友可以通过公钥来验证文件真伪。

通过公钥对文件进行加密时,不需要密码,只需要系统中能找到公钥文件;当进行解密时,需要私钥和保护密码。

生成密钥

1
gpg --gen-key
  • real name:真实姓名,可以随便用6给字母以上的名字,如GangLee
  • email:邮件地址如ganglee@gmail.com
  • commit:注释,可以随便写,如KengDieAAA

备份公钥

1
gpg -o 输出文件如public.key -a --export uid

备份私钥

1
gpg -o 输出文件如private.key -a --export-secret-keys uid
  • -a: 参数是以文本格式输出,否则是二进制格式

导入私钥、公钥

1
gpg --import 文件名,如public.key/private.key

显示公钥

1
2
3
4
5
6
7
$gpg -k
~/.gnupg/pubring.gpg
------------------------------------
pub 2048R/989E1A0C 2013-03-14
uid
sub 2048R/3BDF3443 2013-03-14

这里的uid是“GangLee (KengDieAAA) ganglee@gmail.com

显示私钥

1
2
3
4
5
6
7
$gpg -K
~/.gnupg/secring.gpg
------------------------------------
sec 2048R/989E1A0C 2013-03-14
uid GangLee (KengDieAAA) <ganglee@gmail.com>
ssb 2048R/3BDF3443 2013-03-14

删除私钥和公钥

1
gpg --delete-secret-and-public-key 名字或email

删除私钥

1
gpg --delete-secret-key 名字或email

删除公钥

1
gpg --delete-key 名字或email

发布证书

1
gpg --edit-key 名字或email

加密文件

1
2
3
gpg -e -r 名字或email 需要加密的文件
gpg -se -r 名字或email 需要加密的文件 (加密的同时进行签名)
gpg --clearsign -e -r 名字或email 需要加密的文件 (加密的同时进行签名,但签名是文本信息)

解密文件

1
2
gpg -d example.pgp (解密结果直接打印在终端)
gpg -o output.txt -d example.pgp (解密结果保存为文件)

指纹取样

如果导入朋友发来的公钥,却提示没有任何可信实体信息,则需要检验公钥,进行指纹采样:

1
gpg --fingerprint 名字或email
1
2
3
4
pub 2048R/989E1A0C 2013-03-14
Key fingerprint = ECF0 1DC5 FEE4 FD71 A5D3 A7FD 3611 EC64 989E 1A0C
uid GangLee (KengDieAAA) <ganglee@gmail.com>
sub 2048R/3BDF3443 2013-03-14

然后和朋友确认,是否发送过公钥并且公钥的指纹是一致的。

对公钥进行签名

1
gpg --sign-key 名字或邮箱

检查签名

1
gpg --check-sigs 名字或邮箱

编辑信用级别

1
gpg --edit-key 名字或email
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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? 2
gpg> quit
  • 加密、解密备份
  • 备份私钥,没有私钥,则文件无法解密
  • 密码,没有密码,既有私钥,也无法解密
  • 用一对公钥、私钥加密文件,用一对公钥、私钥加密私钥

对称加密

不需要密钥,直接加密

1
gpg -o 文件.gpg -c 文件
吴羽舒 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!