Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用公钥验证Android应用程序签名?_Java_Android_Keystore - Fatal编程技术网

Java 使用公钥验证Android应用程序签名?

Java 使用公钥验证Android应用程序签名?,java,android,keystore,Java,Android,Keystore,我正在创建一个解锁应用程序,它将删除一些应用程序中的广告并解锁高级功能。我的计划是只需调用PackageManager,验证是否安装了解锁应用程序,如果安装了,则验证签名以确保它实际上是我的应用程序。我在这里遵循这个答案: 然而,我想我对我要验证的签名有点困惑。。。这是我的公钥,对吗?如果是,如何从现有应用程序或密钥库中提取该密钥?最简单的方法是对两个应用程序使用相同的签名密钥,然后在主应用程序中检查是否安装了解锁应用程序,并使用以下代码使用相同的密钥签名: PackageManager

我正在创建一个解锁应用程序,它将删除一些应用程序中的广告并解锁高级功能。我的计划是只需调用PackageManager,验证是否安装了解锁应用程序,如果安装了,则验证签名以确保它实际上是我的应用程序。我在这里遵循这个答案:


然而,我想我对我要验证的签名有点困惑。。。这是我的公钥,对吗?如果是,如何从现有应用程序或密钥库中提取该密钥?

最简单的方法是对两个应用程序使用相同的签名密钥,然后在主应用程序中检查是否安装了解锁应用程序,并使用以下代码使用相同的密钥签名:

    PackageManager manager = App.getContext().getPackageManager();
    bool unlockAppInstalled = manager.checkSignatures("<main app package name>, "<unlock app package name>") == PackageManager.SIGNATURE_MATCH;
PackageManager=App.getContext().getPackageManager();
bool unlockAppInstalled=manager.checkSignatures(“,”)==PackageManager.SIGNATURE\u匹配;

unlockAppInstalled
只有在安装了unlock应用程序并且使用相同的密钥进行了签名时才会为真。

我还不能升级投票,抱歉!:(无论如何,这是完美的。谢谢!如果有人反向工程他的原始应用程序,并用自己的签名签名,然后创建一个新应用程序,并再次使用与原始应用程序相同的签名签名签名,会发生什么情况?可能吗?请帮助。@RajeshK Rajesh,是的,可能。最好检查整个应用程序或每个应用程序的哈希p组件(检查DEX、SO、布局、ARSC等的完整性),而不仅仅依赖于签名。