4

我正在使用 FMDB 与 sqlite 一起工作,我希望避免对 SQLCipher 的依赖。我如何才能简单地利用 iOS 中内置的 DataProtection 功能?这可能吗?唯一的要求是在手机被盗时保护数据。

如果手机是用 PIN 解锁的,那么用户可以访问数据库就可以了——这是他们的数据。

4

2 回答 2

5

查找您执行databaseWithPath:(或initWithPath:)的行,然后添加:

FMDatabase *db = [FMDatabase databaseWithPath:path];

NSDictionary *attributes = @{NSFileProtectionKey: NSFileProtectionCompleteUnlessOpen};
NSError *error;
BOOL success = [[NSFileManager defaultManager] setAttributes:attributes
                                                ofItemAtPath:path
                                                       error:&error];
if (!success) {
    NSLog(@"File protection failed: %@", error);
}

键的可能值NSFileProtectionKey

  • NSFileProtectionNone: 该文件没有与之相关的特殊保护。它可以随时读取或写入。
  • NSFileProtectionComplete:文件以加密格式存储在磁盘上,在设备锁定或启动时无法读取或写入。
  • NSFileProtectionCompleteUnlessOpen:文件以加密格式存储在磁盘上。文件可以在设备锁定时创建,但一旦关闭,在设备解锁之前无法再次打开。如果文件在解锁时打开,即使用户锁定设备,您也可以继续正常访问该文件。当文件被创建和打开时,会有一个小的性能损失,但在写入或读取时不会。这可以通过将文件保护更改NSFileProtectionComplete为设备解锁时来缓解。
  • NSFileProtectionCompleteUntilFirstUserAuthentication:文件以加密格式存储在磁盘上,直到设备启动后才能访问。用户首次解锁设备后,您的应用可以访问该文件并继续访问该文件,即使用户随后锁定了该设备。

正确的保护类型可能取决于 iOS 的版本(最后两个在 iOS 4 上不可用)以及您在设备锁定时是否使用数据库。

于 2013-08-26T12:31:19.343 回答
3

到目前为止,最简单的方法是为整个应用打开数据保护。转到App IDs,单击“编辑”并将“共享和权限”设置为“完全保护”。

在此处输入图像描述

使用您的新应用程序 ID 信息更新 Xcode,然后,它将自动为您的应用程序处理。

于 2013-08-24T01:42:34.777 回答