对称加密与非对称加密
对称加密:
优点: 对称加密是最简单的一种加密方式,加密和解密用的是同一个秘钥,由于它的效率高,所以频繁被用到加密文件中。
但是对称加密的秘钥管理很难。
缺点:通常在传送公钥时容易被截获,所以一般采用非对称加密的方式来传送公钥。
语法:
gpg -c 文件 加密文件
gpg -d 加密的文件 解密文件
gpg -o 新文件名(此文件存储本次解密的文件)-d 加密的文件 解密文件到指定文件中
实例:
[[email protected] ~]# cat hello.txt
1728473902
[[email protected] ~]# gpg -c hello.txt #加密hello.txt文件,此过程需要自己设定密码
can't connect to `/root/.gnupg/S.gpg-agent': No such file or directory
Xlib: extension "RANDR" missing on display "localhost:11.0".
(pinentry-gtk-2:121525): GLib-GObject-CRITICAL **: Object class GtkSecureEntry doesn't implement property 'editing-canceled' from interface 'GtkCellEditable'
Xlib: extension "RANDR" missing on display "localhost:11.0".
(pinentry-gtk-2:121528): GLib-GObject-CRITICAL **: Object class GtkSecureEntry doesn't implement property 'editing-canceled' from interface 'GtkCellEditable'
[[email protected] ~]# ll hello.txt.gpg #加密后文件自动添加了后缀
-rw-r--r--. 1 root root 59 Sep 1 19:21 hello.txt.gpg
[[email protected] ~]# cat hello.txt.gpg #cat被加密的文件,打开乱码
kQ?㟉*Ѱ®чd-x®wC¶ƭ2¢tϨJՏb8[[email protected] ~]#
[[email protected] ~]# gpg -d hello.txt.gpg #解密被加密的文件,此过程需要输入设定的密码
gpg: 3DES encrypted data
can't connect to `/root/.gnupg/S.gpg-agent': No such file or directory
Xlib: extension "RANDR" missing on display "localhost:11.0".
(pinentry-gtk-2:121548): GLib-GObject-CRITICAL **: Object class GtkSecureEntry doesn't implement property 'editing-canceled' from interface 'GtkCellEditable'
gpg: encrypted with 1 passphrase
1728473902 #解密出的内容
gpg: WARNING: message was not integrity protected
[[email protected] ~]# gpg -o new.txt -d hello.txt.gpg #将解密的文件存入new.txt文件中,相当于重定向到new.txt文件中,也可以这样表示:gpg -d hello.txt.gpg > new.txt
gpg: 3DES encrypted data
can't connect to `/root/.gnupg/S.gpg-agent': No such file or directory
Xlib: extension "RANDR" missing on display "localhost:11.0".
(pinentry-gtk-2:121595): GLib-GObject-CRITICAL **: Object class GtkSecureEntry doesn't implement property 'editing-canceled' from interface 'GtkCellEditable'
gpg: encrypted with 1 passphrase
gpg: WARNING: message was not integrity protected
[[email protected] ~]# cat new.txt #打开解密后的文件
1728473902
非对称加密:
优点: 非对称加密为数据的加密与解密提供了安全的方式,它使用一对秘钥,公钥和私钥,公钥可以让任何人获取;但是公钥加密的数据只能由私钥来解密。若两个人通信则都使用对方的公钥来加密数据即可
缺点:耗费时间较长
语法:
centos6 生成公私钥:
gpg --gen-key (根据提示生成公私钥)
公私钥存储的目录:
/root/.gnupg
查看公私钥:
gpg -k/-K
centos7生成公私钥
gpg --gen-key (根据提示生成公私钥)
公私钥存储的目录:
/root/.gnupg
查看公私钥:
gpg -k/-K
从cennos6中将公钥导出
gpg -a --export -o 文件名c6(此文件存储导出的centos6公钥)
将centos6的公钥传给centos7
利用scp将 文件名c6(上步的文件。即存储centos6公钥的文件)传给centos7
centos7将centos6的公钥(上步传的文件,文件名c6)添加到自己的公钥文件中
gpg --import 文件名c6(上步的文件)
gpg -k(查看一下)
用centos6的公钥加密文件
gpg -e -r 公钥名(centos7导入centos6的公钥) 文件(centos7要加密的文件)
将加密的文件传给centos6
利用scp将centos7利用centos6的公钥加密的文件传给centos6
centos6解密
gpg -o 新文件(解密的内容存储文件) -d 加密的文件
查看解密文件
cat 新文件 (上步的新文件)
实例:
[[email protected] ~]# gpg --gen-key #centos6需要在虚拟机上操作此步骤
[[email protected]~]# ll .gnupg/
total 32
-rw-------. 1 root root 7856 Sep 1 19:55 gpg.conf
drwx------. 2 root root 4096 Sep 1 19:55 private-keys-v1.d
-rw-------. 1 root root 1166 Sep 1 19:56 pubring.gpg
-rw-------. 1 root root 1166 Sep 1 19:56 pubring.gpg~
-rw-------. 1 root root 600 Sep 1 19:56 random_seed
-rw-------. 1 root root 2544 Sep 1 19:56 secring.gpg
-rw-------. 1 root root 1280 Sep 1 19:56 trustdb.gpg
[[email protected]~]# gpg -k #查看centos6的公钥
/root/.gnupg/pubring.gpg
------------------------
pub 2048R/DCB153F8 2018-09-02
uid centos6
sub 2048R/29FFD23F 2018-09-02
[[email protected]~]# gpg -K #查看centos6的私钥
/root/.gnupg/secring.gpg
------------------------
sec 2048R/DCB153F8 2018-09-02
uid centos6
ssb 2048R/29FFD23F 2018-09-02
[[email protected]~]# gpg --gen-key #centos7公私钥的生成;可以在Xshell中操作
[[email protected]~]# gpg -k #查看centos7的公钥
/root/.gnupg/pubring.gpg
------------------------
pub 2048R/F6CD18D0 2018-09-02
uid centos7
sub 2048R/79FAF346 2018-09-02
[[email protected]~]# gpg -K #查看centos7的私钥
/root/.gnupg/secring.gpg
------------------------
sec 2048R/F6CD18D0 2018-09-02
uid centos7
ssb 2048R/79FAF346 2018-09-02
[[email protected]~]# gpg -a --export -o public.txt #centos6生成公钥文件
[[email protected]~]# scp public.txt [email protected]:/root #centos6的公钥发送centos7
[[email protected]~]# gpg --import public.txt #centos7导入centos6的公钥到自己的公钥中
gpg: key DCB153F8: public key "centos6" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
[[email protected]~]# gpg -k #centos7再次查看自己的公钥
/root/.gnupg/pubring.gpg
------------------------
pub 2048R/F6CD18D0 2018-09-02
uid centos7
sub 2048R/79FAF346 2018-09-02
pub 2048R/DCB153F8 2018-09-02
uid centos6
sub 2048R/29FFD23F 2018-09-02
[[email protected]~]# echo "hello" > centos6.txt #centos7生成要加密的文件
[[email protected]~]# gpg -e -r centos6 centos6.txt #centos7用centos6的公钥加密文件
[[email protected]~]# cat centos6.txt.gpg #查看加密的文件,发现乱码
ݶ)ÿG¸6)k
%@p*/
*µܔɪоݨ(
) 1ccɍ¢ᦹ⚸ћ7C¦^+"<9>ʁ§GI4-U¸ \fí9f]䩷㚾V¥ؐ{;k̀8谶0'u離Y¯ꇪϙV*ĥRˡ¤|*x߽º-¡͈l:M 5E
W6»wহa¥Z=D퇠ޱpd,"͠@ьŖ˓ϋ£×i䆺
¼mR堐¡H'Aa֠?½㝺>*eg£ƚI[[email protected] ~]# Xshell
[[email protected]~]# scp centos6.txt.gpg [email protected]:/root #centos7将加密的文件发给centos7
[[email protected]~]# gpg -o centos.txt -d centos6.txt.gpg #centos6加密文件
[[email protected]~]# cat centos.txt #centos6打卡解密后的文件
hello
对称加密与非对称加密的效率对比:
#非对称加密和解密所用的时间
[[email protected] ~]# ll -h access_log1
-rw-r--r--. 1 root root 7.0M Sep 1 20:24 access_log1
[[email protected] ~]# scp access_log1 [email protected]:/root
[[email protected] ~]# time gpg -e -r cetnos6 access_log1
real 0m1.611s
user 0m0.056s
sys 0m0.006s
[[email protected] ~]# scp access_log1.gpg [email protected]:/root
[[email protected] ~]# time gpg -d access_log1.gpg >/dev/null
real 0m3.600s
user 0m0.333s
sys 0m0.010s
#对称加密和解密的时间
[[email protected] ~]# time gpg -c access_log1
real 0m8.131s
user 0m0.300s
sys 0m0.001s
[[email protected] ~]# time gpg -d access_log1.gpg >/dev/null
eal 0m2.595s
user 0m0.295s
sys 0m0.001s
centos7利用centos6的公钥加密来实现非对称加密所用的时间sys 0.006s,而centos6利用对称加密所用的时间 sys 0.01s;
centos6解密利用非对称加密的问价所用的时间 sys 0.001s,而centos6利用非对称加密所用的时间 sys 0.001s
总结:由以上的例子可以看出,非对称加密和解密耗时较长,不利于通信的速率,但是安全性比较好,而对称加密相反,
加密和解密的速度很快,但是容易被其他人窃取公钥,所以应该利用非对称加密来加密对称加密的公钥,然后在利用对称加密来实现通信。
补充:
time:
real时间是指挂钟时间,也就是命令开始执行到结束的时间。这个短时间包括其他进程所占用的时间片,和进程被阻塞时所花费的时间。
user时间是指进程花费在用户模式中的CPU时间,这是唯一真正用于执行进程所花费的时间,其他进程和花费阻塞状态中的时间没有计算在内。
sys时间是指花费在内核模式中的CPU时间,代表在内核中执系统调用所花费的时间,这也是真正由进程使用的CPU时间。