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

本文详细解释了Android App中Java签名的概念,包括RSA公钥和私钥的作用、签名文件的创建过程及其保护机制,以及系统如何验证签名的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.youkuaiyun.com/satcon/article/details/7363059

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

8.Android系统中也提供了api获取应用的签名和公钥;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值