0

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

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

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

当我的应用程序返回时,我执行以下操作:

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

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

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

4

1 回答 1

1

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

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

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

  • 如果应用程序强制退出,或设备断电,文件在磁盘上仍保持未加密状态。然后有人可以四处寻找未加密的数据。

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

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

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

于 2013-02-03T20:10:58.923 回答