问题
本案例要求采用gpg工具实现加/解密及软件签名等功能,分别完成以下任务:
1)检查文件的MD5校验和
2)使用GPG实现文件机密性保护,加密和解密操作
3)使用GPG实现软件包的完整性校验,检查软件包签名
方案
使用两台RHEL6虚拟机,加密操作主要在svr5上完成,而pc205作为接收方、测试用客户机、软件签名发布用机,如图-1所示。

图-1
步骤
实现此案例需要按照如下步骤进行。
步骤一:检查文件的MD5校验和
1) 查看文件改动前的校验和,复制为新文件其校验和不变

[root@svr5 ~]# vim file1.txt
abcdef
123456779
[root@svr5 ~]# cp file1.txt file2.txt
[root@svr5 ~]# cat file1.txt > file3.txt
[root@svr5 ~]# md5sum file?.txt                //文件内容一致,则校验和也不变
b92aa0f8aa5d5af5a47c6896283f3536  file1.txt
b92aa0f8aa5d5af5a47c6896283f3536  file2.txt
b92aa0f8aa5d5af5a47c6896283f3536  file3.txt

2) 对文件内容稍作改动,再次检查校验和,会发现校验和已大不相同

[root@svr5 ~]# echo "x" >> file1.txt
[root@svr5 ~]# md5sum file?.txt
6be3efe71d8b4b1ed34ac45f4edd2ba7  file1.txt
b92aa0f8aa5d5af5a47c6896283f3536  file2.txt
b92aa0f8aa5d5af5a47c6896283f3536  file3.txt

步骤二:使用GPG对称加密方式保护文件
1) gpg对称加密操作
执行下列操作:

[root@svr5 ~]# gpg -c file2.txt
.. ..

根据提示依次输入两次密码即可。如果是在GNOME桌面环境,设置密码的交互界面会是弹出的窗口程序,如图-2所示:

图-2
如果是在tty终端执行的上述加密操作,则提示界面也是文本方式的,如图-3所示。

图-3
根据提示输入两次口令,加密后的文件(自动添加后缀 .gpg)就生成了,传递过程中只要发送加密的文件(比如 file2.txt.gpg)就可以了。

[root@svr5 ~]# file file2.txt*
file2.txt:     ASCII text
file2.txt.gpg: data                             //传递给其他人时用这个文件
2) gpg对称解密操作
收到加密的文件后,必须进行解密才能查看其内容。
[root@pc205 ~]# head -1 file2.txt.gpg              //未解密查看显示为乱码
X▒ܶn▒-E▒▒0▒▒▒ u▒▒(▒
7>0-▒▒▒,=2▒9[*c\▒{▒/▒▒,▒▒eSx[root@pc205 ~]# gpg -d file2.txt.gpg > file2.txt    //解密后保存
gpg: 3DES 加密过的数据
.. ..                                           //根据提示输入正确密码
gpg: 以 1 个密码加密
gpg: 警告:报文未受到完整的保护[root@pc205 ~]# cat file2.txt                     //查看解密后的文件
abcdef
123456779

步骤三:使用GPG非对称加密方式保护文件
非对称加密/解密文件时,发送方(UserA)以接收方(UserB)的公钥加密文件,接收方以自己的私钥解密,实现过程如下所述。
1)接收方UserB创建自己的公钥、私钥对
执行gpg --gen-key操作,根据提示选择并创建密钥:

[UserB@pc205 ~]$ gpg --gen-key
gpg (GnuPG) 2.0.14; Copyright (C) 2009 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.请选择您要使用的密钥种类:(1) RSA and RSA (default)(2) DSA and Elgamal(3) DSA (仅用于签名)(4) RSA (仅用于签名)
您的选择?                                            //直接回车默认(1)
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)                           //接受默认2048位
您所要求的密钥尺寸是 2048 位
请设定这把密钥的有效期限。0 = 密钥永不过期<n>  = 密钥在 n 天后过期<n>w = 密钥在 n 周后过期<n>m = 密钥在 n 月后过期<n>y = 密钥在 n 年后过期
密钥的有效期限是?(0)                                     //接受默认永不过期
密钥永远不会过期
以上正确吗?(y/n)y                                         //输入y确认You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
真实姓名:UserB
电子邮件地址:UserB@tarena.com
注释:User B
您选定了这个用户标识:“UserB (User B) <UserB@tarena.com>”更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?o    //输入o确认
您需要一个密码来保护您的私钥。can't connect to `/home/UserB/.gnupg/S.gpg-agent': 没有那个文件或目录
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。//此处根据提示做些写操作,比如dd命令
gpg: /home/UserB/.gnupg/trustdb.gpg:建立了信任度数据库
gpg: 密钥 421C9354 被标记为绝对信任
公钥和私钥已经生成并经签名。gpg: 正在检查信任度数据库
gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型
gpg: 深度:0 有效性:  1 已签名:  0 信任度:0-,0q,0n,0m,0f,1u
pub   2048R/421C9354 2013-08-16
密钥指纹 = 8A27 6FB5 1315 CEF8 D8A0  A65B F0C9 7DA6 421C 9354
uid                  UserB (User B) <UserB@tarena.com>
sub   2048R/9FA3AD25 2013-08-16

2)接收方UserB导出自己的公钥文件
用户的公钥、私钥信息分别保存在pubring.gpg和secring.gpg文件内:

