当前位置:  开发笔记 > 数据库 > 正文

如何保护核心数据iPhone应用程序中的sqlite数据库?

如何解决《如何保护核心数据iPhone应用程序中的sqlite数据库?》经验,为你挑选了1个好方法。

我有一个基于Core Data的iPhone应用程序,带有预先填充的只读数据库.我可以对我的数据库应用什么保护(如果有的话)以减少盗版/数据库从被囚禁的iPhone中读取的可能性?

大多数使用预先填充的sqlite数据库的代码示例都显示数据库正在从应用程序包中复制到iPhone上的应用程序文档目录中,这在一个已经破损的iPhone上完全可见.相反,我考虑直接从应用程序包中使用数据库,如下所示:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

    if (persistentStoreCoordinator != nil) {
        return persistentStoreCoordinator;
    }

    NSURL *storeUrl = [NSURL fileURLWithPath: 
        [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:
             @"MyDatabaseName.sqlite"]];

    <... followed by standard persistentStoreCoordinator code ...>

当我在商店网址上放置一个断点时,这只会返回另一个文件位置,我猜这个位置就像在一个破损的iPhone中的文档目录一样可见:

{type = 15, string = file://localhost/var/mobile/Applications/6ACD76F0-396D-4DB1-A46B-B2459A084063/MyiPhoneApp.app/MyDatabaseName.sqlite, base = (null)}

有人可以确认以上是否正确和/或是否有其他方法来解决这个问题(我不打算加密或类似的东西......希望快速保护解决方案)?欣赏坚定的黑客会得到他们想要的东西 - 如果可以的话,我想至少提出一些阻力.

谢谢



1> Marcus S. Za..:

首先,是的,您可以在应用程序包中存储只读数据库,并直接从那里访问它.

其次,保护数据的唯一方法是将其加密到磁盘上并在内存中加密.使用当前形式的Core Data无法轻松完成此操作.您可以做的是加密数据库的某些列并仅在内存中解密它们.这是通过将列存储为二进制数据来实现的,但这也意味着您无法对这些列进行任何搜索.

更新

甚至试图避免越狱手机(这不是100%保证这个人是罪犯.请记住,开发人员经常以诚实的理由越狱他们的手机).不会保护您的数据.数据位于桌面计算机上的zip文件内,无需运行或触摸CocoaTouch设备即可访问.

如果数据是私有的,那么您需要将其放在Web服务上,而不是将其存储在设备上. 任何设备(或用于该问题的任何设备)上是可访问的并且受到逆向工程.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有