您的位置:首页 > 移动开发 > Android开发

[笔记]Android Apk Java签名的含义

2016-06-28 20:26 309 查看
Android App中的Java签名指的是啥?

听了同事的分享及查阅相关文章,目前的理解是:

1.Java签名文件里包含着一对RSA的公钥和私钥;

2.打包签名过程中,打包脚本使用私钥对生成的CERT.SF进行RSA加密;然后将加密结果和公钥保存在CERT.RSA中;(CERT.SF、CERT.RSA文件位于Apk包中META-INF目录下)

3.创建Java签名文件时,会让我们填写Store Password、Key Alias、Key Password;下图是Android Studio中创建Java签名文件的页面,文件名叫bangtest.jks:



其中,Store Password是用来保护签名文件本身的,要查看和打开签名文件bangtest.jks,必须要输入Store Password;

Key Password是用来保护私钥的,在读取签名文件后,只有输入Key Password后,才能get到RSA的私钥。

至于签名文件中RSA的公钥和私钥的生成规则,需要研究Java工具源码;

更改Store Password和Key Password的值不会影响里面的RSA公钥和私钥;

4.在安装和运行Apk时,Android系统通过相同的算法对META-INF目录下的MANIFEST.SF、XXX.SF、XXX.RSA文件进行一一校验;

5.打包产生的apk里的META-INF目录下的.SF、.RSA文件名为CERT.SF、CERT.RSA,但是从应用市场上下载得到apk,其META-INF目录下的.SF、.RSA文件名就被改为XXX.SF、XXX.RSA了;XXX的命名貌似是以Key
Alias命名的。

6.进入签名文件bangtest.jks所在目录,输入:keytool
-list -v -keystore bangtest.jks,可以得到类似下图内容:直观上我们是看不到RSA的公钥和私钥的;



7.Java的KeyStore可以从签名文件中读取到RSA公钥和私钥;详见:http://blog.csdn.net/satcon/article/details/7363059

KeyStore源码见:https://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html

8.Android系统中也提供了api获取应用的签名和公钥;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息