Java 如何保护我的Android应用程序中的同步数据?

Java 如何保护我的Android应用程序中的同步数据?,java,android,database,sqlite,security,Java,Android,Database,Sqlite,Security,我正在构建一个Android应用程序,其中包含一个SQLite db,其中包含非常敏感的数据。由于任何对设备有物理访问权限的人都可以复制数据库,因此我想到了几个解决方案来保护数据库中的数据。当然,我们可以在将其输入数据库之前对其进行加密,但由于这会抑制实际查询数据库的可能性,因此会有效地使数据库变得无用。另外:如果我们将密钥存储在应用程序中,那么检索密钥也会变得非常容易,这样加密就没有意义了 因此,我们在登录时将所有数据与服务器同步,之后有两个选项: 在onStop()方法中删除整个数据库。我认

我正在构建一个Android应用程序,其中包含一个SQLite db,其中包含非常敏感的数据。由于任何对设备有物理访问权限的人都可以复制数据库,因此我想到了几个解决方案来保护数据库中的数据。当然,我们可以在将其输入数据库之前对其进行加密,但由于这会抑制实际查询数据库的可能性,因此会有效地使数据库变得无用。另外:如果我们将密钥存储在应用程序中,那么检索密钥也会变得非常容易,这样加密就没有意义了

因此,我们在登录时将所有数据与服务器同步,之后有两个选项:

  • 在onStop()方法中删除整个数据库。我认为这是非常安全的,除了当应用程序崩溃时,我想它不会调用onStop()方法。由于您可以手动销毁该进程,因此我认为具有设备物理访问权限的人仍然能够访问数据库。对吧?
  • 使用内存中的SQLite数据库。根据这样的回答,“每一个到内存中数据库的新连接都会创建一个新的空数据库。”。这意味着您不能在活动中共享它
  • 将同步数据存储在几个Java列表/数组中,并从中获取所有信息。问题是这些列表只存在于一个活动中。为了解决这个问题,我想在一个片段中创建完整的应用程序。我还没有开始尝试,但这似乎也不是正常的方法
  • 是否有人知道这些想法是否有意义,更重要的是,是否没有更好/更方便的方法在应用程序活动中安全地保存数据?欢迎所有提示

    这意味着您不能在活动中共享它

    当然可以。使用单例
    SQLiteDatabase
    。无论如何,您都应该这样做,以支持跨多个线程的线程安全访问

    将同步数据存储在几个Java列表/数组中,并从中获取所有信息。问题是这些列表只存在于一个活动中

    同样,如果小心内存泄漏,可以使用单例或静态数据成员

    然而,如果使用“一对Java列表/数组”是一种选择,我不知道您为什么要摆弄SQLite。SQLite设计用于将关系数据存储在文件中,听起来您不需要任何文件

    这意味着您不能在活动中共享它

    当然可以。使用单例
    SQLiteDatabase
    。无论如何,您都应该这样做,以支持跨多个线程的线程安全访问

    将同步数据存储在几个Java列表/数组中,并从中获取所有信息。问题是这些列表只存在于一个活动中

    同样,如果小心内存泄漏,可以使用单例或静态数据成员


    然而,如果使用“一对Java列表/数组”是一种选择,我不知道您为什么要摆弄SQLite。SQLite设计用于在文件中存储关系数据,听起来您不需要任何文件。

    关于singleton SQLite数据库;我们能否在所有活动中保持连接打开,这样它就不会重新创建数据库?@kramer65:“连接”只是不关闭数据库的问题;我们能否在所有活动中保持连接打开,这样它就不会重新创建数据库?@kramer65:“连接”只是不关闭数据库的问题。您是否考虑过只将密钥存储在内存中?为什么不使用用户的密码作为密钥?您是否考虑过只将密钥存储在内存中?为什么不使用用户的密码作为密钥?