加密方式
1、对称加密:加解密使用相同的密钥。算法:DES/ 3DES / AES。优点,加密效率高。缺点,密钥的传输和保管不方便。
2、非对称加密:公钥加密、私钥解密。算法:RSA。优点,密钥传输保管方便。缺点,加密效率低。
3、单向加密:加密只能向一个方向进行,不能回推。哈希算法。MD5、SHA
一、使用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 ~]$ lsfanlj.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.txtthis is from fanlj
二、使用gpg实现非对称加密
1、非对称密钥成对出现,使用收件人的公钥加密,发给收件人,收件人有一个与之对应的私钥,才能解密。
2、fanxiaohui要给fanlj发一个加密的文件,需要使用fanlj的公钥加密
2.1 fanlj生成一对密钥
[fanlj@fanlj ~]$ gpg --gen-keygpg (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)yYou need a user ID to identify your key; the software constructs the user IDfrom 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-21uid 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-21uid 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 7D31uid fanlj <fanlj@treana.com>sub 2048R/D67B4937 2015-10-212.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: 合计被处理的数量:1gpg: 已导入:1 (RSA: 1)查看导入的公钥
[fanxiaohui@fanlj ~]$ gpg --list-keys/home/fanxiaohui/.gnupg/pubring.gpg-----------------------------------pub 2048R/BA0F7D31 2015-10-21uid 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)y2.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 ~]$ lsfanxiaohui.txt fanxiaohui.txt.asc[fanlj@fanlj ~]$ cat fanxiaohui.txtmy name is fanxiaohui
三、使用GPG实现签名
1、签名可实现的功能:
(1)身份认证,表明用户确实是他声称的那个人
(2)数据完整性,数据一旦被篡改,签名就会失效
(3)认可:不可抵赖
2、fanlj发送签名文件给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-21can't connect to `/home/fanlj/.gnupg/S.gpg-agent': 没有那个文件或目录[fanlj@fanlj ~]$ lsfanlj.txt fanlj.txt.sig
2.2 把原文和签名文件发送给bob[fanlj@fanlj ~]$ cp fanlj.txt* /tmp/
2.3 验证签名[fanxiaohui@fanlj ~]$ cp /tmp/fanlj.txt* .[fanxiaohui@fanlj ~]$ lsfanlj.txt fanlj.txt.sig
[fanxiaohui@fanlj ~]$ gpg --verify fanlj.txt.sig gpg: 于 2015年10月21日 星期三 11时28分54秒 CST 创建的签名,使用 RSA,钥匙号 BA0F7D31gpg: 完好的签名,来自于“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,钥匙号 BA0F7D31gpg: 已损坏的签名,来自于“fanlj <fanlj@treana.com>”
总结:用户可以通过加密、解密、签名等技术,保证文件传输的安全保证.
加密的目的及方式:确保数据的机密性,保证信息的完整性