【问题标题】:Protect SQLite DB with password使用密码保护 SQLite DB
【发布时间】:2014-02-07 21:03:36
【问题描述】:

我正在开发一个我喜欢阻止用户访问我的应用数据库内容的 android 项目。

我认为有 3 种方法,但我不知道女巫一种是最好的,也不知道它们应该如何工作。

我的问题是我不知道哪种方式最好以及它是如何工作的。

  1. 加密所有文本和数据到数据库并在我想使用时解密!
  2. 加密整个数据库并在应用需要时解密。
  3. 使用 SQLCipher 等第 3 方库。

【问题讨论】:

    标签: android database sqlite encryption passwords


    【解决方案1】:

    我正在开发一个我喜欢阻止用户访问我的应用数据库内容的 android 项目

    如果它在用户的设备上,它是用户的数据库,而不是你的。如果它在您的硬件上,它只会是您的数据库。

    我的问题是我不知道哪种方式最好以及它是如何工作的。

    所有试图阻止用户访问用户的数据都是无效的。

    您的数据库应该在内部存储上,这是 SQLite 数据库的默认位置。大多数用户无法访问内部存储来获取数据库。唯一可以根植他们的设备的人。任何有技能和兴趣来根植他们的设备并尝试在您的应用中获取数据库的人都将具备以下技能和兴趣:

    1. 对您的应用进行逆向工程以找到您的加密算法和密钥,或者

    2. 将数据库上传到某处并说服其他人对您的应用进行逆向工程以找到您的加密算法和密钥

    如果您不希望用户访问数据库,不要将其放在他们的设备上。从您的服务器通过 Web 服务访问它。

    SQLCipher for Android 等工具用于保护用户数据免受攻击。它们作为 DRM 解决方案无效。

    【讨论】:

    • 也许你是对的,但由于我的应用程序结构,我无法将数据库放在网络上。我需要更难接触到预加载的数据库(而不是用户数据库!),尽管我知道可能一些专业人士可以通过一些工具或保留工程来接触我的数据库。但没关系。我只是想让访问我的数据变得更加困难。那么最简单、最好的方法是什么?
    • @Kenji:什么都别做。只需将数据库保存在内部存储中,在其默认位置,就像常规数据库一样。
    【解决方案2】:

    如果您要加密数据,看在上帝的份上,请使用经过测试的现有库,而不是自己做坏事!例如,SQLite 的作者自己销售了一个encryption extension(它用于医疗信息系统之类的东西),还有一些其他可能的解决方案。 (我用谷歌搜索了sqlite encryption,我相信你也可以!)

    但是,请注意,在同一台不受信任的设备上同时保存加密数据和解密数据的密钥总是可能很麻烦;这是 DRM 问题(即,您已将用户真正需要的所有东西都放在用户的工具包上,并且用户相对敌对)。您应该考虑您的应用程序架构; Android 设备往往连接得很好,因此您可以查看是否将数据库保存在您控制的某个服务器上,并且只向应用程序(它可能缓存或不缓存)提供少量数据是否合适。

    【讨论】:

    • 我正在开发多媒体应用程序,它应该独立于互联网。因为我的应用程序即使没有网络也应该工作,它应该负责。我只是想找到一些方法来加强对我预加载数据的访问。我知道,没有互联网的每一种方式都可能被破解。所以请以这种方式帮助我。
    • @Kenji 正如我所说,see(在答案中链接,商业,已知是好的)已经使用(尽管可能不是在敌对的环境中),我找到了一些可能的替代方案(其质量我不知道)只是通过谷歌搜索我能想到的最明显的关键字。快点!没有比这更简单的搜索了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 2021-03-19
    • 2011-06-02
    相关资源
    最近更新 更多