1 概述

工作中,可以用加密的工具对数据进行加密,linux系统有两款加密工具,openssl enc 和 gpg

本文介绍了如何用gpg(GNU Privacy Guard)实现对称和非对称的加密

2. 对称加密

.对称加密file文件,选项是-c

gpg  -c file

这里需要输入一个密码,解密也是用同一密码进行解密

解密文件

gpg  -o file -d file.gpg

这里的file可以自己指定名称,-o是生成新文件,-d是解密

注意,虽然可以生成加密文件,但是我的出现了如下的三个报错,第一个问题解决

[root@localhost ~]#gpg -c aa
#这个文件没有找到不知道从哪里获取这个文件
can't connect to `/root/.gnupg/S.gpg-agent': No such file or directory
#以下的这两报错如果在6的桌面端打开终端,在运行生成的命令就不会报错
Xlib:  extension "RANDR" missing on display "localhost:10.0".
Xlib:  extension "RANDR" missing on display "localhost:10.0".

3. 非对称加密

使用gpg工具实现公钥加密过程如下

.在hostB主机上用公钥加密,在hostA主机上解密

a.在hostA主机上生成公钥/私钥对

b.把A的公钥导出来

c.把A的公钥发送给需要加密数据给A的机器上,如hostB

d.在hostB主机上用A公钥加密文件file,并把加密后的file文件发给A

e.在hostA主机上解密file

3.1 hostA生成密钥

gpg   --gen-key

这一步只需要在需要别的主机生成只有自己能加密文件的机器上才需要生成钥匙对

如果只是用其他主机的公钥来机密文件,该主机可以不生成自己的公钥和私钥对

这里最后还会提示输入一个密码,这个密码是用来加密的私钥的,当要解密文件的时候,要输入该密码,建议是8位数

最后还是需要敲入大量的字符,让机器生成随机数。这里建议不要在终端上操作,否则会很慢,

直接在物理机上操作,生成密钥对的速度就很快

3.2 查看钥匙对

生成钥匙后,在hostA主机上查看钥匙对

查看公钥列表

gpg  --list-keys

查看私钥列表

gpg --list-secret-key

3.3 导出公钥

在hostA主机上导出公钥,命名为sunny.pubkey

这一步一定是在gpg --gen-key生成后,才会有公钥可以导出,否则没有执行gpg  --gen-key的话,就没有钥匙产生

一台机器上可以通过gpg  --gen-key生成多把钥匙,然后用gpg -a 可以把所有的钥匙都导出来

gpg  -a --export -o sunny.pubkey

注意,私钥也可以导出,但是一般不导出来,自己主机保留

gpg -a --export-secret-keys -o sunny6a.prikey

3.4 发送公钥给需要加密的机器

从hostA主机上复制公钥文件到需加密的B主机上

scp  sunny.pubkey   hostB

3.5 加密文件

使用gpg工具实现公钥加密文件

3.5.1 导入钥匙

在hostB主机上导入公钥

gpg   --import  sunny.pubkey

注意 其他主机(如hostA)私钥也可以导入,方法和导出公钥一样,sunny6a.prikey是私钥名称,如下

gpg --import sunny6a.prikey

3.5.2 加密文件

用从hostA主机导入的公钥,加密hostB主机的文件file,生成  file.gpg

在B上用A的公钥进行加密文件,这样加密的文件,只有A才能解密,因为只有A有自己的私钥

注意,以下-r 选项后面的key是不带后缀的公钥名称,即用gpg --list-key查看到的uid

gpg  -e -r  sunny   file

3.5.3 发送加密后的文件给主机A

复制加密文件file.gpg到hostA主机

scp   file.gpg   hostA

3.6 解密文件

在hostA主机解密文件

gpg  -d file.gpg
gpg  -o file -d file.gpg

加了-o选项后,可以将解密后的内容重定向到新的文件,解密的时候,系统会自动识别用该主机的哪把私钥进行加密

3.7 删除钥匙

3.7.1 仅删除公钥

.在B上删除公钥和私钥,删除别的地方导进来的key,这个步骤是在别的地方导入的时候做的,

不能直接删除自己机器上的公钥,自己机器上的公钥要删除,首先要删除私钥,才能在删除公钥

gpg  --delete-keys wangxiaochun

3.7.2 删除公钥和私钥

如果没有导入私钥,这里就不会有私钥,一般私钥不给别人,是通过gpg  --gen-key产生,才会有私钥

要删除有生成公钥和私钥对的机器

先删除私钥

gpg   --delete-secret-keys sunny
gpg  --delete-keys  sunny

4 总结

gpg加密的选项很丰富,这里仅仅介绍了最基本的选项,如需其他内容,请用man gpg进行查看