信息安全技术实用教程第4版张同光ISBN97871214230313.4.3实例——用非对称加密算法加密文件

信息安全技术实用教程-第4版---张同光---ISBN-9787121423031---3.4.3实例——用非对称加密算法加密文件

https://www.cnblogs.com/ztguang/p/12828764.html

主  编:     张同光

ISBN号: 978-7-121-42303-1             9787121423031
出版日期:   2021-11-20
出版社:     电子工业出版社

页码:  定价:¥69.80元


3.4.3  实例——用非对称加密算法加密文件

根据虚拟机KaliLinuxvdi文件KaliLinux.vdi创建虚拟机KaliLinux-2,具体的创建过程可以参考第一章的1.7.4节和网络资料,虚拟机KaliLinux-2的主要参数设置如图3.55所示,网络连接方式选择“网络地址转换(NAT)

注意:VirtualBox导入vdi时报错“Cannot register the hard disk because a hard disk with UUID already exists.”,解决方法是打开带管理员权限的PowerShell,切换到VirtualBox安装目录(比如C:\Program Files\Oracle\VirtualBox),执行如下命令:

.\VBoxManage.exe internalcommands sethduuid C:\ztg\VirtualBox-OS-vdi\KaliLinux.vdi

 

3.55  创建虚拟机KaliLinux-2

3.4.3.1  GnuPG加密文件

GnuPG软件包(Gnu Privacy GuardGnu隐私保镖)软件包的名称是gpg

1虚拟机KaliLinux创建密钥

虚拟机KaliLinux创建一个用来发送加密数据和进行解密数据的密钥。

执行gpg --gen-key命令,生成密钥,如3.56所示,根据提示输入相关信息

 

3.56  创建密钥

现在已经.gnupg目录生成了一对密钥且存在于文件中,进入.gnupg目录进行查看,如3.57所示。

 

3.57  .gnupg目录内容

2虚拟机KaliLinux提取公共密钥

为了使对方虚拟机KaliLinux-2使用刚才生成的公共密钥1FCB3E8FEA808287,需要用命令公共密钥提取出来发送给对方。执行命令gpg --export 1FCB3E8FEA808287 > pub.key,将公共密钥提取到文件pub.key中。

3KaliLinux-2收到KaliLinux公共密钥

虚拟机KaliLinux-2收到对方虚拟机KaliLinux的公共密钥后在虚拟机和宿主机之间通过拖放的方法,执行命令gpg --import pub.key把这个公共密钥放到自己的pubring.kbx文件钥匙环文件执行命令gpg --delete-secret-and-public-key 1FCB3E8FEA808287可以将公共密钥钥匙环文件中删除命令的执行如3.58所示。

 

3.58  保存别人的公共密钥

执行gpg –kv命令查看目前存放别人的公共密钥,如3.59所示。

 

3.59  查看公共密钥

 

3.60  用公共密钥加密文件

4KaliLinux-2使用KaliLinux公共密钥加密文件

虚拟机KaliLinux-2执行gpg -ea -r 1FCB3E8FEA808287 gpg_temp.txtgpg_temp.txt文件进行加密。

-e代表加密

-a代表ASCII格式

-r后面是公共密钥标识

1FCB3E8FEA808287:为密钥标识。

命令执行后,在当前目录下生成了一个同名的gpg_temp.txt.asc的文件,加密后的文件。具体执行过程如3.60所示。

5KaliLinuxKaliLinux-2发来的加密文件进行解密

KaliLinux收到KaliLinux-2发来的加密文件gpg_temp.txt.asc后,执行gpg -o gpg_temp2.txt -d gpg_temp.txt.asc命令,用私有密钥对加密文件进行解密。

-o输出文件

-d表示解密。

在当前目录下生成了解密后的文件gpg_temp2.txt。具体执行过程如3.61所示。

 

3.61  加密文件进行解密

3.4.3.2  OpenSSL加密解密文件

在安全性要求比较高的环境下,可以借助OpenSSL工具对数据进行加密,这样能进一步的保障数据的安全性,几乎所有的Linux发行版里都会预装OpenSSLOpenSSL可以实现消息摘要、文件的加密和解密、数字证书、数字签名和随机数字。SSLSecure Sockets Layer的缩写,是支持在Internet上进行安全通信的标准,并且将数据密码技术集成到协议中。数据在离开计算机之前被加密,然后只有到达它预定的目标后才被解密。

