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

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

  1. 项目设置启用了数据保护功能。
  2. 修改持久存储协调器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])
    }
    
  3. 运行代码并在设备上安装应用程序。

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

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

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

请帮忙。提前致谢。

【问题讨论】:

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

标签: ios swift core-data


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 2013-12-21
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    相关资源
    最近更新 更多