[UserB@pc205 ~]$ gpg --list-keys                        //查看公钥环
/home/UserB/.gnupg/pubring.gpg
------------------------------
pub   2048R/421C9354 2013-08-16
uid                  UserB (User B) <UserB@tarena.com>
sub   2048R/9FA3AD25 2013-08-16[UserB@pc205 ~]$ gpg --list-secret-keys
/home/UserB/.gnupg/secring.gpg                          //查看私钥环
------------------------------
sec   2048R/421C9354 2013-08-16
uid                  UserB (User B) <UserB@tarena.com>
ssb   2048R/9FA3AD25 2013-08-16

使用gpg命令结合–import选项将其中的公钥文本导出,传给发送方UserA:

[UserB@pc205 ~]$ gpg -a --export UserB > /tmp/UserB.pub
[UserB@pc205 ~]$ ftp 192.168.4.5
.. ..
Name (192.168.4.5:UserB): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.
ftp> lcd /tmp/
Local directory now /tmp
ftp> put UserB.pub                       //通过FTP将公钥传给发送方主机
local: UserB.pub remote: UserB.pub
227 Entering Passive Mode (192,168,4,6,59,39).
150 Ok to send data.
226 Transfer complete.
1719 bytes sent in 0.000127 secs (13535.43 Kbytes/sec)
ftp> quit
221 Goodbye.

3)发送方UserA导入接收方的公钥信息
使用gpg命令结合–import选项导入发送方的公钥信息,以便在加密文件时指定接收人来调用对应的公钥。

[UserA@svr5 ~]$ gpg --import /var/ftp/pub/UserB.pub
gpg: 密钥 421C9354:公钥“UserB (User B) <UserB@tarena.com>”已导入
gpg: 合计被处理的数量:1
gpg:           已导入:1  (RSA: 1)
[UserA@svr5 ~]$ echo "I love you ." > tosend.txt
[UserA@svr5 ~]$ gpg -e -r UserB tosend.txt
gpg: 9FA3AD25:没有证据表明这把密钥真的属于它所声称的持有者pub  2048R/9FA3AD25 2013-08-16 UserB (User B) <UserB@tarena.com>主钥指纹: 8A27 6FB5 1315 CEF8 D8A0  A65B F0C9 7DA6 421C 9354子钥指纹: 08EA 5D11 FB25 9AF1 8137  0E47 AD13 F31B 9FA3 AD25这把密钥并不一定属于用户标识声称的那个人。如果您真的知道自
己在做什么,您可以在下一个问题回答 yes。无论如何还是使用这把密钥吗?(y/N)y                    //确认使用此密钥加密文件
[UserA@svr5 ~]$ exit
logout
[root@svr5 ~]# cp /home/UserA/tosend.txt.gpg /var/ftp/tosend.txt.gpg

4)接收方UserB收取加密文件,以自己的私钥解密文件

