We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
[TOC]
这篇文章介绍安卓的打包流程和签名算法。
在平时开发的过程中,每天都会 run 很多次项目,AS 就会将 apk 自动打包,安装到手机上,那么需要经过哪些流程。
上述流程来自官网:
旧一点更全的图:
从上面的图中,可以分为如下几步:
Android apk 签名涉及到密码学的加密算法,数字签名,数字证书等基础知识,这里做个总结。
一种能产生特殊输出格式的算法,其原理是根据一定的运算规则对原始数据进行某种形式的信息提取,被提取出的信息就被称作原始数据的消息摘要。著名的有 RSA 公司的 MD5 算法和 SHA-1 算法及其大量的变体。
消息摘要算法的主要特点:
其作用在于:保证消息的完整性,如果发送者发送的信息在传递过程中被修改,那么接收者收到信息后, 用同样的摘要算法计算其摘要,如果结果不同,那么就可以确定消息被修改。
数字签名书对非对称加密和消息摘要技术的具体应用。其目的就是确保消息来源的可靠性。
消息发送者生成一对公钥私钥,将公钥发给消息的接收者。如果发送者要发送消息给接收者,会进行三步操作:
而接收者在收到消息后通过下面两步验证消息来源的真伪:
上面的前提在于,接收者必须要事先得到正确的公钥。如果一开始公钥就被修改,那么错误的接收方就被当作正确的。这是需要数字证书来解决。
说到需要确认这个公钥的合法性。这个问题如果只有两方参与的话, 无法确定结果。所以需要一个可信的机构来提供公钥,这种机构称为认证机构(CA)。
CA 是能够认定 公钥确实属于此人,并能生成公钥的数字签名的组织和机构。
CA 用自己的私钥,对发送者的公钥和一些相关信息一起加密,生成 "数字证书"。发送者在签名的时候,带上数字证书发送给接受者。接收者使用 CA 的公钥解开数字证书,得到发送者的真实的公钥。
阮一峰老师的文章《 数字签名是什么?》,讲得很简单易懂。
为了防止 APk 在传送的过程中被第三方篡改,google 引入了签名机制。
签名的 APK 文件比未签名的 APK 文件多了一个 META-AF 文件夹,包含以下三个文件。签名的信息包含在三个文件中。
MANIFEST.MF CERT.RSA CERT.SF
MANIFEST.MF
CERT.RSA
CERT.SF
主要流程如下:
对 apk 文件夹中的文件逐一遍历进行 SHA-1 (SHA256) 算法计算文件的消息摘要,然后尽心 BASE64 编码后,作为 "SHA1—Digest" 属性的值写入到 MANIFEST.MF 文件夹中的一个块中。
计算这个 MANIFEST.MF 文件的整体 SHA1 值,再经过 BASE64 编码后,记录在 CERT.SF 主要属性块(在文件头上)的 SHA1-Digest-Manifest 属性值下。然后,再逐条计算 MANIFEST.MF 文件中每一个块的 SHA1,并经过 BASE64 编码后,记录在 CERT.SF 中的同名块中,属性的名字是 “SHA1-Digest” 。
把之前生成的 CERT.SF 文件, 用私钥计算出签名, 然后将签名以及包含公钥信息的数字证书一同写入 CERT.RSA 中保存。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Android apk packaging process and signature algorithm
[TOC]
这篇文章介绍安卓的打包流程和签名算法。
apk 打包流程
在平时开发的过程中,每天都会 run 很多次项目,AS 就会将 apk 自动打包,安装到手机上,那么需要经过哪些流程。
上述流程来自官网:
旧一点更全的图:
从上面的图中,可以分为如下几步:
签名原理
Android apk 签名涉及到密码学的加密算法,数字签名,数字证书等基础知识,这里做个总结。
消息摘要算法
一种能产生特殊输出格式的算法,其原理是根据一定的运算规则对原始数据进行某种形式的信息提取,被提取出的信息就被称作原始数据的消息摘要。著名的有 RSA 公司的 MD5 算法和 SHA-1 算法及其大量的变体。
消息摘要算法的主要特点:
其作用在于:保证消息的完整性,如果发送者发送的信息在传递过程中被修改,那么接收者收到信息后, 用同样的摘要算法计算其摘要,如果结果不同,那么就可以确定消息被修改。
数字签名
数字签名书对非对称加密和消息摘要技术的具体应用。其目的就是确保消息来源的可靠性。
消息发送者生成一对公钥私钥,将公钥发给消息的接收者。如果发送者要发送消息给接收者,会进行三步操作:
而接收者在收到消息后通过下面两步验证消息来源的真伪:
上面的前提在于,接收者必须要事先得到正确的公钥。如果一开始公钥就被修改,那么错误的接收方就被当作正确的。这是需要数字证书来解决。
数字证书
说到需要确认这个公钥的合法性。这个问题如果只有两方参与的话, 无法确定结果。所以需要一个可信的机构来提供公钥,这种机构称为认证机构(CA)。
CA 是能够认定 公钥确实属于此人,并能生成公钥的数字签名的组织和机构。
CA 用自己的私钥,对发送者的公钥和一些相关信息一起加密,生成 "数字证书"。发送者在签名的时候,带上数字证书发送给接受者。接收者使用 CA 的公钥解开数字证书,得到发送者的真实的公钥。
阮一峰老师的文章《 数字签名是什么?》,讲得很简单易懂。
Android apk 签名流程
为了防止 APk 在传送的过程中被第三方篡改,google 引入了签名机制。
签名的 APK 文件比未签名的 APK 文件多了一个 META-AF 文件夹,包含以下三个文件。签名的信息包含在三个文件中。
主要流程如下:
对 apk 文件夹中的文件逐一遍历进行 SHA-1 (SHA256) 算法计算文件的消息摘要,然后尽心 BASE64 编码后,作为 "SHA1—Digest" 属性的值写入到 MANIFEST.MF 文件夹中的一个块中。
计算这个 MANIFEST.MF 文件的整体 SHA1 值,再经过 BASE64 编码后,记录在 CERT.SF 主要属性块(在文件头上)的 SHA1-Digest-Manifest 属性值下。然后,再逐条计算 MANIFEST.MF 文件中每一个块的 SHA1,并经过 BASE64 编码后,记录在 CERT.SF 中的同名块中,属性的名字是 “SHA1-Digest” 。
把之前生成的 CERT.SF 文件, 用私钥计算出签名, 然后将签名以及包含公钥信息的数字证书一同写入 CERT.RSA 中保存。
The text was updated successfully, but these errors were encountered: