【问题标题】:Temporary Storage for Decrypted Database on AndroidAndroid上解密数据库的临时存储
【发布时间】:2011-02-22 20:33:55
【问题描述】:

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

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

最近我一直在玩弄将整个内容存储在内存中的想法,但这似乎是一种非常糟糕的做法。我的测试设备上的数据库绝对很小(小于 100K,其中包含大量测试数据),但它仍然让我感到困扰,因为用户可能在野外拥有大型数据库。我很清楚这样一个事实,只要有人说“用户永远不会这样做/拥有那个”,就会有人将这个限制打到地上。

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

提前致谢。

【问题讨论】:

    标签: java android database encryption


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复。目前,我已经创建了自己的自定义数据库助手类,所以这不是问题。我还使用手机本地数据分区中的 AES 进行所有数据库加密和解密。我的问题更多只是将临时解密的数据库放在哪里,直到需要重新加密并将其存储回文件系统。远程数据库一直是一个有吸引力的选择,但目前不可行。
    • @phobos51594 我正在努力加密 sdcard 上的数据库文件,然后将其解密,但我失败了。您能否为我提供一些示例代码,您是如何实现的?我将不胜感激
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    相关资源
    最近更新 更多