本文由ilanniweb提供友情贊助,首發於爛泥行天下
想要獲得更多的文章,可以關注我的微信ilanniweb。
為什么要學習gpg呢?因為要在Linux下把一個郵箱的密碼加密,不讓其他人看到該郵箱真正的密碼。
為了不讓其他人看到真正的郵箱密碼,我們需要對其進行加密。
加密的方式是先把密碼先寫到一個文件A中,然后使用相關的加密軟件對該文件A進行加密生成新的文件B。此時再刪除文件A。
其他程序調用郵箱密碼時,只調用加密后的文件B,同時對文件B進行解密。
加密我們使用的是gpg這個工具,下面我們來介紹下gpgp。
一、gpg是什么
GPG是GNU Privacy Guard或GnuPG的簡稱,它是一種用於加密、數字簽章及產生非對稱匙對的加密軟件。
GPG使用非對稱加密算法,安全程度比較高。所謂非對稱加密算法,就是每一個用戶都擁有一對密鑰:公鑰和私鑰。其中,私鑰由用戶保存,公鑰則由用戶盡可能地分發給其他人,以便其他人與用戶進行通信。
二、安裝gpg
gpg的安裝非常簡單,在此我們以ubuntu 14.04 server為例。如下:
sudo apt-get -y install gnupg gnupg-agent rng-tools
centos6默認已經安裝gpg,還需要我們在安裝rng-tools就可以正常使用。如下:
yum -y install rng-tools
gpg安裝完畢后,我們可以使用gpg --help命令查看gpg的使用方法。如下:
gpg --help
通過上圖,我們可以看到gpg有很多選項。在此我們就不一一介紹了,下面文章中會介紹幾個比較常用的命令。
三、創建gpg密鑰對
在第一章,我們已經介紹了gpg使用非對稱加密算法。非對稱加密算法需要一對密鑰對:一個公鑰、一個私鑰。
現在我們就來創建這對密鑰,使用gpg --gen-key命令。如下:
gpg --gen-key
上面這張圖中,我們一定要選擇第一項,因為只有第一項用於加密,其他幾項都是用於簽名。
上面這張圖中,我們根據實際情況進行選擇密鑰的有效期限。在此默認使用永久生效,永不過期。
上面這張圖中,是配置密鑰的加密長度。默認是2048bit,密鑰的長度越長,加密的速度越慢。在此我們使用的是,默認配置。
這個填寫該密鑰的相關用戶信息。
上圖中,有兩個地方需要記住。第一就是設置的私鑰密碼,第二就是生成密鑰的密鑰ID。
私鑰密碼是解密時需要的。密鑰ID是對文件進行加密需要的。
四、加密文件
密鑰對創建完畢后,我們現在來使用該密鑰對一個文件A進行加密。
4.1 創建文件filea
首先創建文件filea,內容為ilannipassword。如下:
vi filea
ilannipassword
4.2 加密文件filea
文件filea創建完畢后,現在我們來使用gpg加密文件filea。使用gpg –e命令。如下:
gpg -e -r ilanni filea
這條命令的意思是,使用ilanni這個用戶的密鑰對文件filea進行加密。
通過上圖,我們可以很明顯的看出gpg已經把文件filea加密成新的文件filea.gpg。
現在我們來查看下加密后的文件filea.gpg,如下:
cat filea.gpg
通過上圖,我們可以很明顯的看出filea.gpg文件就是一堆亂碼。這樣就達到了加密的效果。
五、解密文件
文件filea被加密后形成新的文件filea.gpg,如果我們要知道加密前文件filea的內容的話,那么就需要我們來解密filea.gpg文件。
要解密gpg加密后的文件,我們需要使用ilanni這個用戶的公鑰和私鑰。
在此我們是在ilanni這個用戶密鑰生成的機器A上進行解密的。如果在其他的機器B上來解密filea.gpg文件,那么就需要在B機器上把ilanni這個用戶的私鑰和公鑰都導入進來。否則無法完成filea.gpg文件的解密。
解密filea.gpg,只需要使用gpg –d命令就行了。但是考慮到我們程序不需要人工進行交互,所以我們使用了如下的命令。
gpg --no-use-agent --passphrase=ilanni -q --no-tty -d filea.gpg
通過上圖,我們可以很明顯的看到filea.gpg文件已經被成功解密。
六、gpg參數介紹
gpg的參數比較多,下面就稍微介紹下,經常使用到的幾個參數。
--gen-key:生成一副新的密鑰對
--fingerprint:顯示指紋
--send-keys:把密鑰導出到某個公鑰服務器上
--recv-keys:從公鑰服務器上導入密鑰
-a, --armor:輸出經ASCII封裝
-r, --recipient USER-ID:為收件者“某某”加密
-e, --encrypt:加密數據
-d, --decrypt:解密數據
-o, --output FILE:指定輸出文件
--list-keys:顯示所有公鑰
--list-secret-key:顯示所有私鑰
--delete-keys:刪除公鑰
--delete-secret-keys:刪除私鑰
--delete-secret-and-public-keys:刪除公鑰和私鑰
--import:導入公鑰和私鑰
--no-use-agent:不使用用戶代理
--passphrase:私鑰密碼
--no-tty:在執行gpg時終端不顯示信息
--quiet:使用安靜模式
七、gpg的其他使用方法
下面列舉下gpg常用參數的使用案例,如下。
7.1 gpg 查看所有公鑰
gpg --list-key
7.2 gpg 查看所有私鑰
gpg --list-secret-key
7.3 gpg刪除密鑰
gpg --delete-secret-keys 01BA7978 先刪除私鑰
gpg --delete-keys 73391FB6 再刪除公鑰
也可以使用一條命令全部刪除,如下:
gpg --delete-secret-and-public-keys BFA7FF09
7.4 gpg導出公鑰
gpg -a -o duanzhanling.asc --export BFA7FF09
7.5 gpg導出私鑰
gpg -a -o duanzhanling-sec.asc --export-secret-key 0B7F4055
7.6 gpg導入密鑰
導入私鑰和公鑰都用下面的命令gpg --import
gpg --import duanzhanling.asc 導入公鑰
gpg --import duanzhanling-sec.asc 導入私鑰