我想要创建一个SDK项目,该项目必须封装和存储一个包含库的应用程序无法访问它的数据。数据由图书馆通过HTTPS接收。
因此,首先,我研究了共享首选项不是选项,因为Android中的库没有自己的上下文,只能处理应用程序的上下文,共享prefs中的数据对父应用程序是可见的。
存储这些敏感数据以对使用lib的应用程序隐藏这些敏感数据的最佳选项是什么?我计划使用代码混淆方法和商业工具,使检索这些数据尽可能困难。所以也许我应该使用Android Keystore系统还是简单的加密就足够了?
编辑: Ok,安全存储数据的唯一方法似乎是加密数据的变体之一。但是还有另一个问题:它会阻止父应用程序访问RAM并从那里读取数据吗?假设设备没有根。
发布于 2017-03-02 14:31:50
您可以使用SQLite作为数据存储。它比依赖外部库更好(因为在您的例子中,您正在编写库)。让我们保持轻点。
每个DB实例都有自己的名称,应用程序按名称访问它。作为一种可能的解决方案,您可以对DB实例的名称进行编码,并在运行时中对其进行解码。这将隐藏您的访问点对开发人员。
实现SQLiteOpenHelper类:
public class FeedReaderDbHelper extends SQLiteOpenHelper {
public static final int DATABASE_VERSION = 1;
public static String DATABASE_NAME = Utils.decode("Ylhsd1lYTnpkMjl5WkE9PQ==");
public FeedReaderDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
...其中,Utils.decode("Ylhsd1lYTnpkMjl5WkE9PQ==")是为获得正确的DB名称而运行的方法。混淆之后,您的代码将如下所示:
com.myrpoject.mypackage.g.h.a(com.myrpoject.mypackage.g.h.a("Ylhsd1lYTnpkMjl5WkE9PQ=="))当然,Ylhsd1lYTnpkMjl5WkE9PQ==只是一个示例,您可以使用任何其他。
有关第二步的详细信息,请参见Check this answer。
https://stackoverflow.com/questions/42557509
复制相似问题