我在Core Data中存储了一些敏感信息,如密码等。我希望我的应用程序在应用程序进入后台或终止时加密整个SQLite数据库(它不是很大,<1 MB)。我想出了加密的事情本身,但我遇到了正确“关闭”并重新打开商店的核心数据堆栈的问题。
当我的应用程序终止/进入后台时,我现在就这样做了:
当我的应用回来时,我会执行以下操作:
根据我对文档的理解,这应该足够了,但是一旦主视图控制器尝试再次对上下文进行提取,我的应用程序崩溃就不行了。
有人知道从核心数据临时删除商店然后再添加它的最佳方法是什么?
答案 0 :(得分:1)
这不是你问题的答案,但值得说:
您的加密策略存在致命缺陷,我认真建议您考虑采用其他方案。
如果数据应该在磁盘上加密,并且实际上值得加密,那么它永远不会以未加密的状态写入磁盘,原因如下:
如果应用程序强行退出,或者从设备中删除了电源,则文件仍然未加密在磁盘上。然后有人可以在磁盘上查找未加密的数据。
删除商店文件的普通版本很可能安全地删除文件,因此磁盘分析/工具可能会找到未加密的版本文件。
如果要在将数据写入磁盘时加密数据,则必须每次都将加密数据写入磁盘,没有例外。 “它在某些时候被加密”是没用的。
作为替代策略,您可能需要考虑加密存储在核心数据本身中的数据。例如,在将数据存储为BLOB之前,您可能会对数据进行NSArchive并加密生成的数据字节。