加密方式

1、对称加密:加解密使用相同的密钥。算法:DES/ 3DES / AES。优点,加密效率高。缺点,密钥的传输和保管不方便。

2、非对称加密:公钥加密、私钥解密。算法:RSA。优点,密钥传输保管方便。缺点,加密效率低。

3、单向加密:加密只能向一个方向进行,不能回推。哈希算法。MD5SHA

 一、使用gpg实现对称加密

gpg  -c +文件  代表对文件进行加密命令

gpg+文件    代表对文件进行解密

1#  [root@fanlj ~]# ssh -X fanlj@127.0.0.1

[fanlj@fanlj ~]$ echo 'this is from fanlj' >fanlj.txt

[fanlj@fanlj ~]$ gpg -c -a fanlj.txt

[fanlj@fanlj ~]$ ls

fanlj.txt  fanlj.txt.gpg
[fanlj@fanlj ~]$ cp fanlj.txt.gpg /tmp/

2、换另一个终端,fanxiaohui ssh上去

[root@fanlj ~]# ssh -X fanxiaohui@127.0.0.1

[fanxiaohui@fanlj ~]$ cp /tmp/fanlj.txt.gpg .

[fanxiaohui@fanlj ~]$ gpg fanlj.txt.gpg

[fanxiaohui@fanlj ~]$ cat fanlj.txt
this is from fanlj

二、使用gpg实现非对称加密

1、非对称密钥成对出现,使用收件人的公钥加密,发给收件人,收件人有一个与之对应的私钥,才能解密。

 2fanxiaohui要给fanlj发一个加密的文件,需要使用fanlj的公钥加密

2.1 fanlj生成一对密钥

[fanlj@fanlj ~]$ 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 (仅用于签名)
您的选择?
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)
您所要求的密钥尺寸是 2048 位
请设定这把密钥的有效期限。
         0 = 密钥永不过期
      <n>  = 密钥在 n 天后过期
      <n>w = 密钥在 n 周后过期
      <n>m = 密钥在 n 月后过期
      <n>y = 密钥在 n 年后过期
密钥的有效期限是?(0)
密钥永远不会过期
以上正确吗?(y/n)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>"
真实姓名:fanlj
电子邮件地址:fanlj@tarena.com
注释:
您选定了这个用户标识:
    “fanlj <fanlj@tarena.com>”
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?O
您需要一个密码来保护您的私钥。

查看当前用户导入的公钥

[fanlj@fanlj ~]$ gpg --list-keys

/home/fanlj/.gnupg/pubring.gpg
------------------------------
pub   2048R/BA0F7D31 2015-10-21
uid                  fanlj <fanlj@treana.com>
sub   2048R/D67B4937 2015-10-21
查看当前用户的私钥

[fanlj@fanlj ~]$ gpg --list-secret

/home/fanlj/.gnupg/secring.gpg
------------------------------
sec   2048R/BA0F7D31 2015-10-21
uid                  fanlj <fanlj@treana.com>
ssb   2048R/D67B4937 2015-10-21

查看密钥的指纹信息

[fanlj@fanlj ~]$ gpg --fingerprint

/home/fanlj/.gnupg/pubring.gpg
------------------------------
pub   2048R/BA0F7D31 2015-10-21
密钥指纹 = CAED 8DB0 D6C7 E4BE 1EE4  C862 2643 245A BA0F 7D31
uid                  fanlj <fanlj@treana.com>
sub   2048R/D67B4937 2015-10-21
2.2 fanlj把公钥传递给fanxiaohui

[fanlj@fanlj ~]$ gpg  -a --export   fanlj > /tmp/fanlj.pub

2.3 fanxiaohui收到fanlj的公钥后,用其加密文档

[fanxiaohui@fanlj ~]$ gpg --import /tmp/fanlj.pub

gpg: 已创建目录‘/home/fanxiaohui/.gnupg’
gpg: 新的配置文件‘/home/fanxiaohui/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/home/fanxiaohui/.gnupg/gpg.conf’里的选项于此次运行期间未被使用
gpg: 钥匙环‘/home/fanxiaohui/.gnupg/secring.gpg’已建立
gpg: 钥匙环‘/home/fanxiaohui/.gnupg/pubring.gpg’已建立
gpg: /home/fanxiaohui/.gnupg/trustdb.gpg:建立了信任度数据库
gpg: 密钥 BA0F7D31:公钥“fanlj <fanlj@treana.com>”已导入
gpg: 合计被处理的数量:1
gpg:           已导入:1  (RSA: 1)
查看导入的公钥

