android - APK 哈希签名是否会更改?

标签 android hash

我们有一些使用相同网络服务的应用,我们需要一种方法来唯一标识哪个应用正在调用网络服务。

我最后做的是发送应用程序的哈希签名以及其他参数。获取签名的代码类似于这个https://stackoverflow.com/a/25524657/17648 .

然后我有一个表,其中存储了所有哈希值,稍后我可以使用它来与对 Web 服务的调用进行比较,并找出哪个应用程序调用了哪个方法。

通过这样做,我不需要在调用 Web 服务时创建 switch 语句。

现在一切正常,但我只想确保散列签名对于我们发布的任何版本的 apk 都是相同的,并且对于安装它的任何手机/平板电脑也是相同的。

最佳答案

该答案中的代码实际上是从您的 keystore 中散列公钥,因为这确实是 signatures 字段中的内容。如果您使用 SHA-256 哈希算法,您将获得与通过 Java 7+ 的 keytool 命令转储 keystore 的哈希值相同的值。

这会导致两个潜在的问题:

  1. 对于使用相同签名 keystore 签名的任何应用程序,您应该获得相同的值。要区分应用程序,您需要使用不同的签名 keystore 。无论如何,你可能正在这样做。

  2. Signaturebyte[] 的确切格式在技术上没有记录。他们有可能在未来改变现状。因此,您以后可能需要版本相关的逻辑。

恕我直言,您的算法并没有比使用应用程序 ID 使用 getPackageName() 好多少。

关于android - APK 哈希签名是否会更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39282484/

相关文章:

android - 使用 ROOM 和 @Database 注释执行 org.jetbrains.kotlin.gradle.internal.KaptExecution 时发生故障

android - 当我尝试将新 Activity 添加到我的项目或清理项目时,aapt.exe 崩溃

android - 如何更改分配给 RecyclerView 中的 ImageButton 的矢量颜色?

java - 应用程序关闭时实现 Agora 信号通信

php - 在 PHP 中使用资源作为数组索引

python - 如何判断对象/实例是否可哈希

java - 房间+实时数据调试

c# - SHA256 支持整数吗?

python - pbkdf2 和哈希比较

php - laravel 密码盐存储在哪里?