使用MagicalRecord进行核心数据加密

时间:2013-08-27 14:59:23

标签: ios core-data magicalrecord

是否可以配置为Core Data生成的SQLite文件的保护级别?

我需要使用NSFileProtectionComplete级别。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

查找您执行addPersistentStoreWithType:configuration:URL:options:

的行
NSURL *storeURL = ...;

NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:...];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                              configuration:nil
                                                        URL:storeURL
                                                    options:nil
                                                      error:&error])
{
    NSLog(@"Add persistent store failed: %@", error);
}

然后添加:

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

请注意,您不能在后台使用数据库,请考虑使用NSFileProtectionCompleteUnlessOpen:

  • NSFileProtectionComplete: 该文件以加密格式存储在磁盘上,在设备锁定或启动时无法读取或写入。
  • NSFileProtectionCompleteUnlessOpen: 该文件以加密格式存储在磁盘上。可以在设备锁定时创建文件,但一旦关闭,在设备解锁之前无法再次打开。如果在解锁时打开文件,即使用户锁定设备,您也可以继续正常访问该文件。创建和打开文件时会有一个小的性能损失,但不是在写入或读取时。当设备解锁时,可以通过将文件保护更改为NSFileProtectionComplete来缓解此问题。