我们有一些应用程序使用相同的Web服务,我们需要一种方法来唯一标识哪个应用程序正在调用Web服务。
我最终做的是发送应用程序的哈希签名以及其他参数。获取签名的代码与此https://stackoverflow.com/a/25524657/17648类似。
然后我有一个存储了所有哈希的表,以后我可以使用它来与Web服务的调用进行比较,找出哪个应用程序称为哪种方法。
通过这样做,我不需要在调用Web服务时创建switch语句。
现在这个工作正常,但我只是想确保我们发布的任何版本的apk的哈希签名都相同,并且对于安装的任何手机/平板电脑也是如此。
答案 0 :(得分:1)
该答案中的代码实际上是从您的密钥库中散列公钥,因为它实际上是signatures
字段中的内容。如果使用SHA-256哈希算法,则获得与通过Java 7 +的keytool
命令转储密钥库的哈希值相同的值。
这会导致两个潜在的问题:
对于使用相同签名密钥库签名的任何应用,您应获得相同的值。要区分应用程序,您需要使用不同的签名密钥库。无论如何,你可能会这样做。
技术上,byte[]
的{{1}}的确切格式没有记录。它们可能会改变未来的情况。因此,您可能需要在不久的将来使用依赖于版本的逻辑。
恕我直言,您的算法并不比仅使用Signature
,使用应用程序ID好。