0

我看到了类似的问题,但它们不符合我的要求。

我有一个应用程序不时需要从 Web 服务进行更新。数据包含 url、description、title 等字段。从 200k 到 400k 条目。它在本地使用,并且经常在这些数据中进行搜索(取决于用户的活动)。

用户不应访问数据,并且搜索需要尽可能快。我知道没有办法让它 100% 不可读,一切都可以逆向工程和解密(我必须将加密密钥保存在手机上)。我的目标是让它尽可能地困难。

我有几个选择:1.加密服务器上的数据并将其作为二进制文件发送到手机。每次需要时解密它 2. 也将数据作为文件发送。读取它,存储到本地数据库 3. 将它作为 JSON(可能已加密)获取,存储到数据库或文件

使用 JSON 有一个优势,因为它更容易实现本地数据和远程数据之间差异的更新。

还有一个关于数据库的问题。每次我想查找某些东西时,我是否应该存储所有加密并解密的条目?它可能会影响手机的性能。

还有一个可能的保护层 - 使加密密钥动态化。每天一次从服务器获取密钥,重新加密存储的数据,第二天密钥更改。但是我认为这是一个开销。告诉我是否不是。

你会选择什么选项?有没有更好的解决方案?

PS数据库将每天更新。

谢谢

4

1 回答 1

0

我会将数据存储在 SQLite 中,但也会使解密方案更加复杂,至少使用两个密钥......一个存储在共享库中,另一个从服务下载并使用该密钥解锁。

这也适用于您的构思策略 - 您可以拥有一个 APK 随附的“设备”密钥 - 作为硬编码字节 [] 嵌入 .SO 中,另一个“每日”密钥将用于打开“每日” ' 数据更新。虽然,我宁愿使用字节数组格式的“每日”密钥,但永远不要以任何形式将它保存在设备上,除非它只在使用期间在内存中解密。这将是对我所做的升级,我只是将该密钥保存为 base64 编码的设备密钥加密字符串。

使用 SQLite 相当简单,您可以在此处查看 - Android Database to Array

我在这里做了类似于我正在解释的事情(但是没有更新每日密钥) -没有解密我加密的内容

看看并讨论:)

于 2013-04-11T14:34:36.853 回答