【问题标题】:Is android Room database secure to store sensitive data?android Room 数据库存储敏感数据是否安全?
【发布时间】:2020-10-27 10:10:17
【问题描述】:

我在一个项目中工作,我必须将数据从服务器获取到本地数据库。我在考虑房间数据库,它是 android Jetpack 组件的一部分(我猜)。我在堆栈溢出中搜索了很多关于在房间中存储数据是否安全? ,但没有一个能满足我。虽然互联网上没有什么是安全可靠的,但我只想知道破解房间数据库的可能方法是什么?

简而言之,我只想知道将数据本地存储在 Room 数据库中是否安全?请问有人能告诉我 Room 数据库是否安全吗?或者有人如何通过逆向工程获得房间数据库?

【问题讨论】:

    标签: android security android-room reverse-engineering


    【解决方案1】:

    房间将它的sqlite文件存储在应用程序的内部数据目录中,因此其他应用程序无法访问(包括用户,只要手机没有root)。

    正常用例应该没问题。如果你需要额外的安全层,你可以使用 SqliteCipher 来加密你的数据库。可以直接使用带房间的sqlcipher。

    final byte[] passphrase = SQLiteDatabase.getBytes(userEnteredPassphrase);
    final SupportFactory factory = new SupportFactory(passphrase);
    final SomeDatabase room = Room.databaseBuilder(activity, SomeDatabase.class, DB_NAME)
      .openHelperFactory(factory)
      .build();
    

    更多信息:https://github.com/sqlcipher/android-database-sqlcipher#using-sqlcipher-for-android-with-room

    【讨论】:

    • 感谢 Sujan,非常感谢您的解释。我对您的回答非常满意。非常感谢。
    • 很高兴它有帮助,请不要忘记接受答案,它会让其他人更容易找到解决方案
    • 我已投票并接受了您的回答。还有一件事,我想在这里提请您注意:stackoverflow.com/q/62786976/13368093 请看看这个问题。
    • 我对你的回答有些疑问。虽然起初我认为它会起作用。但是你能告诉我我应该把“userEnteredPassphrase”放在这里吗?我的意思是什么代表“userEnteredPassphrase”?
    • 我可以用这个 final byte[] passphrase = "SomeString".getBytes(); 替换你的第一行吗
    猜你喜欢
    • 2017-09-15
    • 1970-01-01
    • 2012-03-28
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多