java - Android 上解密数据库的临时存储

标签 java android database encryption

我一直在从事我的一个宠物项目,该项目依赖于 SQLite 数据库来存储信息。最近,我决定要对应用程序进行密码保护,并对数据库进行加密。到目前为止,没有大的问题。在我的设计中,我一直试图将重点放在最大可能的安全性上。是的,我知道考虑到一切(我说的是盐和密码文本;密码在用户的大脑中)都存储在一台设备上,任何知道自己在做什么的人都可能破坏它,如果他们拥有装置。那么为什么要打扰呢?因为我可以。

因此,为此,我一直在考虑在应用程序运行时将我的数据库的解密版本存储在哪里。网上最常见的临时存储建议是 SD 卡。这对我来说不太合适,因为如果应用程序异常终止(使用任务管理器输入过度热心的用户)或根本没有终止,SD 卡上的数据将持续存在。

最近我一直在考虑将整个东西存储在内存中的想法,但这似乎是一种非常糟糕的做法。我的测试设备上的数据库非常小(不到 100K,其中包含大量测试数据)但它仍然让我感到困惑,即用户可能在野外拥有一个大型数据库。我非常清楚,只要有人说“用户永远不会做/拥有那个”,就会有人打破这个限制。

因此,以问题形式提出:Android 设备上临时存储解密数据库的最佳位置在哪里?最好在应用程序执行之间的某个地方不稳定,但在这一点上,我愿意接受建议。

提前致谢。

最佳答案

好吧,如果您使用的是 sqlite 和标准的 Android SQLite 数据库助手,则数据库必须驻留在/data/data//databases 中。这是默认类将从中读取它的唯一位置。

或者,您可以将其存储在 SDCard 上并编写自定义数据库助手。正如您所提到的,如果您的数据是安全的,则有明显的理由不这样做。

我想我会建议在代码中做一些事情来混淆你的数据库,也许通过将需要解码函数来解释的数据传送到数据库中。除此之外,我认为远程数据库将是保护数据的唯一可行机制。

关于java - Android 上解密数据库的临时存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5083641/

相关文章:

android - 添加到新 Activity 的收藏夹

java - 切换 Activity 和使用全局数组时出现 NullPointerException

java - 如何从数据库获取URL的图像以在ImageView中显示

Swift - Cloud Firestore 中的唯一 ID

mysql - 对于 SELECT * WHERE id ='1blah' 这样的查询,PostgreSQL 和 Oracle 会如何表现?

java - 动态计数器Hadoop

java - 使用 Selenium 检测 Excel 文件

java - 在java中使用算术运算符和函数分割字符串

java - 如何在 Hibernate 中序列化集合属性?

javascript - 如何让软键盘显示在 HTML5/CSS3 网站中?