Android 自检APK';签名

Android 自检APK';签名,android,apk,digital-signature,Android,Apk,Digital Signature,我希望在运行时以编程方式对APK的签名执行检查。我在我的开发工作站上拥有一个密钥库,所以我可以知道(不知如何)我正在用它签署APK的公钥 一旦我知道看板后的公钥是什么,我想输入源代码并检查当前运行的应用程序是否与密钥匹配 可能吗?如果是这样,我如何从Eclipse生成的密钥库中获取公钥 谢谢。你可以试试这个,它应该能用 Signature[] sigs = getPackageManager().getPackageInfo(context.getPackageName(), PackageMa

我希望在运行时以编程方式对APK的签名执行检查。我在我的开发工作站上拥有一个密钥库,所以我可以知道(不知如何)我正在用它签署APK的公钥

一旦我知道看板后的公钥是什么,我想输入源代码并检查当前运行的应用程序是否与密钥匹配

可能吗?如果是这样,我如何从Eclipse生成的密钥库中获取公钥


谢谢。

你可以试试这个,它应该能用

Signature[] sigs = getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures;
    for (Signature sig : sigs)
    {
        // log the sig here
    }

我想我的处境和你一样。 这是我的名片

你可以试一试

Signature sig = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures[0];
Signature releaseSig = context.getPackageManager().getPackageAchiveInfo("/mnt/sdcard/myReleaseApk.apk", PackageManager.GET_SIGNATURES).signatures[0];
return sig.hashCode() == releaseSig.hashCode;

请考虑。抱歉,这必须离线工作,用于预览版本的应用程序。我有一个与此相关的问题,从安全角度来看,自我检查没有什么意义,因为攻击者可以修改代码,使其接受任何东西。没错,但再加上模糊处理,只会使攻击者的生活更加困难。在我的具体案例中,Android授权是完全不可行的。我不明白的是,“如果某个黑客能够按照他想要的方式编辑你的apk”,他就不能删除你正在进行签名检查的存根(方法),这样应用程序甚至不检查任何东西。有意义吗?上传到playstore后不起作用。在上传到playstore之前尝试过apk,效果不错。但上传后,签名会发生变化。@tenponce解决方案是什么?上传到google play后,您的应用程序签名已更改?@Farzad仍在寻找另一个解决方案,但我们可以尝试发布一个预版本,以检查playstore上的签名,然后使用从playstore应用程序获得的签名重新发布。@TentenPonce破坏者可以通过更改Java代码来中和此解决方案吗?@Farzad是的,他们仍然可以删除检查签名的代码。正如他们所说,在安全方面没有银弹。你只能让它变得困难,但不能完全阻止。