在IOS上保护sqlite文件

时间:2011-06-23 17:05:54

标签: iphone database ios sqlite

我有一些数据,我花了几个月收集,清理和构建。我正在构建的应用程序将能够搜索数据。到目前为止,我将sqlite文件存储在用户文件系统中,而不是存储在远程服务器上,因为我希望搜索结果能够立即为用户提供尽可能最佳的体验,而与其连接速度无关。

但我刚刚发现任何拥有越狱手机的人都可以在我的sqlite文件中“窃取”信息存储。

我想要的最后一件事是让某人得到我辛勤工作的结果并将其发布在一个可能会使该应用无用的网站上。

有没有办法阻止这种情况发生?

感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

您想要的是一种DRM形式。最终,DRM无法阻止专用攻击者获取底层数据。理论上,用户可以访问的任何东西都可以被恶意应用程序访问。

您可以加密数据库的行并在应用程序的某处隐藏密钥,但是一个勇敢的黑客会找到它。您可以在第一次运行时下载整个文件,并使用该设备独有的密钥对其进行加密,但是您必须将密钥存储在某处或者具有重新生成它的算法 - 并且黑客可以获得任何一个(即使它在密钥链。)如果你需要网络连接并使用从服务器端和客户端生成的密钥......好吧,攻击者可以欺骗请求并获取服务器端组件。

所以这真的取决于你想要的安全。如果你只想让诚实的人保持诚实,那么简单的加密通常就足够了。如果你想制作一个防弹DRM系统......你就是第一个完成它的人。

答案 1 :(得分:-1)

您可以使用Encrypted Core Data来保护您的数据。

该库实际上在运行时解密您的数据库。您可以将PASSCODE保留在.m文件中。 (我的假设是很难从目标文件中获取硬编码的PASSCODE)

正如@jonathan所说,如果有人急于获取你的数据,他们会。

修改

正如Zaph在评论部分中所提到的,不要试图直接在代码中输入密码,也不要试图通过某种逻辑在代码中混淆密码,因为任何急于获取密钥的人都可以reverse engineer your binary得到它。

Is it possible to reverse-engineer my iPhone application?