android Room 数据库存储敏感数据是不是安全?

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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,非常感谢您的解释。我对您的回答非常满意。非常感谢。 很高兴它有帮助,请不要忘记接受答案,它会让其他人更容易找到解决方案 我已投票并接受了您的回答。还有一件事,我想在这里提请您注意:***.com/q/62786976/13368093 请看看这个问题。 我对你的回答有些疑问。虽然起初我认为它会起作用。但是你能告诉我我应该把“userEnteredPassphrase”放在这里吗?我的意思是什么代表“userEnteredPassphrase”? 我可以用这个 final byte[] passphrase = "SomeString".getBytes(); 替换你的第一行吗

以上是关于android Room 数据库存储敏感数据是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

Android 数据存储-Room

Android 数据存储-Room

Android 数据存储-Room

Android 数据存储-Room

android 开发进程 0.37 room数据存储的使用

Android Jetpack 学习之旅--> Room 的使用