【发布时间】:2016-04-05 15:00:06
【问题描述】:
Core Data 似乎在设备锁定时默认加密,但仅在第一次解锁之前。
对于为 iOS 5.0 或更高版本构建的应用,持久性存储现在存储数据 默认情况下以加密格式存储在磁盘上。默认保护 级别阻止对数据的访问,直到用户解锁 第一次使用设备。
因此,我将其设置为在设备锁定时进行加密。 SQLite 文件的加密设置是在返回 _persistentStoreCoordinator 之前设置的,如下所示:
NSDictionary *fileAttributes = [NSDictionary dictionaryWithObject:NSFileProtectionComplete forKey:NSFileProtectionKey];
if (![[NSFileManager defaultManager] setAttributes:fileAttributes ofItemAtPath:storeURL.path error:&error]) {
//Handle error
}
return _persistentStoreCoordinator;
代码来自here。
我想测试一下文件是否真的被加密了。
我所做的是锁定设备并使用 Xcode->Window->Devices 下载应用程序容器。但是该文件未显示在容器中。如果我在设备解锁时做同样的事情,我可以在容器中找到它。这是为什么?更重要的是,我可以测试一下当手机被锁定或丢失时文件是否被加密就足够了。
编辑:根据answer 建议,为 Core Data 设置更好的加密是:
NSDictionary *storeOptions = @{NSPersistentStoreFileProtectionKey: NSFileProtectionComplete};
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:storeOptions error:&error]){
//handle error
}
【问题讨论】:
标签: ios core-data encryption nsfilemanager