我想知道,当你用以下方法获得PackageSignatures字段的哈希值时,它到底意味着什么?
adb shell dumpsys package com.myapp
给定安装的应用程序的哈希值。
我看到了两个哈希值.第一个哈希值(abc)在每个安装中都是不同的.第二个哈希值(xyz)在给定的apk中是固定的:
signatures=PackageSignatures{abcabca [xyzxyzxy]}
第一个(abc)在每次安装的时候都不一样.第二个(xyz)对于一个给定的apk是固定的.
此外,我想知道第二个哈希值是否与APK的公共签名有任何关系。我有几个apk的公有签名是一样的,但是第二个哈希值不一样,这正常吗?这正常吗?
最近的Android版本的签名行看起来如下。
signatures=PackageSignatures{9122424 version:2, signatures:[bbb2e2d2], past signatures:[]}
为了理解这一行,我们只需要查看AOSP的源代码。PackageSignatures.java
第一部分 abcabca
来自 System.identityHashCode(this)
. 因此,它生成了当前的Java哈希码。PackageSignatures
实例。由于该类只有一个提交的 PackageParser.SigningDetails mSigningDetails;
哈希码完全取决于类的字段。签约细节:
你的二手安卓版似乎有点老了,因为现在的第二部分是 signatureSchemeVersion
- 目前已知有三种签名方案。V1(jarsigner)、v2和v3。
您感兴趣的签名是由以下代码生成的。
Integer.toHexString(mSigningDetails.signatures[i].hashCode())
其中 signatures[i]
是类[]的一个实例。android.content.pm.Signature
](https:/github.comaosp-mirrorplatform_frameworks_baseblobmastercorejavaandroidcontentpmSignature.java。).
该 hashCode()
在该类中定义为由 Arrays.hashCode(mSignature);
哪儿 mSignature
是一个字节数组,似乎包含了使用的X.509签名证书的编码版本。或者是原始的 byte[]
可以提供,因此很难判断具体内容。
但根据我的理解,在你的设备上,这部分应该是直接链接到APK文件的签名。