【问题标题】:How to test if Core Data SQLlite file is encrypted?如何测试 Core Data SQLite 文件是否已加密?
【发布时间】:2016-04-05 15:00:06
【问题描述】:

Core Data 似乎在设备锁定时默认加密,但仅在第一次解锁之前。

来自apple docs

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


    【解决方案1】:

    我所做的是锁定设备并使用 Xcode->窗口->设备。但是该文件未显示在 容器。如果我在设备解锁时做同样的事情,那么我可以 在容器中找到它。

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

    【讨论】:

      猜你喜欢
      • 2020-10-23
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多