gpg数据加密解密实例
公钥加密也称为非对称加密,公钥是成对生成的。服务器将自己的公钥公开任何主机都可以得到此公钥,私钥只能自己保存。主机使用服务器的公钥对数据进行加密,然后将数据发送给服务器,此时的数据就只有服务器的私钥可以解密。这样即使别人窃取来了数据没有私钥也无法对数据进行解密。
实验场景:CentOS7的passwd文件需要通过公网传送给CentOS6服务器,如何保证passwd文件不被公网上的恶意用户窃取?公钥加密就是一个比较好的办法。
CentOS7使用CentOS6的公钥将passwd文件进行加密,加密后的数据只有CentOS6的私钥可以界面,而拥有私钥的也只有CentOS6自己。这样即使文件在公网上恶意用户窃取也无法进行解密,保障了数据通信的安全。
实验说明:在实验当中全部使用内网环境模拟数据在公网的传输。
一、公钥的创建
分别在CentOS7与CentOS6上创建各自的公钥与私钥
使用gpg --gen-key
创建公钥与私钥。创建过程中会提示你选择各种参数。我在下图中都做了详解
CentOS6与CentOS7的创建方式是一样的,所以在两边用一样的方式不一样的名称创建两个不同的密钥对。
二、分别查看CentOS6与CentOS7中生成的公钥私钥
gpg --list-key
可以查看当前主机的所有公钥信息,包括自己创建的公钥,与导入的公钥。
三、发送公钥
将CentOS6的中的公钥使用scp
命令复制到CentOS7中
#centos6
[root@CentOS6 /]$ gpg -a --export -o centos6.key #导出centos6的公钥
[root@CentOS6 /]$ scp centos6.key 10.0.0.57:/app #将centos6的公钥复制一份到centos7中
在centos7中导入centos6发来的公钥
#centos7
[root@CentOS7 /]$ gpg --import /app/centos6.key
[root@CentOS7 /]$ gpg: key 1E6D6348: public key "centos6" imported
[root@CentOS7 /]$ gpg: Total number processed: 1
[root@CentOS7 /]$ gpg: imported: 1 (RSA: 1)
查看已经导入的公钥信息,上面那个名为cento7的公钥信息,刚刚本机创建的公钥。下面centos6时导入后的公钥信息。
四、加密文件
使用gpg -e -r centos6
命令对指定的文件进行加密, 随后系统会询问你是否使用这个公钥加密?输入y
即可。加密完成后会在源文件的目录下有一个同名以gpg结尾的文件,就是加密完成的文件。你可以使用cat
命令查看此文件是一堆乱码。
使用centos6的公钥加密的文件,只能有cento6的私钥解密此文件。而只有centos6自己才有私钥,所以即使别人截获此文件也是无法解密的。
#centos7
[root@CentOS6 /]$ gpg -e -r centos6 /etc/passwd #用centos6的公钥信息加密passwd文件
[root@CentOS6 /]$ Use this key anyway? (y/N) y #系统会会询问你是否使用这个公钥加密,y
[root@CentOS6 /]$ ls /etc/passwd.gpg #加密完成后的文件
[root@CentOS6 /]$ scp /etc/passwd.gpg 10.0.0.57:/app #将加密后的文件传复制到centos6中
五、解密文件
#centos6
[root@CentOS6 /]$ gpg -d /app/passwd.gpg #用自己的私钥解密加密文件,默认输出到屏幕
[root@CentOS6 /]$ gpg -o /app/passwd -d /app/passwd.gpg #用私钥解密并输出到文件中
gpg: encrypted with 1024-bit RSA key, ID D0C0C3D0, created 2017-09-08
"centos6"
六、查看文件
查看文件可以正常显示