如何测试Core Data SQLlite文件是否已加密?

时间:2016-04-05 15:00:07

标签: ios core-data encryption nsfilemanager

当设备被锁定但仅在第一次解锁之前,默认情况下核心数据似乎是加密的。

来自apple docs

  

对于为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
}

1 个答案:

答案 0 :(得分:0)

  

我所做的是锁定设备并使用下载应用容器   Xcode->窗口 - >设备。但是文件没有显示在   容器。如果我在设备解锁时也这样做,那么我可以   在容器中找到它。

根据我的理解,这是Apple加密的工作原理。当您的设备被锁定时,您不会在设备容器中看到加密文件,当它打开时您会看到它们。