Linux系統文件加密與解密應用

加密與解密應用

1.檢查文件的MD5校驗和
2.使用GPG實現文件機密性保護,加密和解密操作
3.使用GPG的簽名機制,驗證數據的來源正確性

加密算法主要有以下幾種分類:

1.爲確保數據機密性算法:
a) 對稱加密算法(AES,DES)
b) 非對稱加密算法(RSA,DSA)
2.爲確保數據完整性算法:
a) 信息摘要(MD5,SHA256,SHA512)

步驟一:檢查文件的MD5校驗和

1) 查看文件改動前的校驗和,複製爲新文件其校驗和不變

[root@proxy ~]# vim file1.txt
abcdef
123456779
[root@proxy ~]# cp file1.txt file2.txt
[root@proxy ~]# cat file1.txt > file3.txt
[root@proxy ~]# md5sum file?.txt                  //文件內容一致,則校驗和也不變
b92aa0f8aa5d5af5a47c6896283f3536  file1.txt
b92aa0f8aa5d5af5a47c6896283f3536  file2.txt
b92aa0f8aa5d5af5a47c6896283f3536  file3.txt

2) 對文件內容稍作改動,再次檢查校驗和,會發現校驗和已大不相同

[root@proxy ~]# echo "x" >> file1.txt
[root@proxy ~]# md5sum file?.txt
6be3efe71d8b4b1ed34ac45f4edd2ba7  file1.txt
b92aa0f8aa5d5af5a47c6896283f3536  file2.txt
b92aa0f8aa5d5af5a47c6896283f3536  file3.txt

步驟二:使用GPG對稱加密方式保護文件

GnuPG是非常流行的加密軟件,支持所有常見加密算法,並且開源免費使用。
1)確保已經安裝了相關軟件(默認已經安裝好了)

[root@proxy ~]# yum -y install gnupg2            //安裝軟件
[root@proxy ~]# gpg --version                    //查看版本
gpg (GnuPG) 2.0.22

2) gpg使用對稱加密算法加密數據的操作
執行下列操作:

[root@proxy ~]# gpg -c file2.txt
.. ..

根據提示依次輸入兩次密碼即可。如果是在GNOME桌面環境,設置密碼的交互界面會是彈出的窗口程序,如圖-1所示:在這裏插入圖片描述

如果是在tty終端執行的上述加密操作,則提示界面也是文本方式的,如圖-2所示。
在這裏插入圖片描述
根據提示輸入兩次口令,加密後的文件(自動添加後綴 .gpg)就生成了,傳遞過程中只要發送加密的文件(比如 file2.txt.gpg)就可以了。

[root@proxy ~]# cat file2.txt.gpg                    //查看加密數據爲亂碼

3)使用gpg對加密文件進行解密操作
收到加密的文件後,必須進行解密才能查看其內容。

[root@proxy ~]# gpg -d file2.txt.gpg > file2.txt      //解密後保存
gpg: 3DES 加密過的數據
.. ..                                              //根據提示輸入正確密碼
[root@proxy ~]# cat file2.txt                      //查看解密後的文件
abcdef
123456779

步驟三:使用GPG非對稱加密方式保護文件

非對稱加密/解密文件時,UserA(192.168.4.100)生成私鑰與公鑰,並把公鑰發送給UserB(192.168.4.5),UserB使用公鑰加密數據,並把加密後的數據傳給UserA,UserA最後使用自己的私鑰解密數據。
實現過程如下所述。
1)接收方UserA創建自己的公鑰、私鑰對(在192.168.4.100操作)

[root@client ~]# gpg --gen-key                           //創建密鑰對
… …
請選擇您要使用的密鑰種類:
   (1) RSA and RSA (default)                            //默認算法爲RSA
   (2) DSA and Elgamal
   (3) DSA (僅用於簽名)
   (4) RSA (僅用於簽名)
您的選擇?                                              //直接回車默認(1)
RSA 密鑰長度應在 1024 位與 4096 位之間。
您想要用多大的密鑰尺寸?(2048)                              //接受默認2048位
您所要求的密鑰尺寸是 2048 位
請設定這把密鑰的有效期限。
         0 = 密鑰永不過期
      <n>  = 密鑰在 n 天后過期
      <n>w = 密鑰在 n 周後過期
      <n>m = 密鑰在 n 月後過期
      <n>y = 密鑰在 n 年後過期
密鑰的有效期限是?(0)                                          //接受默認永不過期
密鑰永遠不會過期
以上正確嗎?(y/n)y                                          //輸入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) <[email protected]>"
真實姓名:UserA
電子郵件地址:[email protected]
註釋:UserA
您選定了這個用戶標識:
    “UserA (UserA) <[email protected]>”