[fanxiaohui@fanlj ~]$ gpg --list-keys
/home/fanxiaohui/.gnupg/pubring.gpg
-----------------------------------
pub   2048R/BA0F7D31 2015-10-21
uid                  fanlj <fanlj@treana.com>
sub   2048R/D67B4937 2015-10-21

加密文件:

[fanxiaohui@fanlj ~]$ echo my name is fanxiaohui > fanxiaohui.txt
[fanxiaohui@fanlj ~]$ gpg -ear fanlj fanxiaohui.txt
gpg: D67B4937:没有证据表明这把密钥真的属于它所声称的持有者
pub  2048R/D67B4937 2015-10-21 fanlj <fanlj@treana.com>
 主钥指纹: CAED 8DB0 D6C7 E4BE 1EE4  C862 2643 245A BA0F 7D31
 子钥指纹: 4555 DF93 37C8 2D8E 13D3  593D A990 AB34 D67B 4937
这把密钥并不一定属于用户标识声称的那个人。如果您真的知道自
己在做什么,您可以在下一个问题回答 yes。
无论如何还是使用这把密钥吗?(y/N)y
2.4 bob把加密后的文件发给alice

[fanxiaohui@fanlj ~]$ cp fanxiaohui.txt.asc /tmp/

2.5 alice解密文件

[fanlj@fanlj ~]$ cp /tmp/fanxiaohui.txt.asc .

[fanlj@fanlj ~]$ gpg fanxiaohui.txt.asc
您需要输入密码,才能解开这个用户的私钥:“fanlj <fanlj@treana.com>”
2048 位的 RSA 密钥,钥匙号 D67B4937,建立于 2015-10-21 (主钥匙号 BA0F7D31)
can't connect to `/home/fanlj/.gnupg/S.gpg-agent': 没有那个文件或目录
gpg: 由 2048 位的 RSA 密钥加密,钥匙号为 D67B4937、生成于 2015-10-21
      “fanlj <fanlj@treana.com>”
[fanlj@fanlj ~]$ ls
fanxiaohui.txt  fanxiaohui.txt.asc
[fanlj@fanlj ~]$ cat fanxiaohui.txt
my name is fanxiaohui

三、使用GPG实现签名

1、签名可实现的功能:

1)身份认证,表明用户确实是他声称的那个人

2)数据完整性,数据一旦被篡改,签名就会失效

3)认可:不可抵赖

2fanlj发送签名文件给fanxiaohui

2.1 fanlj签名一个纯文本文件

[fanlj@fanlj ~]$ echo 'fanlj file' > fanlj.txt

[fanlj@fanlj ~]$ gpg -b fanlj.txt
您需要输入密码,才能解开这个用户的私钥:“fanlj <fanlj@treana.com>”
2048 位的 RSA 密钥,钥匙号 BA0F7D31,建立于 2015-10-21
can't connect to `/home/fanlj/.gnupg/S.gpg-agent': 没有那个文件或目录
[fanlj@fanlj ~]$ ls
fanlj.txt  fanlj.txt.sig

2.2  把原文和签名文件发送给bob

[fanlj@fanlj ~]$ cp fanlj.txt* /tmp/

2.3  验证签名

[fanxiaohui@fanlj ~]$ cp /tmp/fanlj.txt* .

[fanxiaohui@fanlj ~]$ ls
fanlj.txt  fanlj.txt.sig

[fanxiaohui@fanlj ~]$ gpg --verify fanlj.txt.sig

gpg: 于 2015年10月21日 星期三 11时28分54秒 CST 创建的签名,使用 RSA,钥匙号 BA0F7D31
gpg: 完好的签名,来自于“fanlj <fanlj@treana.com>”
gpg: 警告:这把密钥未经受信任的签名认证!
gpg:       没有证据表明这个签名属于它所声称的持有者。
主钥指纹: CAED 8DB0 D6C7 E4BE 1EE4  C862 2643 245A BA0F 7D31
2.4  把alice.txt的内容稍做修改存盘,再次验证

[fanxiaohui@fanlj ~]$ vim fanlj.txt

[fanxiaohui@fanlj ~]$ gpg --verify fanlj.txt.sig
gpg: 于 2015年10月21日 星期三 11时28分54秒 CST 创建的签名,使用 RSA,钥匙号 BA0F7D31
gpg: 已损坏的签名,来自于“fanlj <fanlj@treana.com>”
总结:

       用户可以通过加密、解密、签名等技术,保证文件传输的安全保证.

加密的目的及方式:确保数据的机密性,保证信息的完整性