Android签名方式

346 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1、certutil -hashfile /? 查看相关哈希函数命令。

将android安装包解压(直接解压,不使用apktool等工具),在META-INF文件夹下有MANIFEST.MF文件。其中记录了android打包后各个文件的文件摘要(sha1后再转base64)。 (在window上验证时,certutil可以正确计算出sha1值,但是base64时与MANIFEST.MF中的不符,但是在网络上进行base64却是正确的,可能是window的base64方式有差异)

2、同时使用v1与v2签名

在同时用v1和v2签名时,CERT.SF文件中会包含X-Android-APK-Signed的属性,其值为2,表明了存在v2的签名机制。SHA1-Digest-Manifest的值为MANIFEST.MF文件的SHA1值后转base64。Signature-Version的值为签名的版本,1.0即为v1。CERT.SF剩余的部分同MANIFEST.MF。(网络上指出CERT.SF文件中相应Name指代的文件摘要与MANIFEST.MF中的不同,但也可以互相推导。但是实际中发现,其实是一样的,参考这个blog.csdn.net/lostinai/ar… plugin的版本导致的问题)。

3、通过如下命令查看CERT.RSA的内容。

openssl pkcs7 -inform DER -in "D:\mdm项目\常用apk安装文件\新课堂4.0 5410\iFlyLogin_MDM_self-hasChecked-release2\META-INF\CERT.RSA" -text -noout -print_certs。 其中可以看到签名文件的一些基本信息及公匙。 openssl工具需要单独安装。也可选用jdk中的keytool工具打印,如下: keytool -printcert -file "D:\mdm项目\常用apk安装文件\新课堂4.0 5410\iFlyLogin_MDM_self-hasChecked-release2\META-INF\CERT.RSA"。

4、打印证书的详细信息

keytool -list -v -keystore D:\workspace\mdm_android\debug.jks 输入口令即密码后会将证书的信息打出,包含指纹等。 其中,证书的指纹的md5,sha1,sha256等值与直接计算debug.jks文件均不相同,还不清楚这几个值的关系。

5、利用keytool手动生成证书

keytool -genkeypair -keystore debug_xxx.jks -alias mdmdebugkey -keyalg RSA -keysize 2048 -validity 30000 随后要求输入一些证书信息,按实际填写即可。这个生成的证书中即包含有公私密匙对。 在命令行直接打印keytool即可显示相关的帮助信息。

6、在安装时系统会读取rsa文件中的公匙,并使用公匙对文件中的加密信息进行解密,得到sf文件的sha1值。如果该值与实际的sf文件sha1值不一致则安装失败。

rsa简介:公匙加密,私匙解密的过程为【加密】。 私匙加密,公匙解密的过程为【签名】

7、v1签名的缺点

1、由于计算了所有文件的sha1值,在安装校验时速度比较慢。

8、在签名时,如果同时勾选v1与v2,则生成的文件与v1签名时一致。不同的地方是在sf文件的开头加入了X-Android-APK-Signed属性,其值为2。其余均与v1相同。

如果仅仅选择v2签名时,则生成的签名文件只有MANIFEST.MF。且里面的内容与v1签名时的不一样。

参考:mp.weixin.qq.com/s?__biz=MzI…