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,然后从那里自动处理您的应用程序。