从Core Data中删除并添加商店

时间:2013-02-02 18:32:30

标签: ios core-data nsmanagedobject

我在Core Data中存储了一些敏感信息,如密码等。我希望我的应用程序在应用程序进入后台或终止时加密整个SQLite数据库(它不是很大,<1 MB)。我想出了加密的事情本身,但我遇到了正确“关闭”并重新打开商店的核心数据堆栈的问题。

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

  • 保存上下文
  • 从协调员中删除商店
  • 加密商店并保存
  • 删除商店

当我的应用回来时,我会执行以下操作:

  • 解密并保存商店文件
  • 将商店添加回协调员
  • 重置上下文

根据我对文档的理解,这应该足够了,但是一旦主视图控制器尝试再次对上下文进行提取,我的应用程序崩溃就不行了。

有人知道从核心数据临时删除商店然后再添加它的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

这不是你问题的答案,但值得说:

您的加密策略存在致命缺陷,我认真建议您考虑采用其他方案。

如果数据应该在磁盘上加密,并且实际上值得加密,那么它永远不会以未加密的状态写入磁盘,原因如下:

  • 如果应用程序强行退出,或者从设备中删除了电源,则文件仍然未加密在磁盘上。然后有人可以在磁盘上查找未加密的数据。

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

如果要在将数据写入磁盘时加密数据,则必须每次都将加密数据写入磁盘,没有例外。 “它在某些时候被加密”是没用的。

作为替代策略,您可能需要考虑加密存储在核心数据本身中的数据。例如,在将数据存储为BLOB之前,您可能会对数据进行NSArchive并加密生成的数据字节。