linux 下的加密和解密详解

我们在网上的发送的邮件时明文的,可以被截获,被我们的服务商获得,甚至可以被搜索出来,这时一件很恐怖的事情,如果是一般的嘘寒问暖的信息也就罢了。若是私信就危险了,所以呢,加密就很有必要了!!

什么是加/解密

  • 发送方 : 明文 -> 密文

    -Tarena ==> 加密 ==> 25 31 24 23 46 31

  • 接收方 : 密文 -> 明文

    -25 31 24 23 46 31==>解密 ==>Tarena

加密目的及方式

  • 确保数据的机密性

      -对称加密: 加密/解密用同一个密钥

      -非对称加密: 加密/解密用不同的密钥

  • 保护信息的完整性

       -信息摘要:基于输入的信息生成长度较短,位数固定的散列值

常见的加密算法

  • 对称加密

      -DES ,

      -AES ,

  • 非对称加密

      -RSA ,

      -DSA ,

MD5完整性检验

  -生成md5sum校验工具

  -与软件官方提供的校验值比对

[root@proxy ~]# vim file1

abcdefg

[root@proxy ~]#md5sum file1

e1ce86726d2c8bea4f1398530b43b6f7  file1

使用GPG对称加密方式保护文件

[root@proxy ~]# yum -y install gnupg2   //安装Gnupg2软件包

[root@proxy ~]#gpg --version    //查看版本

GPG使用对称加密算法加密数据的操作

[root@proxy ~]# gpg -c fiel1

根据提示依次输入两次密码,如果在GNOME桌面环境,设置密码的交互界面会是下面的窗口程序


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


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

gpg: 已创建目录‘/root/.gnupg’
gpg: 新的配置文件‘/root/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/root/.gnupg/gpg.conf’里的选项于此次运行期间未被使用

gpg: 钥匙环‘/root/.gnupg/pubring.gpg’已建立

[root@proxy ~]# cat file1.gpg   //查看加密数据为乱码

��@�E�ջ��"��zj��Io'��>L,J����JI_��_�Yy}��>

使用GPG对加密文件进行解密操作

[root@proxy ~]# scp file1.gpg 192.168.4.100:/root  //把加密文件拷贝到客户机 

[root@client ~]# gpg -d file1.gpg > file1  //解密后保存

gpg: CAST5 加密过的数据
gpg: 以 1 个密码加密
gpg: 警告:报文未受到完整的保护

[root@client ~]# cat file1

abcdefg                    //查看解密后的文件

使用GPG非对称加密方式保护文件

生成密钥对: gpg --gen-key

接收方UserA创建自己的公钥.私钥对

[root@clinet ~]# gpg --gen-key

  1. … …
  2. 请选择您要使用的密钥种类:
  3. (1) RSA and RSA (default)                            //默认算法为RSA
  4. (2) DSA and Elgamal
  5. (3) DSA (仅用于签名)
  6. (4) RSA (仅用于签名)
  7. 您的选择?                                             //直接回车默认(1)
  8. RSA 密钥长度应在 1024 位与 4096 位之间。
  9. 您想要用多大的密钥尺寸?(2048)                             //接受默认2048位
  10. 您所要求的密钥尺寸是 2048
  11. 请设定这把密钥的有效期限。
  12. 0 = 密钥永不过期
  13. <n> = 密钥在 n 天后过期
  14. <n>w = 密钥在 n 周后过期
  15. <n>m = 密钥在 n 月后过期
  16. <n>y = 密钥在 n 年后过期
  17. 密钥的有效期限是?(0)                                         //接受默认永不过期
  18. 密钥永远不会过期
  19. 以上正确吗?(y/n)y                                         //输入y确认

  20. You need a user ID to identify your key; the software constructs the user ID
  21. from the Real Name, Comment and Email Address in this form:
  22. "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
  23. 真实姓名:UserA
  24. 电子邮件地址:UserA@tarena.com
  25. 注释:UserA
  26. 您选定了这个用户标识:
  27. UserA (UserA) <UserA@tarena.com>

  28. 更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?O         //输入大写O确认
  29. 您需要一个密码来保护您的私钥。

  30. 我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
  31. 鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。



  32. gpg: 正在检查信任度数据库
  33. gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型
  34. gpg: 深度:0 有效性: 1 已签名: 0 信任度:0-,0q,0n,0m,0f,1u
  35. pub 2048R/421C9354 2017-08-16
  36. 密钥指纹 = 8A27 6FB5 1315 CEF8 D8A0 A65B F0C9 7DA6 421C 9354
  37. uid UserA (UserA) <UserA@tarena.com>
  38. sub 2048R/9FA3AD25 2017-08-16

