提问人:auspicious99 提问时间:10/9/2023 最后编辑:auspicious99 更新时间:10/24/2023 访问量:60
ApkChecksum 的 getValue() 返回的字节数组的编码格式是什么?
What is the encoding format of the byte arrays returned by ApkChecksum's getValue()?
问:
从 API 级别 31 开始,android 的包管理器添加了 requestChecksums(),允许检索各种 apk 哈希值。有了这个,我们可以得到一个 ;但是,ApkChecksum 的开发人员参考非常稀疏地记录了 ApkChecksum 类。 以字节数组 (byte[]) 的形式返回“校验和值”。它不能为空。List<ApkChecksum>
getValue()
但它没有说明这样返回的字节的编码/格式。正如这篇 SO 帖子所指出的,“你的字节数组必须有一些编码”,它指向了 https://docs.oracle.com/en/java/javase/15/intl/supported-encodings.html#GUID-F8900850-51B5-4B8B-88C0-6186DF1C16B5 模块中包含的数十个基本编码集的列表,更不用说开发人员可能选择使用的许多其他编码集了。这些只是字符编码,而 ApkChecksum 返回的哈希值可能使用其他编码/格式来表示数字或大数字。java.base
有谁知道 ApkChecksum 返回的字节数组的编码是什么?getValue()
答:
我不是这个领域的专家,但 AFAIK 校验和只是字节(不是文本),因此它们不需要任何编码。
如果你的问题是如何解释字节,那么你可能需要查看报告的类型(例如TYPE_PARTIAL_MERKLE_ROOT_1M_SHA256):https://developer.android.com/reference/android/content/pm/ApkChecksum#getType()
该文档包含有关签名算法的许多详细信息。
我参考了这个页面,它用于将十六进制值打印成一个字符串,并将输出连接起来形成哈希值。我的代码如下所示:String.format ("%02X", b)
val Checksum = checksum.value
var concatWhole = ""
for (a in Checksum) {
val st = String.format("%02X", a)
concatWhole += st
根据文档,Android 是 little-endian
评论