apk签名机制与SHA1算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/denglusha737/article/details/66472162

前几天又碰到高德地图申请key的时候,需要一个SHA1值,发现自己对签名这块没有足够了解,今天就做个总结。

1.SHA1算法

sha1用于数字签名,将一段消息生成一个160位的消息摘要,我们可以通过消息摘要来验证消息的完整性。


2.apk的签名机制

将apk解压,可以看到一个META-INF目录,里面就存放着Android对该apk的签名信息。


(1)MANIFEST.MF:摘要文件。Android对apk的每一个文件用SHA1生成摘要,再用Base64进行编码,得到一个值用SHA1-Digest命名。

(2)CERT.SF:这是对第一步生成MANIFEST.MF摘要文件的签名。先计算MANIFEST.MF的整体SHA1值,再用base64编码作为“SHA1-Digest-Manifest”的值,再分别计算每一个块的SHA1,作为“SHA1-Digest”的值。

注意:这里用的是SHA1_RSA算法,用开发者的私钥进行签名,安装时用公钥来解密,将解密后的文件与第一步的摘要文件对比,比对看内容是否被异常修改。开发者可以修改程序,并生成新的MANIFEST.MF摘要文件,但是没有私钥,无法生成正确的CERT.SF签名文件,这里就保证了安装包的安全性。


 (3)CERT.RSA证书文件:用私钥计算出CERT.SF文件的签名并将包含公钥的数字证书一同保存起来。这里是一个二进制文件,用RSA加密了,可以用openssl命令查看。我们可以用dos命令  keytool -printcert -file CERT.RSA   查看具体包的rsa信息。




3.keystore文件

keyTool是java的一个证书管理工具,将密钥与证书存放在一个keystore的文件中。keytool在jdk中,可以用来生成keystore文件。

keystore中包含两种数据:

(1)密钥:包含私钥与配对公钥(非对称加密)

(2)证书:只包含公钥



4.总结

(1)数据指纹:对一个数据源进行SHA1/md5算法,得到一个唯一的值

(2)签名文件技术:数据指纹+rsa算法

(3)证书文件:包含了公钥信息和其他加密信息






猜你喜欢

转载自blog.csdn.net/denglusha737/article/details/66472162