信息加密和解密

信息传递的风险

信息传递无时无刻不在发生,包括我们的信件往来,浏览网页,社交软件等等。然而在传递的过程中,会面临各种各样的潜在的风险,比如通过开发人员,出差人员,离职人员,还有我们的合作伙伴,或者商业间谍,电脑黑客,流程失控等等

加/解密

因为信息传递风的风险,所以我们发送方必须对信息进行加密,也就是把明文变成密文,另一方也就是接收方需要再对信息进行解密,也就是把密文在转换成明文。

常用的加密方式和目的:

保证数据的机密性采用

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

加密算法有 DES(Data Encryption Standard)

                      AES(Advanced Encryption Standard)

非对称加密:加/解密用不同的密钥(公钥/私钥)

算法有  RSA(Rivest Shamirh  Adleman)

              DSA(Digital  Signature Algorithm)

保护信息的完整性用

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

Hash散列技术  根据输入的文本(长度不限) 生成固定的128位的摘要文本

MD5  Message  Digest Algorithm 5

SHA Secure Hash Algorithm

GnuPG,GNU Privacy Guard

官网:http://www.gnupg.org/

最流行的数据加密,数字签名工具软件

[root@mserver ~]# gpg --version
...
Home: ~/.gnupg
支持的算法:
公钥:RSA, ?, ?, ELG, DSA
对称加密:IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256,
     TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256
散列:MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
压缩:不压缩, ZIP, ZLIB, BZIP2

 GnuPG 对称加密 

--symmetric 或 -c     解密  --decrypt 或 -d


[root@server51 ~]# useradd usera
[root@server51 ~]# useradd userb
[root@server51 ~]# echo 123456 | passwd --stdin usera 
[root@server51 ~]# echo 123456 | passwd --stdin userb
[root@server51 ~]# ssh -X usera@localhost 
[usera@server51 ~]$ echo "dui chen jia mi "  >  a.txt
[usera@server51 ~]$ cat a.txt 
dui chen jia mi 
[usera@server51 ~]$ gpg -c a.txt 
        ┌─────────────────────────────────────────────────────┐
        │ 请输入密码                                          │
        │                                                     │
        │                                                     │
        │ Passphrase_1234567890________//输入加密密码__ _______ │
        │                                                     │
        │	<OK>                             <Cancel>     │
        └─────────────────────────────────────────────────────┘

gpg: 已创建目录‘/home/usera/.gnupg’
gpg: 新的配置文件‘/home/usera/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/home/usera/.gnupg/gpg.conf’里的选项于此次运行期间未被使用
gpg: 钥匙环‘/home/usera/.gnupg/pubring.gpg’已建立
[usera@server51 ~]$ cp a.txt.gpg  /tmp/
[userb@server51 ~]$ cat /tmp/a.txt.gpg 
�˕x�7���,��}�����.h�@�WH<]
[userb@server51 ~]$ gpg -d /tmp/a.txt.gpg 
gpg: 已创建目录‘/home/userb/.gnupg’
gpg: 新的配置文件‘/home/userb/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/home/userb/.gnupg/gpg.conf’里的选项于此次运行期间未被使用
gpg: 钥匙环‘/home/userb/.gnupg/secring.gpg’已建立
会出现对话框提示密码
gpg: CAST5 加密过的数据
gpg: 以 1 个密码加密
dui chen jia mi                             //已解密
gpg: 警告:报文未受到完整的保护

GnuPG 非对称/解密

接收方:创建密钥对  gpg  --gen-key     导出公钥:gpg --export、--armor 或 -a

发送方 :导入公钥  gpg --import

加密:gpg  --encrypt 或 -e        --recipient 或 -r      指定目标用户(创建的真实姓名)   文件

解密:gpg --decrypt 或 -d   需要输入私钥密码

[userb@server51 ~]$ gpg --gen-key
gpg: 已创建目录‘/home/userb/.gnupg’
gpg: 新的配置文件‘/home/userb/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/home/userb/.gnupg/gpg.conf’里的选项于此次运行期间未被使用
gpg: 钥匙环‘/home/userb/.gnupg/secring.gpg’已建立
gpg: 钥匙环‘/home/userb/.gnupg/pubring.gpg’已建立
请选择您要使用的密钥种类:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (仅用于签名)
   (4) RSA (仅用于签名)
您的选择?                                //默认即可,直接回车
RSA 密钥长度应在 1024 位与 4096 位之间。    //可自己定义,需要记住
您想要用多大的密钥尺寸?(2048)
您所要求的密钥尺寸是 2048 位
请设定这把密钥的有效期限。
         0 = 密钥永不过期
      <n>  = 密钥在 n 天后过期
      <n>w = 密钥在 n 周后过期
      <n>m = 密钥在 n 月后过期
      <n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 
