使用 MagicalRecord 进行核心数据加密

Posted

技术标签:

【中文标题】使用 MagicalRecord 进行核心数据加密【英文标题】:Core Data Encryption with MagicalRecord 【发布时间】:2013-08-27 14:59:23 【问题描述】:

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

我需要在上面使用NSFileProtectionComplete 级别。

有什么想法吗?

【问题讨论】:

这是一个关于 sqlcipher 和魔法记录的问题 (***.com/questions/18365375/…)。也许这将提供一个足够的解决方案 【参考方案1】:

寻找你做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 来缓解。

【讨论】:

请注意,只为整个应用程序开启数据保护会更简单,并且建议您启用(前提是您可以适应后台问题):***.com/questions/18326225/fmdb-and-encryption/… 谢谢!虽然我正在使用 MagicalRecord,但这对我有帮助! :)

以上是关于使用 MagicalRecord 进行核心数据加密的主要内容,如果未能解决你的问题,请参考以下文章

MagicalRecord:后台保存

无法在具有 MagicalRecord [核心数据] 的实体中分配给 ...

MagicalRecord:删除整个数据并再次设置核心数据堆栈

MagicalRecord 重新启动应用程序时删除核心数据存储

如何在 MagicalRecord saveWith Block 之外创建核心数据实体

MagicalRecord saveWithBlockAndWait