保护 Android 个图书馆
Protecting Android Library
我正在为金融科技产品开发 android 库。
我只想将 AAR 文件的使用限制为经过身份验证的用户。
我们使用每个客户端的访问密钥进行服务器验证。
还有其他客户端验证吗?
保护我的图书馆的最佳机制是什么?
最好的解决方案是在服务器端验证托管应用程序的包名和签名的哈希密钥。
不要将hash key作为参数传给你的SDK,让SDK在运行时读取它并传递给服务器。
public String getCertificateHash(Context context) {
String hashKey = "";
try {
PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
hashKey = Base64.encodeToString(md.digest(), Base64.DEFAULT);
}
} catch (PackageManager.NameNotFoundException e) {
LogUtil.printObject(e);
} catch (NoSuchAlgorithmException e) {
LogUtil.printObject(e);
}
return hashKey.trim();
}
我正在为金融科技产品开发 android 库。 我只想将 AAR 文件的使用限制为经过身份验证的用户。 我们使用每个客户端的访问密钥进行服务器验证。 还有其他客户端验证吗? 保护我的图书馆的最佳机制是什么?
最好的解决方案是在服务器端验证托管应用程序的包名和签名的哈希密钥。
不要将hash key作为参数传给你的SDK,让SDK在运行时读取它并传递给服务器。
public String getCertificateHash(Context context) {
String hashKey = "";
try {
PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
hashKey = Base64.encodeToString(md.digest(), Base64.DEFAULT);
}
} catch (PackageManager.NameNotFoundException e) {
LogUtil.printObject(e);
} catch (NoSuchAlgorithmException e) {
LogUtil.printObject(e);
}
return hashKey.trim();
}