iOS 对核心数据的数据保护不起作用

Posted

技术标签:

【中文标题】iOS 对核心数据的数据保护不起作用【英文标题】:iOS Data protection on core data not working 【发布时间】:2016-09-04 07:35:43 【问题描述】:

我正在尝试为我的核心数据文件启用数据保护。这就是我所做的。

    项目设置启用了数据保护功能。

    修改持久存储协调器getter

    let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
    let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("SingleViewCoreData.sqlite")
    
    var failureReason = "There was an error creating or loading the application's saved data."
    do 
        try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: [NSSQLitePragmasOption : ["journal_mode" : "DELETE"], NSPersistentStoreFileProtectionKey : NSFileProtectionComplete])
    
    

    运行代码并在设备上安装应用程序。

    下载app容器并打开包内容,可以看到.sqlite文件 现在锁定设备 保留 10 秒,然后再次为同一个应用下载应用容器。 7.打开包内容,还是可以看到包内容和sqlite文件:(

如果有帮助的话,我正在使用免费的配置文件。

我在这里犯了什么错误?为什么这个 .sqlite 文件没有加密?

请帮忙。提前致谢。

【问题讨论】:

可能重复:***.com/a/23203728/3400991,要加密持久存储,应该使用 SQLCipher @shobhakar-tiwari :我不明白这是怎么重复的! 1. 我的答案与您在链接中给出的答案完全相同,但我声称它没有加密,这意味着我编写的代码不起作用!!!! 2.您链接中发布的答案尚未被接受,因此不太确定它是否真的有效!!!。我发现 100 个这样的链接具有相同的代码,它们既不被接受也不工作。 使用 SqlCipher ,这就是为什么它写成可能重复不完全重复 @shobhakar-tiwari : 伙计,你错过了一点! SqlCipher 是 sqlite 的开源扩展,用于加密整个 sqlite 文件。我不是在询问加密我的核心数据的方法。问题很具体!!我想利用 NSFileProtection 来利用苹果从 iPhone 3gs 开始提供的数据保护功能,通过将文件放在格式化的磁盘分区中来加密和解密文件。所以使用 SqlCipher 无论如何都超出了这里的范围:) 然后也提到这个问题,否则你似乎想要保护你的数据的方法 【参考方案1】:

由于您的设备连接到的计算机是受信任的计算机,因此即使设备已锁定,它也可以读取您应用的容器。我知道有两个选项可以测试 sqlite 文件是否已加密:

1) 越狱您的设备。然后通过 SSH 连接到您的设备,并在设备锁定时尝试读取 sqlite 文件(即“cat sqlite_file”)。如果文件被加密,您将无法读取它。

2) 您可以检查 sqlite 文件上的属性并确保正确设置了 NSFileProtectionKey 属性:

let attributes = try? FileManager.default.attributesOfItem(atPath: sqlite_path)
print(attributes)

【讨论】:

以上是关于iOS 对核心数据的数据保护不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如果用户禁用了他们的密码,如何对 iOS 数据保护做出反应?

核心数据和数据完整性:读操作与写操作。如何保护?

Java 保护访问不起作用

Dataphin核心功能:安全——基于数据权限分类分级和敏感数据保护,保障企业数据安全

核心数据在 iOS 4.3 中不起作用

数据保护、钥匙串和核心数据的 Sqlite 文件