[UserB@pc205 ~]$ wget ftp://192.168.4.5/tosend.txt.gpg
2013-08-16 15:28:30 (40.8 MB/s) - “tosend.txt.gpg” 已保存 [355]
[UserB@pc205 ~]$ gpg -d tosend.txt.gpg > tosend.txt
您需要输入密码,才能解开这个用户的私钥:“UserB (User B) <UserB@tarena.com>”
2048 位的 RSA 密钥,钥匙号 9FA3AD25,建立于 2013-08-16 (主钥匙号 421C9354)//验证私钥口令
can't connect to `/home/UserB/.gnupg/S.gpg-agent': 没有那个文件或目录
gpg: 由 2048 位的 RSA 密钥加密,钥匙号为 9FA3AD25、生成于 2013-08-16“UserB (User B) <UserB@tarena.com>”
[UserB@pc205 ~]$ cat tosend.txt                    //获得解密后的文件内容
I love you .

步骤四:使用GPG实现软件包的完整性校验,检查软件包签名
1)在pc205上,作者UserB为软件包创建分离式签名
将软件包、签名文件、公钥文件一起发布给其他用户下载,。

[UserB@pc205 ~]$ tar zcf tools-1.2.3.tar.gz /etc/hosts      //建立测试软件包
[UserB@pc205 ~]$ gpg -b tools-1.2.3.tar.gz                 //创建分离式数字签名
[UserB@pc205 ~]$ ls -lh tools-1.2.3.tar.gz* UserB.pub
-rw-rw-r--. 1 UserB UserB 170 8月  17 21:18 tools-1.2.3.tar.gz
-rw-rw-r--. 1 UserB UserB 287 8月  17 21:22 tools-1.2.3.tar.gz.sig
-rw-rw-r--. 1 UserB UserB 1.7K 8月  17 21:26 UserB.pub
[UserB@pc205 ~]$ exit
logout
[root@pc205 ~]# yum -y install vsftpd
[root@pc205 ~]# cp /home/UserB/tools-1.2.3.tar.gz* /var/ftp/
[root@pc205 ~]# cp /home/UserB/UserB.pub /var/ftp/
[root@pc205 ~]# service vsftpd start
为 vsftpd 启动 vsftpd:                      [确定]

2)在svr5上,下载软件包并验证官方签名
下载主机pc205发布的UserB的软件包、签名、公钥,导入UserB的公钥后即可验证软件包的完整性。

[root@svr5 ~]# wget ftp://192.168.4.205/tools-1.2.3*
.. ..
2013-08-17 21:29:46 (31.7 MB/s) - “tools-1.2.3.tar.gz” 已保存 [170]
2013-08-17 21:29:46 (23.3 MB/s) - “tools-1.2.3.tar.gz.sig” 已保存 [287]
[root@svr5 ~]# wget ftp://192.168.4.205/UserB.pub
.. ..
2013-08-17 21:32:27 (208 MB/s) - “UserB.pub” 已保存 [1719]
[root@svr5 ~]# gpg --import UserB.pub                      //导入作者的公钥信息
.. ..
[root@svr5 ~]# gpg --verify tools-1.2.3.tar.gz.sig tools-1.2.3.tar.gz
gpg: 于 2013年08月17日 星期六 21时22分15秒 CST 创建的签名,使用 RSA,钥匙号 421C9354
gpg: 完好的签名,来自于“UserB (User B) <UserB@tarena.com>”
.. ..

