如何测试 Core Data SQLite 文件是不是已加密?
Posted
技术标签:
【中文标题】如何测试 Core Data SQLite 文件是不是已加密?【英文标题】: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
【问题讨论】:
【参考方案1】:我所做的是锁定设备并使用 Xcode->窗口->设备。但是该文件未显示在 容器。如果我在设备解锁时做同样的事情,那么我可以 在容器中找到它。
据我了解,这就是 Apple 加密的工作原理。当您的设备被锁定时,您不会在设备容器中看到加密文件,而当它打开时您会看到它们。
【讨论】:
以上是关于如何测试 Core Data SQLite 文件是不是已加密?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SQLite 文件预加载 Core Data,该文件引用使用“外部存储”保存的图像?
如何 VACUUM 一个 Core Data SQLite 数据库?
使用 Core Data 和 SQLite 存储文件的联系人或地址簿应用程序
如何在不丢失数据的情况下更改 Core Data SQLite 数据库的结构