使用密码保护SQLite DB

时间:2014-01-18 12:59:10

标签: android database sqlite encryption passwords

我正在开发一个Android项目,我希望阻止用户访问我的应用数据库的内容。

我认为有3种方式,但我不知道巫婆是最好的,也不知道它们应该如何运作。

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

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

2 个答案:

答案 0 :(得分:2)

  

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

如果它在用户的设备上,则它是用户的数据库,而不是您的数据库。如果它位于您的硬件上,它将只是您的数据库。

  

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

所有这些都无法阻止用户访问用户的数据。

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

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

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

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

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

答案 1 :(得分:1)

如果你要加密数据,为了善良,请使用经过测试的现有库,而不是自己做得很糟糕!例如,SQLite的作者本身销售encryption extension(它用于医疗信息系统等),还有一些其他可能的解决方案。 (我用Google搜索sqlite encryption,我相信你也可以!)

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