当设备被锁定但仅在第一次解锁之前,默认情况下核心数据似乎是加密的。
对于为iOS 5.0或更高版本构建的应用,持久存储现在可以存储数据 默认情况下,磁盘上采用加密格式。默认保护 级别阻止访问数据,直到用户解锁后 装置是第一次。
所以我将其设置为在设备锁定时加密。在返回_persistentStoreCoordinator之前设置SQLite文件的加密设置,如下所示:
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建议,更好地设置核心数据加密:
NSDictionary *storeOptions = @{NSPersistentStoreFileProtectionKey: NSFileProtectionComplete};
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:storeOptions error:&error]){
//handle error
}
答案 0 :(得分:0)
我所做的是锁定设备并使用下载应用容器 Xcode->窗口 - >设备。但是文件没有显示在 容器。如果我在设备解锁时也这样做,那么我可以 在容器中找到它。
根据我的理解,这是Apple加密的工作原理。当您的设备被锁定时,您不会在设备容器中看到加密文件,当它打开时您会看到它们。