我有一个休息服务器,我只希望我的应用程序能够与我的 REST 服务器通信。即,如果有人将 url 放在浏览器中,他们将无法与我的服务器通信
目前我正在考虑在我的请求调用中添加我的密钥哈希作为额外参数,然后存储密钥
哈希不存储在我的应用程序中,而是使用以下方法自动检索。
public static void getHashes(Activity act) {
PackageInfo info;
try {
info = act.getPackageManager().getPackageInfo("com.my.package.myapp", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md;
md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String something = new String(Base64.encode(md.digest(), 0));
//String something = new String(Base64.encodeBytes(md.digest()));
Log.i("hash key", something);
}
} catch (NameNotFoundException e1) {
Log.e("name not found", e1.toString());
} catch (NoSuchAlgorithmException e) {
Log.e("no such an algorithm", e.toString());
} catch (Exception e) {
Log.e("exception", e.toString());
}
}
例如,我将在某个时间只调用一次此方法,以便在编译到生产 apk 后我可以在 logcat 上看到它并将其保存到我的服务器。这意味着它不会再次输出给其他人看到。
我会将此密钥存储在我的服务器上,并且我的应用程序将在每次发出请求时发送此密钥。如果密钥不同,那么我的服务器将不会响应。
这种方法安全吗?谁能看出其中的缺陷?