【问题标题】:Use SQLCipher/Encryption on a prepopulated SQLite database在预填充的 SQLite 数据库上使用 SQLCipher/Encryption
【发布时间】:2017-10-30 15:33:32
【问题描述】:

我一直在寻找一种在包含超过一百万个条目的预填充数据库上实现 SQLCipher 的方法。过去三个月是我完全投入到项目数据库中的时间,现在它已经完成,这导致我遇到了一个问题。

我知道我的应用程序的数据库会在一周左右被复制,复制数据库非常简单(只需使用 WinRAR 打开 apk)。而在印度,没有人关心版权,所以这将毫无用处。

基本上我想保护我的应用程序的数据库不被复制,记住应用程序应该离线工作(也就是说没有 PHP/SQL 服务器)。

我已经检查了 GitHub/Google,我发现只有 SQLCipher by Zetetic。 GitHub 上的相同内容 - Here

此外,现在可以导入以下库:net.zetetic:android-database-sqlcipher:3.5.2@aar 并可以使用它来保护数据库,但它适用于应用程序创建的数据库,而不是预填充的数据库。 (库取自this SO 上的答案)。

->现在,对我来说,百万美元的问题是我是否可以通过密码保护或加密我的数据库而不将数据库放在任何服务器上?

附注-> 我想让我的应用离线运行,而且,我只是一名学生,至少目前还买不起 Zetetic 的付费服务。

编辑 - 我浏览了一些存储数据库的谷歌应用程序的代码以获得一些帮助,但它们只是使用压缩在 .gz 文件中的 .out 文件(可以使用 Word/Text 编辑器轻松打开)不是我应该使用的东西。

【问题讨论】:

标签: android database sqlite encryption sqlcipher


【解决方案1】:

在我的预填充数据库上实现 SQLCipher

这是没有意义的。任何想要获取加密数据库的人都可以从您的应用中获取加密密钥,然后解密数据库。

我想保护我的应用程序的数据库不被复制

不要把它放在设备上。

记住应用应该离线工作

根据您应用的性质,您可能能够缓存一些数据以供离线使用,以减少离线时的功能。

一个更简单的解决方案是不用担心数据库可能会被复制。套用 Tim O'Reilly 的话说,您的问题不是安全性而是晦涩难懂。

【讨论】:

  • 我刚读了一行“如果你把数据放在用户的设备上,现在是用户的数据,不是你的。”。也许这个问题实际上需要一些新的编程发明。而且我真的不想把它放在服务器上,然后把所有的数据库类和它的方法/游标等弄乱。
  • 留下其他 cmets,如果我这样做 this 并将密钥存储在带有 proguard 的字符串中?
  • @Hardiksharma:由于 ProGuard 与资源无关,因此对您没有多大帮助。
  • 那么如何通过firebase检索传递,最少的互联网帮助。由于 firebase 已经链接到各种其他功能(相当大的应用程序)。
  • @Hardiksharma:那么您的应用程序将无法离线运行,这就是本练习的重点。如果您将密码存储在设备上(例如,在首次连接使用时从 Firebase 检索),那么任何根设备的人都可以获取密码。
猜你喜欢
  • 2016-01-27
  • 2016-04-12
  • 1970-01-01
  • 2017-07-15
  • 2011-04-15
  • 2017-03-28
  • 2012-04-02
  • 2016-10-24
  • 1970-01-01
相关资源
最近更新 更多