更改姓名(N)、註釋(C)、電子郵件地址(E)或確定(O)/退出(Q)?O          //輸入大寫O確認
您需要一個密碼來保護您的私鑰。
我們需要生成大量的隨機字節。這個時候您可以多做些瑣事(像是敲打鍵盤、移動
鼠標、讀寫硬盤之類的),這會讓隨機數字發生器有更好的機會獲得足夠的熵數。
gpg: 正在檢查信任度數據庫
gpg: 需要 3 份勉強信任和 1 份完全信任,PGP 信任模型
gpg: 深度:0 有效性:  1 已簽名:  0 信任度:0-,0q,0n,0m,0f,1u
pub   2048R/421C9354 2017-08-16
密鑰指紋 = 8A27 6FB5 1315 CEF8 D8A0  A65B F0C9 7DA6 421C 9354
uid                  UserA (UserA) <[email protected]>
sub   2048R/9FA3AD25 2017-08-16

注意:生產密鑰後當前終端可能會變的無法使用,執行reset命令即可,或者關閉後再開一個終端。
2)UserA導出自己的公鑰文件(在192.168.4.100操作)
用戶的公鑰、私鑰信息分別保存在pubring.gpg和secring.gpg文件內:

[root@client ~]# gpg --list-keys                          //查看公鑰環
/root/.gnupg/pubring.gpg
------------------------------
pub   2048R/421C9354 2017-08-16
uid                  UserA (User A) <[email protected]>
sub   2048R/9FA3AD25 2017-08-16

使用gpg命令結合–export選項將其中的公鑰文本導出:

[root@client ~]# gpg -a --export UserA > UserA.pub
//--export的作用是導出密鑰,-a的作用是導出的密鑰存儲爲ASCII格式
[root@client ~]# scp UserA.pub 192.168.4.5:/tmp/ 
//將密鑰傳給Proxy

3)UserB導入接收的公鑰信息(在192.168.4.5操作)
使用gpg命令結合–import選項導入發送方的公鑰信息,以便在加密文件時指定對應的公鑰。

[root@proxy ~]# gpg --import /tmp/UserA.pub
gpg: 密鑰 421C9354:公鑰“UserA (UserA) <[email protected]>”已導入
gpg: 合計被處理的數量:1
gpg:           已導入:1  (RSA: 1) 

4) UserB使用公鑰加密數據,並把加密後的數據傳給UserA(在192.168.4.5操作)

[root@proxy ~]# echo "I love you ." > love.txt
[root@proxy ~]# gpg -e -r UserA love.txt
無論如何還是使用這把密鑰嗎?(y/N)y                          //確認使用此密鑰加密文件
//-e選項是使用密鑰加密數據
//-r選項後面跟的是密鑰,說明使用哪個密鑰對文件加密
[root@proxy ~]# scp love.txt.gpg  192.168.4.100:/root    //加密的數據傳給UserA

5)UserA以自己的私鑰解密文件(在192.168.4.100操作)

[root@client ~]# gpg -d love.txt.gpg > love.txt
您需要輸入密碼,才能解開這個用戶的私鑰:“UserA (UserA) <[email protected]>”
2048 位的 RSA 密鑰,鑰匙號 9FA3AD25,建立於 2017-08-16 (主鑰匙號 421C9354)
                                                  //驗證私鑰口令
gpg: 由 2048 位的 RSA 密鑰加密,鑰匙號爲 9FA3AD25、生成於 2017-08-16
      “UserA (UserA) <[email protected]>”
[root@client ~]# cat love.txt                      //獲得解密後的文件內容
I love you.

步驟四:使用GPG的簽名機制,檢查數據來源的正確性

使用私鑰簽名的文件,是可以使用對應的公鑰驗證簽名的,只要驗證成功,則說明這個文件一定是出自對應的私鑰簽名,除非私鑰被盜,否則一定能證明這個文件來自於某個人!
1)在client(192.168.4.100)上,UserA爲軟件包創建分離式簽名
將軟件包、簽名文件、公鑰文件一起發佈給其他用戶下載。

[root@client ~]# tar zcf log.tar /var/log              //建立測試軟件包
[root@client ~]# gpg -b log.tar                      //創建分離式數字簽名
[root@client ~]# ls -lh log.tar*
-rw-rw-r--. 1 root root 170 8月  17 21:18 log.tar
-rw-rw-r--. 1 root root 287 8月  17 21:22 log.tar.sig
[root@client ~]# scp log.tar* 192.168.4.5:/root        //將簽名文件與簽名傳給UserB

2)在192.168.4.5上驗證簽名

[root@proxy ~]# gpg --verify log.tar.sig log.tar
gpg:於2028年06月07日 星期六 23時23分23秒 CST 創建的簽名,使用 RSA,鑰匙號 421C9354
gpg: 完好的簽名,來自於“UserA (UserA) <[email protected]>”
.. ..
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章