这里邮件加密的基本原理是非对称的加密形式。每一个人都会生成一对密钥,分为公钥和私钥。正如名字所述,公钥是公开的,而私钥只能本人全部,私钥和公钥配对存在,彼此解密。实际加密邮件时,使用本身的私钥和接收人的公钥对邮件加密,邮件的接收人根据发送人的公钥和接收人的私钥进行邮件解密。根据上述原理,想要进行邮件加密的操做,咱们必需要生成本身的公钥和私钥,并获取接收人的公钥。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加密的邮件并不会加密邮件地址和标题。