加密或部分加密 Core Data 数据库?

Posted

技术标签:

【中文标题】加密或部分加密 Core Data 数据库?【英文标题】:Encrypt or partially encrypt Core Data database? 【发布时间】:2016-04-29 04:57:06 【问题描述】:

我想知道... 是否可以在不丢失功能或深度依赖第三方依赖项的情况下加密部分或全部现有 Core Data 应用程序的数据库?

我们可以“滚动我们自己的”加密,因为不需要查询这些特定字段(它是元数据或二进制数据)......但我不想影响数据库的其他部分,也不想破坏所有已经工作了。

我们还可以加密整个数据库。不确定什么是最好的。

【问题讨论】:

您想要做的只是加密数据库某些表中的某些特定字段?还是需要保护整个BD?例如,DB 将在文件级别进行加密? 这只是混淆。 【参考方案1】:

    创建持久化存储时,可以在 options 参数中指定 NSPersistentStoreFileProtectionKey 和 NSFileProtectionComplete 值,这将在设备锁定并设置密码时加密数据库文件,这对于操作数据应该足够好(不是密码和秘密)。

    将客户端密码和密码等敏感数据保存在钥匙串中,而不是数据库中,数据库加密破解只是时间问题。

【讨论】:

目的是为了混淆,而不仅仅是在设备被锁定时保护数据。 那么你需要使用一些 3rd 方,没有构建混淆。 您对在 ios 上加密字符串有什么建议,最好是与 Core Data 无缝连接?如果不使用类似这样的东西交换持久存储,不确定是否存在任何东西......github.com/project-imas/encrypted-core-data......不幸的是,它不支持某些功能。【参考方案2】:

要添加到@Oleg 发布的内容,您可以将二进制数据存储在核心数据NSManagedObject 中。然后,您可以加密您的字符串并将其存储在该二进制属性中。

性能很差,并且无法在存储级别搜索该属性(您可以在获取后进行搜索,因为它在内存中未加密)但它是可行的。

【讨论】:

以上是关于加密或部分加密 Core Data 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何加密/解密 Core Data 中的数据?

加密通过 Core Data 访问的 Sqlite 数据库

如何测试 Core Data SQLite 文件是不是已加密?

从 Core Data 中删除和添加存储

核心数据加密类

java 实现 DES加密 解密算法