我正试图找到方法来确保任何人从其他任何地方调用应用程序的URL,除了应用程序无效并且我使用的是okhttp3。在我的标头请求中,我有一个用户代理,其值是在需要时生成的app key-hash,并且从不使用
进行记录try {
PackageInfo info = getPackageManager().getPackageInfo("MY PACKAGE NAME", PackageManager.GET_SIGNATURES);
for (android.content.pm.Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT);
Log.e("MY KEY HASH:", sign);
// Toast.makeText(getApplicationContext(),sign, Toast.LENGTH_LONG).show();
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
这样,对于发送的每个请求,我都会检查用户代理的值是否与我的服务器上的值匹配(从keystore + signed apk生成),然后再执行其他操作。最重要的是,数据全部是POST,网址都是https。
我主要担心的是有人可以从apk获取提取应用程序密钥哈希吗?即使高级用户使用xposed,内存转储e.t.c
这足够安全吗?
答案 0 :(得分:1)
您无法实现的任何操作都会阻止高级用户提取必要的值。这只是需要多长时间(分钟,小时或天)的问题。
提出的解决方案非常简单。我假设使用Xposed或Man-in-the-middle代理制动它只需几分钟。
如果你真的想要安全性,你必须使用SSL / TLS证书固定并使用一个好的Android硬化框架(通常是一个好的成本)。