SQLCipher、encrypted-core-data 和 iOS - 两个 .sqlite 文件正常吗?

Posted

技术标签:

【中文标题】SQLCipher、encrypted-core-data 和 iOS - 两个 .sqlite 文件正常吗?【英文标题】:SQLCipher, encrypted-core-data and iOS - are two .sqlite-files normal? 【发布时间】:2014-03-24 10:20:58 【问题描述】:

我正在使用 SQLCipher 加密我的数据库,因为其中包含敏感信息。一切似乎都正常,我只是很生气,因为我现在有两个 .sqlite 文件:

~/Library/Application Support/MyData.sqlite
~/Library/Application Support/MyApp/MyData.sqlite
~/Library/Application Support/MyApp/MyData.sqlite-shm
~/Library/Application Support/MyApp/MyData.sqlite-wal

第一个是加密的,第二个不是 - 但它不包含任何信息。所以它似乎有效,因为无法获取信息,但我只是想确保这是正确的。

【问题讨论】:

什么是 shm 和 wal 文件已经解释过很多次了。重复例如:***.com/questions/18870387/… 是的,我不太关心 shm 和 wal 文件,但更关心两个 .sqlite 文件,即 - 为什么有两个 sqlite 文件? 如果从模拟器中删除应用再重新安装,是不是每次都得到两个.sqlite文件? 这似乎不正确。 -shm 和 -wal 文件来自 WAL,可以放心地忽略。但是,这并不能解释 2 个不同的 MyData.sqlite 数据库的存在。 @swalkner 第一个数据库是否包含任何数据?文件上的日期戳是什么?您确定没有在使用 SQLCipher 之前遗留下来吗? 您的应用程序和核心数据模型是否都称为 MyData?至少使用 encrypted-core-data (使用 SQLCipher),您将看到每个模型的空(仅模式)数据库,模型名称和另一个数据库,其中包含命名为项目本身的所有加密数据(即 model1. sqlite,model2.sqlite,Project.sqlite)。 【参考方案1】:

您需要关闭 sqlite 的预写日志功能。要在 Core Data 中执行此操作,您需要在商店中设置 pragma 选项。你可以从这个related *** question看到如何设置标志

【讨论】:

不过,这不包括两个 .sqlite 文件。 这些文件是与预写日志相关的工件。首先禁用商店的功能不会创建它们。 ios7 中的 CoreData 框架默认启用此功能。 这没有回答问题,为什么有两个 sqlite 文件

以上是关于SQLCipher、encrypted-core-data 和 iOS - 两个 .sqlite 文件正常吗?的主要内容,如果未能解决你的问题,请参考以下文章

sqlcipher for android

ORMLite整合SQLCipher

解决升级sqlcipher新旧数据库不兼容

sqlcipher 构建 Windows 8

为啥我的 pbkdf2 实现这么慢(与 SQLCipher 相比)?

iOS 设备上的 SQLCipher + DB 性能较差