密钥永远不会过期
以上正确吗?(y/n) y                        //输入y确定

真实姓名:123456
姓名不可以用数字开头
真实姓名:guo
姓名至少要有五个字符长
真实姓名:guo123
电子邮件地址:123456
电子邮件地址无效
电子邮件地址:[email protected]
注释:123
您选定了这个用户标识:
    “guo123 (123) <[email protected]>”

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

会弹出对话框,提示输入密码(这里为123456790)
...
公钥和私钥已经生成并经签名。
...

[userb@server51 ~]$ gpg --export  -a > /tmp/userb.pub    //导出公钥到文件中
[usera@server51 ~]$ gpg --import  /tmp/userb.pub       //usera用户导入公钥
gpg: 已创建目录‘/home/usera/.gnupg’
gpg: 新的配置文件‘/home/usera/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/home/usera/.gnupg/gpg.conf’里的选项于此次运行期间未被使用
gpg: 钥匙环‘/home/usera/.gnupg/secring.gpg’已建立
gpg: 钥匙环‘/home/usera/.gnupg/pubring.gpg’已建立
gpg: /home/usera/.gnupg/trustdb.gpg:建立了信任度数据库
gpg: 密钥 98FA8D5F:公钥“guo123 (123) <[email protected]>”已导入
gpg: 合计被处理的数量:1
gpg:           已导入:1  (RSA: 1)
[usera@server51 ~]$ ls ./.gnupg/
gpg.conf  pubring.gpg  pubring.gpg~  secring.gpg  trustdb.gpg
[usera@server51 ~]$ echo 'fei dui chen jia mi '  >  test.txt
[usera@server51 ~]$ gpg -e -r  guo123 test.txt 
无论如何还是使用这把密钥吗?(y/N)y
[usera@server51 ~]$ cp test.txt.gpg  /tmp/
[userb@server51 ~]$ cat /tmp/test.txt.gpg 
�
  ���޹9A��7�G�]�a�6���L����M���0]�....
[userb@server51 ~]$ gpg -d /tmp/test.txt.gpg  > 2.txt

您需要输入密码,才能解开这个用户的私钥:“guo123 (123) <[email protected]>”
2048 位的 RSA 密钥,钥匙号 B9391241,建立于 2018-12-29 (主钥匙号 98FA8D5F)

gpg: 由 2048 位的 RSA 密钥加密,钥匙号为 B9391241、生成于 2018-12-29
      “guo123 (123) <[email protected]>”                //刚才私钥保护密码
[userb@server51 ~]$ cat 2.txt 
fei dui chen jia mi 

GPG软件签名和验证

软件签名和验证过程

软件官方以私钥对软件包进行数字签名

用户下载软件包和官方公钥

以官方公钥验证软件签名,确保数据来源正确

对软件包建立签名文件  分离式签名  --detach-sign 或 -b

验证签名   --verify

[userb@server51 ~]$ vim qianming.txt
123456
654321
000000
[userb@server51 ~]$ gpg -b qianming.txt 

您需要输入密码,才能解开这个用户的私钥:“guo123 (123) <[email protected]>”
2048 位的 RSA 密钥,钥匙号 98FA8D5F,建立于 2018-12-29

弹出对话框,提示输入密码
[userb@server51 ~]$ ls
2.txt  perl5  qianming.txt  qianming.txt.sig               //.sig生成的签名文件
[userb@server51 ~]$ cp qianming.*  /tmp                    //需要签名文件和源文件同时导出
[usera@server51 ~]$ gpg --verity  /tmp/qianming.txt.sig        //usera持有公钥进行验证
gpg: invalid option "--verity"
[usera@server51 ~]$ gpg --verify  /tmp/qianming.txt.sig 
gpg: 于 2018年12月29日 星期六 17时24分41秒 CST 创建的签名,使用 RSA,钥匙号 98FA8D5F
gpg: 完好的签名,来自于“guo123 (123) <[email protected]>”
gpg: 警告:这把密钥未经受信任的签名认证!
gpg:       没有证据表明这个签名属于它所声称的持有者。
主钥指纹: 8D92 C393 C5B5 55EA EA02  0AE9 6006 BC0F 98FA 8D5F
[root@server51 ~]# vim /tmp/qianming.txt          //以root身份对文件进行改动
123456
654321
000000
aaa
[usera@server51 ~]$ gpg --verify  /tmp/qianming.txt.sig     //usera用户进行验证,签名已经损坏
gpg: 于 2018年12月29日 星期六 17时24分41秒 CST 创建的签名,使用 RSA,钥匙号 98FA8D5F
gpg: 已损坏的签名,来自于“guo123 (123) <[email protected]>”

猜你喜欢

转载自blog.csdn.net/weixin_43800781/article/details/85339329