生成密钥对
导出公钥
导入公钥
使用GnuPG加解密文件
解密文件

生成密钥对

使用gpg之前需要先创建一个密钥对

gpg --gen-key

这样会生成一对密钥,私钥自己妥善保管,公钥发给其他人。

导出公钥

导出公钥为文件jianlee_gpg.key

gpg --armor --export > jianlee_gpg.key
# --armor 可以使用 -a 缩略形式,把加密后的信息转换为便于传送的ASCII码。
# --export 导出公钥

上面的文件 jianlee_gpg.key 就是我的公钥,可以传送给任何人,别人使用这个公 钥加密信息我都可以使用自己的私钥解密。

导入公钥

我们可能需要保存很多不同的公钥,gnupg提供一个文件存放公钥。默认是 ~/.gnupg/pubring.gpg 。这样导入一个公钥:

gpg --import jianlee_gpg.key

查看公钥:

gpg -kv

使用GnuPG加解密文件

我在jianlee机器上生成公钥jianlee_gpg.key,并传送给dev3-30机器。下面操作 中,加密是在dev3-30上用jianlee_gpg.key公钥,然后把加密后的文件传送给 jianlee主机;解密操作是jianlee主机使用自己的私钥解密。

加密文件

[root@dev3-30 ~]# gpg -kv
/root/.gnupg/pubring.gpg
------------------------
pub   1024D/1872824A 2009-04-10
uid                  李建 (李建的个人通讯密钥) <lijian.gnu@gmail.com>
sub   2048g/26A253C0 2009-04-10
[root@dev3-30 ~]# gpg -ea -r 1872824A /etc/passwd
gpg: 26A253C0:没有证据表明这把密钥真的属于它所声称的持有者

pub  2048g/26A253C0 2009-04-10 李建 (李建的个人通讯密钥) <lijian.gnu@gmail.com>
 主钥指纹: 5B44 7EBE 7C70 A386 E405  7B06 7517 4AB3 1872 824A
 子钥指纹: 0F81 4C99 B878 3092 4F7E  FF16 516A D760 26A2 53C0

这把密钥并不一定属于用户标识声称的那个人。如果您真的知道自
己在做什么,您可以在下一个问题回答 yes。

无论如何还是使用这把密钥吗?(y/N)y
文件‘/etc/passwd.asc’已存在。 是否覆盖?(y/N)y
-e 等同 --encrypt,加密
-a 等同 --armor,使用ASCII形式
-r 等同 --recipient,指定信息接受者,就是指定公钥

使用 -a 参数(ASCII形式)通常是使用email传递加密信息的情况,如果传递信息 的协议可以处理二进制,就不需要使用这个参数。二进制形式占用空间会小点。

[root@dev3-30 ~]# ll /etc/passwd*
-rw-r--r-- 1 root root 2161 04-09 16:58 /etc/passwd  # 源文件
-rw-r--r-- 1 root root 2118 04-09 15:10 /etc/passwd-
-rw-r--r-- 1 root root 2062 04-10 10:24 /etc/passwd.asc # ASCII加密文件
-rw-r--r-- 1 root root 1452 04-10 10:34 /etc/passwd.gpg # 二进制加密文件

解密文件

root@jianlee:~/lab# scp dev3-30:/etc/passwd.gpg  /tmp/
passwd.gpg                               100% 1452     1.4KB/s   00:00
root@jianlee:~/lab# gpg -o passwd.dev3-30 -d /tmp/passwd.gpg
...
root@jianlee:~/lab# cat passwd.dev3-30
...