FMDB和encryption

我正在使用FMDB来处理sqlite,我宁愿避免依赖于SQLCipher。 我如何简单地利用iOS内置的DataProtectionfunction? 这是否可能 – 唯一的要求是在电话被盗时保护数据。

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

查找你所在的行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键的可能 NSFileProtectionKey

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

正确的保护types取决于iOS的版本(最后两个在iOS 4上不可用),以及在设备locking时是否使用数据库。

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

在这里输入图像说明

使用新的应用程序ID信息更新Xcode,然后从那里自动处理您的应用程序。