前言:


GPG是自由软件基金会开发用于替代商业加密软件PGP的替代品,取名为GnuPG。GPG有许多用途,本文主要介绍文件加密。红帽系列Linux中软件包为gnupg2


对称加密方式:

1、实用gpg完成文件加密

使用方法:gpg -c file 

在弹出页面输入两遍口令即可加密文件,加密后会生成原文件名加.gpg的加密文件,注意此时未加密文件仍然存在,可删除原文件。

wKiom1njQ36iC2qMAAAi3Sbthz4854.png

2、查出加密文件

使用方法:gpg -d 加密文件

在弹出如上图界面输入口令即可查看文件,

    注:在加密本机或其他主机输入一次密码后将记录秘钥,解密不需要再次输入秘钥。加密后的文件为data文件类型,更改文件名后仍可解密,与后缀无关。

3、把加密的文件解密出来

使用方法:gpg -o newfilename -d file.gpg


非对称加密方式:


一、秘钥生成

1.1 在hostA主机上生成公钥/私钥对
    gpg --gen-key

wKiom1njS--zRJ9yAADHxZALgjA691.png

选择加密算法界面,这里选择1默认加密和证书都使用RSA算法。

1.2 设定密码长度

wKioL1njSc6ha99qAAA25q--90E615.png

输入秘钥长度,越长越安全。这里直接回车默认2048位。

1.3 设定密码有效期

wKiom1njTejDEfM7AAB3qrf4nVA476.png

如确定秘钥可以妥善管理可以选择“0”,永不过期。

1.4 输入姓名邮箱信息

wKiom1njUJDg0nmOAADBV6-Ij_Q102.png

1.5 在弹出框内输入加密私钥口令

1.6系统就开始生成密钥

    如使用图形界面这时需多做些琐事(像是敲打键盘、移动鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。

    如无图形界面需借助工具rng-tools解决(yum安装),新开终端rngd -r /dev/urandom,(Ubuntu其命令为:rng -r /dev/urandom

1.7生成秘钥成功

wKiom1njVhySkb4bAAAucysv-Ho652.png

字符串"9916CED6",这是"用户ID"的Hash字符串,可以用来替代"用户ID"。

二、秘钥管理

2.1 查看秘钥

wKiom1njWJ7SRDydAABvw37A-lU943.png

2.2 删除秘钥及撤销证书

#删除列表中某公钥,需先删除私钥
gpg --delete-keys [用户ID] #用户名ID可以为hash码或邮箱、用户名
#删除列表中某私钥
gpg --delete-secret-keys [用户ID] 
#撤销证书
gpg --gen-revoke [用户ID]

2.3 上传公钥到服务器

例:gpg --keyserver hkp://keys.gnupg.net --send-keys 9916CED6
下载gpg --keyserver hkp://keys.gnupg.net --recv 9916CED6

由于公钥服务器没有检查机制,任何人都可以用你的名义上传公钥,所以没有办法保证服务器上的公钥的可靠性。通常,你可以在网站上公布一个公钥指纹,让其他人核对下载到的公钥是否为真。fingerprint参数生成公钥指纹。

gpg --fingerprint [用户ID]

2.4 生成公钥回收证书: (用于作废密钥)

  生成回收证书:    gpg --output revoke.asc --gen-revoke 9916CED6
  上传到服务器上:gpg --keyserver hkp://keys.gnupg.net --send-keys 9916CED6




三、 实现公钥加密传输

3.1  在hostA主机上导出公钥到wang.pubkey

gpg -o testgpgp-pubkey --export 9916CED6  #导出指定公钥
#gpg -a --export -o wang.pubkey  #导出所有公钥
gpg -o testgpg-subkey --export-secret-keys #导出指定私钥

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

scp wang.pubkey hostB:

3.2  在需加密数据的hostB主机上生成公钥/私钥对

gpg --list-keys
gpg --gen-key

hostB主机上导入公钥

gpg --import wang.pubkey
gpg --list-keys

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

gpg -o file.gpg  -e -r 9916CED6 file
file file.gpg

  复制加密文件到hostA主机

scp fstab.gpg hostA:

3.4  在hostA主机解密文件

gpg -d file.gpg #查看
gpg -o file -d file.gpg #解密生成新文件


四、签名&验证签名

4.1 对文件签名

不加密文件,只需要对文件签名,表示这个文件确实是本人发出的。sign参数用来签名。

 gpg --sign demo.txt

运行上面的命令后,当前目录下生成demo.txt.gpg文件,这就是签名后的文件。这个文件默认采用二进制储存,

4.2 如果想生成ASCII码的签名文件,可以使用clearsign参数。 

 gpg --clearsign demo.txt

运行上面的命令后 ,当前目录下生成demo.txt.asc文件,后缀名asc表示该文件是ASCII码形式的。

4.3 如果想生成单独的签名文件,与文件内容分开存放,可以使用detach-sign参数。

gpg --detach-sign demo.txt

运行上面的命令后,当前目录下生成一个单独的签名文件demo.txt.sig。该文件是二进制形式的,如果想采用ASCII码形式,要加上armor参数。

gpg --armor --detach-sign demo.txt

4.4 验证签名

收到别人签名后的文件,需要用对方的公钥验证签名是否为真。verify参数用来验证。

 gpg --verify demo.txt.asc demo.txt