Ios 从核心数据中删除和添加存储

Ios 从核心数据中删除和添加存储,ios,core-data,nsmanagedobject,Ios,Core Data,Nsmanagedobject,我正在核心数据中存储一些敏感信息,如密码等。我希望我的应用程序在应用程序进入后台或终止时加密整个SQLite数据库(它不是很大,

我正在核心数据中存储一些敏感信息,如密码等。我希望我的应用程序在应用程序进入后台或终止时加密整个SQLite数据库(它不是很大,<1MB)。我自己就知道了加密的问题,但在正确地“关闭”和重新打开存储的核心数据堆栈时遇到了问题

当我的应用程序终止/进入后台时,我现在会这样做:

  • 保存上下文
  • 从协调器中删除存储
  • 加密存储并保存它
  • 删除存储
当我的应用程序返回时,我会执行以下操作:

  • 解密并保存存储文件
  • 将存储添加回协调器
  • 重置上下文
据我从文档中了解,这应该足够了,但它不起作用,只要主视图控制器再次尝试在上下文上执行抓取,我的应用程序就会崩溃


有人知道从核心数据中临时删除存储然后再添加它的最佳方法吗?

这不是对你问题的回答,但值得一提:

您的加密策略存在致命缺陷,我郑重建议您想出一个不同的方案。

如果数据应该在磁盘上加密,并且确实值得加密,则永远不应该在未加密状态下将其写入磁盘,原因如下:

  • 如果应用程序被迫退出,或设备断电,则文件在磁盘上仍保持未加密状态。然后有人就可以在磁盘上翻来翻去,找到未加密的数据

  • 删除存储文件的普通版本很可能不会安全地删除文件,因此磁盘分析/工具可能会找到文件的未加密版本

如果要在数据写入磁盘时对其进行加密,则每次都必须将加密数据写入磁盘,没有例外情况。“有时是加密的”是没有用的


作为一种替代策略,您可能需要考虑对存储在核心数据本身中的数据进行加密。例如,您可以先存档数据并加密生成的数据字节,然后再将其存储为blob。

您可以使用iOS内置的数据保护权限来保护应用程序的数据吗?但这取决于用户是否拥有密码。从iOS 5开始,核心数据存储已经加密,直到用户首次输入密码。如果这还不够,您可以在创建永久存储时,通过在选项字典中为NSPersistentStoreFileProtectionKey传递不同的值,在设备锁定时请求系统对其进行加密。我知道硬件加密。问题是,我所说的数据库文件也可以通过iTunes访问,因此用户可以备份该文件。而且这个文件不会被加密,所以我需要在设备上对它进行加密。即使根本不谈加密。当应用程序进入后台时,我是否应该以某种方式正确保存和“发布”应用商店?或者我会保存上下文并让它保持这样吗?我很感激你的回答,但我可以告诉你这不是我用加密做的。我的问题其实只是关于当应用程序进入后台时如何正确“关闭”核心数据存储,以及当应用程序恢复时如何重新打开存储。在这种情况下,是否有必要“关闭”存储或托管对象上下文,或者当应用程序进入后台时,我是否可以保持一切不变?哦,我明白了,你的意思是你有一个内存存储,稍后在写入磁盘之前对其进行加密?