下面介绍2种使用OpenSSL加密解密方法:(1使用密码加密解密;(2使用密钥加密解密。

1使用密码加密解密

1)对文件加密解密

1步:虚拟机KaliLinux执行如下命令加密一个文件,test1.txt为原始文件,test1.txt.aes为加密之后的文件。

echo openssl enc test > test1.txt

openssl enc -e -aes256 -in test1.txt -out test1.txt.aes

其中,

enc:表示对文件进行对称加密或解密;

-e:表示对一个文件进行加密操作;

-aes256:表示使用aes256算法进行加密或解密;

-in:表示需要被加密的文件;

-out:表示加密之后生成的新文件。

加密过程中会要求输入一个加密密码,重复输入两次即可完成对文件的加密。

2步:虚拟机KaliLinux-2执行如下命令解密一个文件,test1.txt.aes为加密的文件,test1.txt为解密之后的文件。

openssl enc -d -aes256 -in test1.txt.aes -out test1.txt

其中,

enc:表示对文件进行对称加密或解密;

-d:表示对文件进行解密操作;

-aes256:表示使用aes256算法进行加密或解密;

-in:表示需要被解密的文件;

-out:表示解密之后生成的新文件。

解密一个文件的时候会要求输入加密文件时设置的密码才能进行解密。

2)配合tar对文件夹加密解密

1步:虚拟机KaliLinux执行如下命令打包并加密文件夹。

mkdir -p testdir/{a,b,c}

echo openssl des3 testdir > testdir/a/testdir.txt

tar czvf - testdir | openssl des3 -salt -k password -out testdir.tar.gz

该例中以des3加密方式,设置密码为password的方式加密testdir文件夹并将加密后的文件输出为testdir.tar.gz。使用-k参数,这样就免出了让提示输密码的麻烦。这样可以方便以脚本的方式对敏感文件进打包并加密。

上面的操作也可以分两步来完成,第一步先通过tar czvf testdirtmp.tar.gz testdir进行打包备份。第二步再通过openssl des3 -salt -k password -in testdirtmp.tar.gz -out testdir.tar.gz的方式加密。

2步:虚拟机KaliLinux-2执行如下命令解密并解包文件夹。

openssl des3 -d -k password -salt -in testdir.tar.gz | tar xzvf -

上述操作的具体过程如图3.62所示。

 

3.62  使用密码加密解密

2使用密钥加密解密

有时会出现忘记密码的情况,另外如果密码设置的太简单,很容易被破解,这时可以能过密钥的方式进行加密和解密。

1步:虚拟机KaliLinux执行如下命令生成一个2048位的密钥文件test.key

openssl genrsa -out test.key 2048

test.key密钥文件包含了公钥和密钥两部分,该文件即可以用于加密和解密。可以将公钥从test.key密钥文件中提取出来,供自己或他人用于加密(仅能用来加密,无法用来解密)。

2步:虚拟机KaliLinux执行如下命令test.key密钥文件中提取出公钥。

openssl rsa -in test.key -pubout -out test_pub.key

其中test_pub.key为公钥文件,密钥文件test.key包含公钥和私钥。

3步:虚拟机KaliLinux-2执行如下命令利用公钥test_pub.key加密文件。

echo openssl rsautl test > test2.txt

openssl rsautl -encrypt -in test2.txt -inkey test_pub.key -pubin -out test2.txt.en

此处利用公钥加密test2.txt文件,并输出为test2.txt.en-in指定要加密的文件,-inkey指定密钥,-pubin表明是用纯公钥文件加密,-out为加密后的文件。

4步:虚拟机KaliLinux执行如下命令利用密钥文件test.key中的私钥解密一个文件。

openssl rsautl -decrypt -in test2.txt.en -inkey test.key -out test2.txt

此处利用私钥解密test2.txt.en文件,并输出为test2.txt-in指定要解密的文件,-inkey指定密钥,-out为解密后的文件。

上述操作的具体过程如图3.63所示。

 

3.63  使用密钥加密解密

原文地址:https://www.cnblogs.com/ztguang/p/15611946.html