列出公钥 ,查看公钥环 gpg --list-keys

列出所拥有的公钥:他们自己的公钥以及从与之通信的其他人那里导入的任何公钥

[root@client ~]# gpg --list-keys

/root/.gnupg/pubring.gpg
------------------------
pub   2048R/9A61D530 2018-05-15
uid                 UserA (UserA) <UserA@tarena.com>
sub   2048R/03489C24 2018-05-15

[root@client ~]# gpg -a --exprot UserA > /tmp/UserA.pub  /--exprot的作用是导出密钥 -a的作用是导出的密钥存储为ASCII格式

[root@client ~]# scp /tmp/UserA.pub 192.168.4.5:/tmp/ //将密钥传给UserB

使用GPG命令结合 --import选项导入发送方的公钥信息,以便在加密文件时指定对应的公钥

[root@proxy ~]# gpg --import /tmp/UserA.pub

gpg: 密钥 C9380AC4:公钥“UserA (UserA) <UserA@tarena.com>”已导入
gpg: 合计被处理的数量:1

gpg:           已导入:1  (RSA: 1)

UserB使用导入的公钥加密数据,并把加密后的数据传给UserA

[root@proxy ~]# echo "I love NB" > haha.txt

[root@proxy ~]#gpg -e -r UserA haha.txt

gpg: BFD6B5F5:没有证据表明这把密钥真的属于它所声称的持有者

pub  2048R/BFD6B5F5 2018-05-15 UserA (UserA <UserA@tarena.com>
 主钥指纹: 9FBE 7A97 624F 8273 B4AC  636A 81EF F0AC C938 0AC4
 子钥指纹: 9A63 AD39 343C FE4A EBB4  B66E F2B6 8412 BFD6 B5F5

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

无论如何还是使用这把密钥吗?(y/N)y

[root@proxy ~]# scp haha.txt.gpg 192.168.4.100:/root   //加密的数据传给UserA

[root@client ~]# gpg -d haha.txt.gpg > love.txt

您需要输入密码,才能解开这个用户的私钥:“UserA(UserA) <UserA@tarena.com>”
2048 位的 RSA 密钥,钥匙号 BFD6B5F5,建立于 2018-05-15 (主钥匙号 C9380AC4)

gpg: 由 2048 位的 RSA 密钥加密,钥匙号为 BFD6B5F5、生成于 2018-05-15
      “UserA (UserA) <UserA@tarena.com>”
[root@client ~]# cat love.txt   //获得解密后的文件内容

I love you

[root@client ~]# ls /root/.gnupg  //产生的密钥放在这个文件里面

[root@client ~]# rm -rf .gnupg/    //删除密钥

[root@client ~]# reset            //如果终端不能用了,就执行reset重置

GPG签名和认证:签名的目的,主要时确保来源的数据正确

使用GPG的签名机制,检查数据来源的正确性。使用私钥签名的文件,是可以使用对应的公钥验证签名的,只要验证成功,则说明这个文件一定是出自对应的私钥签名,除非私钥被盗,否则一定能证明这个文件来自于某个人!

[root@client ~]# tar zcf log.tar  /var/log    //建立测试软件包

[root@client ~]# gpg -b log.tar            //创建分离式数字签名

[root@client ~]# ls -lh log.tar*UserA.pub

-rw-r--r--. 1 root root 914K 5月  15 14:42 log.tar
-rw-r--r--. 1 root root  287 5月  15 14:43 log.tar.sig

[root@client ~]# gpg -a --export UserA > /tmp/UserA.pub //把公钥导出

[root@client ~]# scp /tmp/UserA.pub 192.168.4.5:/tmp/     

[root@client ~]# scp log.tar* 192.168.4.5:/root    /将签名文件与签名传给UserB
log.tar                                       100%  914KB 130.9MB/s   00:00    
log.tar.sig                                   100%  287   683.8KB/s   00:00

[root@proxy ~]# gpg --import /tmp/xxxxx.pub //导入公钥

[root@proxy ~]# gpg --verify log.tar.sig log.tar  在proxy上验证签名

gpg: 于 2018年05月15日 星期二 14时43分28秒 CST 创建的签名,使用 RSA,钥匙号 C9380AC4
gpg: 完好的签名,来自于“UserA (UserA) <UserA@tarena.com>”
gpg: 警告:这把密钥未经受信任的签名认证!
gpg:       没有证据表明这个签名属于它所声称的持有者。
主钥指纹: 9FBE 7A97 624F 8273 B4AC  636A 81EF F0AC C938 0AC4







r

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

linux 下的加密和解密详解

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