本篇文章隶属于 《使用 Gradle 发布 AAR 到 Maven 仓库》由于涉及东西较多,该文件还在起草中…
========================================================
作者:qiujuer
开源库:github.com/qiujuer/Genius-Android
转载请注明出处:http://blog.csdn.net/qiujuer/article/details/44173611
——学之开源,用于开源;初学者的心态,与君共勉!
========================================================
在某系场合我们需要对自己的应用或者文件进行签名加密等操作,其中邮件是最典型的例子。签名加密的工具很多,在本篇中我们使用 GPG 来进行操作。
什么是 GPG ?要说这个还得从 PGP 说起,而 PGP 又是使用 RSA 加密算法进行的,所以要细说的话没个几篇文章是说不完滴,所以还是百度PGP吧。或者你只要知道这是一种加密签名的工具就OK。
下载软件
这里需要说明一下,Windows 的 GPG 软件与 Mac 的不相同,另外如果你的电脑安装有 Cygwin 那么也自动了该加密签名软件,只不过是命令行操作而已。由于已经使用 Android-Studio 所以编译 NDK 用不上 Cygwin 了,就删除了;这里就演示一下界面的操作,后面如果有机会把命令行操作的加上;抱歉了~~
- Mac:https://gpgtools.org/
- Windows:http://www.gpg4win.org/
我这里就演示的是:GPG4win 该款软件。
安装
下载完成自然就是安装了,这个安装基本没有啥说的直接下一步就OK。
运行
在这里,我们运行安装程序中的:Kleopatra,我擦,说好的 GPG 呢?
这里其是就是运行的 GPG 管理器而已。Gpg4win 的核心是 GPG,但包括Kleopatra、GPA、GpgOL、GpgEX和Claws Mail 五个相关工具,其中Kleopatra和 GPA 是 GPG 的密钥管理器,用于生成、导入和导出 GPG 密钥(包括公钥和私钥),一般来说我们使用的也就是这么两个。GpgOL是 Outlook 2003 和2007 的 GPG 支持插件,GpgEX是资源管理器的 GPG 支持插件(不支持 Windows 64 位),Claws Mail 则是一个内置 GPG 支持的邮件客户端;当然邮件管理这个在你进行安装的步骤中会询问你是否安装。
- 点击 【File】 -> 【New Certificate】(创建新证书)一项,运行
Certificate Creation Wizard(证书创建向导)。
- 进入证书类型页面,此时有两个选项可供选择:第一项是OpenPGP密钥对,第二项是 X.509 密 钥对及证书。此处我们选择第一项下一步。
- 在这里你将设置你的昵称最好使用英文名称,你的邮箱,以及附加信息,其中附加信息可以没有。
- 点击【Advanced Settings】(高级设置)按钮,可以对密钥算法和强度以及密钥用途进行设置,密钥算法就保持默认的 【RSA】 就OK。为了增强安全性可以在上方的密钥强度中选择4096 bits(4096位),下方的密钥用途设置主要有三个设置:Signing(签名)、Encryption(加密)和Authentication(认证),维持默认设置即可,最后的Valid until选项可以设置密钥到期时间。设置完成点击下一步。
- 最后确认密钥对的相关设置。
- 点击Create Key(创建密钥)按钮,输入 Passphrase
(密码短语),Passphrase 是使用私钥之前需要输入的密码短语,不过与普通密码相比,Passphrase 长度更长,而且可以包含空格。
输入 Passphrase 之后还可以在主界面文本框中输入帮助计算机创建更为安全的密钥。这里输入内容无关紧要,随便敲击,计算机只是利用击键的间歇时间计算随机数。
- 当然这里会叫你重复确认一次你的密码短语;然后回到主界面随机敲击,等待一定时间你将会弹到如下界面。
- 最后Kleopatra将提示创建密钥对完成,三个选项是备份密钥对、通过 Email 发送公钥和将公钥上传到服务器,再有就是 Finish(完成)。
这里我们恰恰需要的是上传公钥到服务器,为什么呢? 当我们发布 AAR 到远程仓库之前是需要使用 私钥 进行签名加密,而后上传到仓库;而仓库管理服务器会根据你的配置进行验证等操作,此时就需要使用到你上传的公钥,如果公钥没有上传将会导致发布 AAR 失败。
- 第一次点击你将遇到这样的情况,意思就是说你没有设置远程服务器,是否需要设置,如果不设置将会采用默认,这里一般不用设置;如果你托管的仓库有要求的话那就需要了,当然本次教程中的仓库没有该要求。点击 Continue (继续)。
- 此时你会看见,意思是说:一旦上传到服务器几乎就不可撤销,所以叫你确认你不会进行撤销操作,请你确认,此时继续就OK,然后会链接服务器进行上传,你需要等待一段时间将会提示你上传成功与失败,失败了无所谓你可以再次上传。当然有可能你将会遇到 需要翻墙 的情况,这个就XXX.
备份还原
创建了一个密钥(公钥+密钥)后自然存在保存以及导入的问题。
- 回到主界面,在你创建的密钥上右击;可以看见如下目录菜单。
- 在菜单的最后几项中:
- Export Certificates (导出公钥):用以导出公钥密钥对。
- Export Secret Keys(导出私钥):用以导出私钥密钥对。
- Export Certificates to Server(导出证书到服务器):用以将公钥导出到服务器上。其他用户可以在存放公钥的公有服务器上搜索公钥并导入,默认的公钥服务器是 keys.gnupg.net。
- 其中的操作相对简单,只需要直接设置目录即可导出,如果没有上传成功到服务器的也可以在这里重新上传。
Return
到这里基本可以完成了,因为如果是用来签名加密 AAR 到这里基本已经OK了,其中的 签名加密 工作可以完全交给 Gradle 来完成,只需要设置好对应的 私钥+私钥密码短语+私钥位置
- 私钥的ID如何知道?
- 密钥短语,这个之前自己设置的是啥就是啥。
- 密钥位置,这看你自己,可以使用之前的导出操作来导出私钥(*.gpg),还可以找到 GPG 的默认目录,这个很简单:
C:\Users\(YourName)\AppData\Roaming\gnupg
- 在其中你可以找到一个叫做:“secring.gpg”的文件,在该文件中存储了你所有的私钥,在使用的时候靠密钥ID以及密钥短语进行操作。
到此基本算是完成了,可以回到发布 AAR 的文章了,如果你不使用 Gradle 进行加密而使用 GPG 软件进行加密的话,那就请看下一节。
加密解密
启动加密操作向导有三种途径,一种是在Kleopatra主界面中选择 File(文件)菜单中选择 Sign/Encrypt Files(签名/加密文件),一种是将要加密的文件或文件夹拖拽到Kleopatra主界面中,然后在弹出的右键菜单中选择 Sign/Encrypt(签名/加密),一种则是在想要加密的文件或文件夹的右键菜单中选择 Sign and encrypt(签名与加密)。
- 在这里我使用一个文本文件来进行加密。其中你可以看见有3个选择:加密并签名、仅加密、仅签名。最后一个选择完成后删除源文件,可选可不选。
- 选择你要使用的密钥对。
- 点击加密将会输出加密文件。
假如你选择的是他人的公钥,那么Kleopratra 会弹出对话框提示你加密之后你将不能够解密,点击 Continue 确认,保密完成之后点击 Finish 确认即可。 加密完成之后会在源文件所在文件夹生成 .gpg为扩展名的加密文件,现在你可以把这个文件发 给公钥所有者。
- 我打开加密的文件看看(源文件字符:加密文字)
- 当别人收到该文件的时候就会使用私钥进行解密,解密的方法也是三种,和加密的操作类似就不再累赘阐述。其操作名为:Decrypt/Verify(解密/验证)。
- 此时会叫你输入密钥短语,也就是私钥的操作密码。输入成功后你将会成功解密。现在你在看看你的文件是否和原来一样呢?
需要注意的是如果你输入过一次解密短语后后面操作将不会提示输入密钥短语,所以一般来说使用完成后就及时退出。
总结
GnuPG和其他加密工具相比,其非对称性加密的特点使其更适合于机密信息的传递。除了加密解密之外,GPG 还可以对文件进行签名和验证,功能非常强大。
在AAR的发布中并不是使用 GPG 来进行加密而是进行签名,得到签名文件,而后发布到服务器,服务器则根据源文件以及签名文件进行验证,以便判断文件是否在网络传输中导致损坏。
耗时5.5小时,从重新下载软件到截图-编辑-调整….
========================================================
作者:qiujuer
开源库:github.com/qiujuer/Genius-Android
转载请注明出处:http://blog.csdn.net/qiujuer/article/details/44173611
——学之开源,用于开源;初学者的心态,与君共勉!
========================================================