這裏郵件加密的基本原理是非對稱的加密形式。每一個人都會生成一對密鑰,分爲公鑰和私鑰。正如名字所述,公鑰是公開的,而私鑰只能本人全部,私鑰和公鑰配對存在,彼此解密。實際加密郵件時,使用本身的私鑰和接收人的公鑰對郵件加密,郵件的接收人根據發送人的公鑰和接收人的私鑰進行郵件解密。根據上述原理,想要進行郵件加密的操做,咱們必需要生成本身的公鑰和私鑰,並獲取接收人的公鑰。html
這個操做中,使用的軟件是 thunderbird 及其插件 Enigmail,以及密鑰生成軟件Gpg4win。算法
根據大神的博客嘗試了加密和解密郵件的操做,感謝分享,下附博客原址。服務器
原文連接: http://zhaokaifeng.com/?p=552app
如下是博客原文,我在window10 上實現了操做,連接和使用方法均正確。ide
最早出現的加密方法是對稱加密。在對稱加密算法中是不區分公鑰和私鑰的,加密與解密使用的都是同一個密碼。可是很顯然,若是須要對信息進行加密與解密的不是同一我的,使用對稱加密算法就存在密鑰泄露的極大可能。所以,一種非對稱加密的想法在1974年最早由Ralph C. Merkle提出。目前主要的非對稱加密算法有:RSA、EIGamal、ECC、揹包算法和D-H公鑰加密算法等。工具
A使用公鑰加密算法建立一個本身的公鑰A-1和私鑰A-2。私鑰A-2由A本身保管,不對外公開。公鑰A-1則經過一些可信的渠道公佈出去,例如使用了HTTPS的網頁(這裏之因此強調「HTTPS」是由於HTTPS協議對傳輸的信息作了加密,若是將公鑰放在使用HTTP協議的網頁上,因爲HTTP是明文傳輸網頁數據的,所以在傳輸的過程當中有可能由於遭遇中間人攻擊等而出現公鑰被修改的可能。前文提到「可信的渠道」也是出於此緣由。)、公鑰服務器或者面對面傳遞公鑰。B在拿到A的公鑰A-1後,若是B想給A發送加密信息就可使用公鑰A-1進行加密後再發送給A,A收到加密信息後使用本身知道的,與公鑰A-1對應的私鑰A-2解密B發來的加密信息。this
上述信息加密過程的一個應用就是本文接下來要介紹的發送使用公鑰加密的電子郵件並用對應的私鑰解密該郵件。公鑰加密算法還有一個應用就是用於身份認證,即數字簽名技術。atom
傳統的簽名能夠經過簽字人筆跡的惟一性肯定信息的全部者。在計算機系統中,咱們使用公鑰加密算法進行數字簽名。首先,仍然是生成一對公鑰和私鑰,公鑰公佈,私鑰私有,可是這一次私鑰不是用來解密的,而是用於加密的。因爲私鑰的與公鑰具備數學上的關聯性(雖然公鑰與私鑰具備相關性,可是使用目前主流的非對稱加密算法而且在密鑰長度足夠複雜的狀況下尚未找到破解這種關聯性的有效的方法。2018年02月10日注),即一個公鑰只對應一個私鑰,只要一份文件能夠經過一個公鑰解密,那麼在通常狀況這份文件就是由這個公鑰所對應的私鑰的持有者加密的。這樣就能夠進行身份認證。加密
信息加密中,公鑰加密,私鑰解密;spa
數字簽名中,私鑰加密,公鑰解密;
不管信息加密仍是數字簽名都是:公鑰公開,私鑰保密。
Thunderbird下載地址:https://www.mozilla.org/en-US/thunderbird/
1.Thunderbird
這是一個郵件客戶端,有不少插件可使用,支持Windows、Linux和macOS.
2.GPG
GPG即GnuPG,是由自由軟件基金會Free Software Foundation 開發的用於替代商業軟件PGP的一款免費軟件,能夠用來加密數據以及進行數字簽名。PGP中使用了具備專利的算法,不能無償使用,而GPG中則沒有使用具備專利的算法,能夠無償使用。
3.Enigmail
Enigmail是Thunderbird的一個插件,能夠對將要發送的郵件進行GPG公鑰加密或對收到的使用GPG加密的郵件進行解密。
1.下載安裝GPG並建立密鑰對
GPG官網下載地址:https://www.gnupg.org/download/index.html
或者也可使用Gpg4win,Gpg4win官網:https://www.gpg4win.org/index.html
本文中使用的是Gpg4win.
Gpg4win安裝完成後在默認狀況下會打開Kleopatra,點擊「建立密鑰對」。
輸入名字和郵箱,依次點擊:下一步–>建立
建立的過程當中會要求設置一個密碼以保護將要生成的私鑰,這樣能夠防止私鑰被越權使用。
稍等一會咱們就能夠看到「密鑰對已成功建立」的窗口提示。在該窗口裏咱們還能夠看到密鑰指紋(密鑰指紋能夠用來驗證密鑰在傳輸的過程當中是否被修改。指紋的另外一個重要用途就是,因爲公鑰服務器並不會對上傳的公鑰進行身份驗證,所以任何人均可以以你的名義上傳公鑰,爲了防止這種狀況發生,你能夠在你的我的主頁上公佈本身的密鑰指紋,以提供給下載了你的公鑰的人用於驗證公鑰的真僞。)以及「生成您的密鑰對副本」、「經過電子郵件發送公鑰」和「將公鑰上傳到目錄服務」(若是將公鑰上傳到了公鑰服務器,不一樣的公鑰服務器之間會相互交換公鑰,最終你上傳到一臺公鑰服務器上的公鑰會遍及全網全部公鑰服務器。以後,任何人均可經過該公鑰對應的電子郵件地址或者密鑰ID查找對應的公鑰,從而向咱們發送加密信息)這三個選項。
密鑰對建立完成後,咱們能夠在Kleopatra中看到剛纔建立的項目,選中該項目能夠導出「.asc」格式的公鑰,右鍵能夠進行「更改到期日期」等更多操做。
2.在Thunderbird中搜索安裝插件Enigmail並配置密鑰文件
關於在Thunderbird中安裝插件的步驟,能夠參考個人這篇文章Windows上設置Mozilla Thunderbird郵件客戶端後臺運行。
打開Thunderbird的設置,依次找到Enigmail->Key Management->File->Import Keys from File 能夠導入某個郵箱地址的公鑰文件或者在搜索框中經過輸入郵箱地址或密鑰ID在公鑰服務器上搜索對應的公鑰。若是已使用GPG建立密鑰對的電子郵件地址已經登錄了Thunderbird能夠直接在Key Management裏看到相關信息,不須要進行密鑰文件配置。
安裝Enigmail後,若是咱們的Thunderbird上的一個郵箱帳戶沒有設置GPG公鑰,當咱們使用該帳戶發信時就會彈出以下的警報:
這種狀況下,除非對該帳號設置GPG公鑰或者卸載Enigmail,不然就沒法在發送郵件時解除該警報,也沒法在Thunderbird上使用該帳號發送郵件。
3.發送加密電子郵件
假設咱們須要向AAA@AAA.AAA這個電子郵件地址發送GPG加密郵件,首先應該使用第二步介紹的方法導入AAA@AAA.AAA對應的公鑰文件(該文件將用於加密郵件),或者經過郵件地址AAA@AAA.AAA或對方的密鑰ID在公鑰服務器上搜索其公鑰,搜索到的公鑰須要進行指紋驗證以確保該公鑰不是僞造的。
當咱們第一次使用一個已經設置GPG公鑰的電子郵件地址向另一個具備GPG公鑰的電子郵件地址發送郵件時會彈出確認提示:
點擊Configure ,選中Enable OpenPGP support (Enigmail) for this identity ,點擊OK .以後會彈出窗口詢問咱們是想使用GPG進行加密仍是進行身份認證以及使用哪一種GPG加密方式:
這裏咱們選擇Encrypt Message 和Use PGP/MIME ,點擊OK .
在發送郵件以前,咱們能夠經過點擊工具欄上的小鎖在加密與不加密之間切換。
4.解密收到的加密電子郵件
假設咱們的一個郵箱地址BBB@BBB.BBB接收到一封GPG加密的電子郵件(該郵件使用的是BBB@BBB.BBB的公鑰進行的加密),那麼,咱們就能夠在安裝有GPG軟件的電腦上(且該電腦上存儲有BBB@BBB.BBB的私鑰)使用郵件客戶端,經過輸入BBB@BBB.BBB的私鑰加密密碼的方式解密該郵件。在網頁端登錄郵箱,須要配合插件來解密GPG加密的郵件。
注1:前面設置密鑰對時設置的密碼並非私鑰,而是加密私鑰的密碼,僅僅使用該密碼是不能夠解密郵件的,必須配合私鑰文件一塊兒才能解密。
注2:GPG加密的郵件並不會加密郵件地址和標題。