Linux 加密与解密应用相关推荐

  1. aes linux加密 windows解密,解决Linux操作系统下DES、AES解密失败的问题

    windows上加解密正常,linux上加密正常,解密时发生如下异常: javax.crypto.BadPaddingException: Given final block not properly ...

  2. 如何在 Linux 上用密码加密和解密文件

    age 是一个简单的.易于使用的工具,允许你用一个密码来加密和解密文件.age 能帮你这样做.它是一个小型且易于使用的工具,允许你用一个密码加密一个文件,并根据需要解密. age 是一个简单的.易于使 ...

  3. linux加密解密基础、PKI及SSL、创建私有CA

    linux加密解密基础.PKI及SSL.创建私有CA 1.加密解密基础:            数据在网络中传输过程中要保证三个要点: (1)数据的完整性:防止数据在传输过程中遭到未授权用户的破坏或篡 ...

  4. aes解压命令 linux,Linux使用tar和openssl加密和解密文件

    欢迎,来自IP地址为:110.247.246.119 的朋友 如果系统中保存有机密和敏感信息,那么采用额外的加密防护措施是十分必要的,尤其是这些文件需要在网络上传输时,对文件进行加密就显得十分重要. ...

  5. linux 加密文件,如何运用OpenSSL 对文件进行加密和解密

    导读 我们在平时的 Linux 运维管理的时候,经常会进行各种数据备份任务.将数据导出然后打包.通常在安全性要求比较高的环境下,我们可以借助 OpenSSL 工具对打包后的数据进行加密,这样能进一步的 ...

  6. Linux加密解密 及使用openssl工具实现CA

    互联网迅速发展的今天,数据安全凸显其重要性 1.常见Linux加密方式 对称加密 公钥加密(非对称加密) 单向加密 2.详解加密解密 2.1 对称加密 对称加密算法: DES(56bits) AES( ...

  7. Linux下使用GPG(GnuPG)加密及解密文件

    文章目录 Linux下使用GPG(GnuPG)加密及解密文件 1. 简介 2.环境及版本 3.GPG公钥生成 4.查看公钥 5.查看私钥 6.导出公钥 7.导出私钥 8.加密文件 本机加密 其他电脑加 ...

  8. linux 怎么不检查gpg,如何在Linux上使用GPG加密和解密文件 | MOS86

    如何在Linux上使用GPG加密和解密文件... GnuPrivacy Guard (GPG) allows you to securely encrypt files so that only th ...

  9. Linux下使用Vim/Vi给文件加密和解密

    本文介绍在Linux下使用Vim/Vi给文件加密和解密的简单方法,Vim的文件加密功能不是很强,但比较实用,因为不必要借助其他软件即可实现. 一. 用 Vim/Vi 加密文件: 用 Vim/Vi 加密 ...

最新文章

  1. angularJS 全选反选批量删除
  2. 20应用统计考研复试要点(part28)--简答题
  3. 服务器winsxs文件夹怎么清理工具,winsxs,教您winsxs文件夹清理方法
  4. CryptoJS -- JS加密算法库
  5. [WPF自定义控件] 开始一个自定义控件库项目
  6. 极光推送指定用户推送_苹果推送iOS 12.1.4和macOS 10.14.3修复FaceTime 国内用户可酌情...
  7. 推动5G+北斗高精度定位系统更好赋能千行百业
  8. 有没有谁做过完整的ptf上传下载
  9. 关于Windows-Linux双系统的启动引导
  10. linux cgroup、kubernetes limit
  11. c语言用while实现输出加法口诀表,「加法口诀」C语言编写一个加法口诀表 - 金橙教程网...
  12. HTML如何返回上一页
  13. 学ios 需要学html5me,针对iOS平台移植Flash内容的指导教程(1)
  14. ENVI标准格式文件转换为.tif文件——基于ENVI库函数
  15. 请保持内心中最后一点良知
  16. er图 navicat_Navicat 怎么生成ER图表
  17. 深度解读:小红书热搜词底层逻辑,助力小红书笔记上热门
  18. Vue项目——Vue开发掘金WebApp(仿掘金App)
  19. React/ReactNative 状态管理: rematch 如何使用
  20. 【致远OA接口】获取接口凭证token

热门文章

  1. css设overflow:hiden行内元素会发生偏移的现象
  2. 思特奇杯 结营大作业
  3. 楼道扶手智能清洁装置的制作分享
  4. 基于RWEQ模型的土壤风蚀模数估算及其变化归因分析
  5. 11.Excel vba开发-根据已有名称,创建新建表格
  6. 负317是几位数在计算机课中,计算机应用基础数据在计算机中的表示ppt课件
  7. czl蒻蒟的OI之路16
  8. 5.1 Runner构建优化
  9. 【pycharm】英文输入法变成全角字符无法输入
  10. [整理]Mac安装Meld,并使用Meld作为git diff tool的工具