【问题标题】:How to encrypt using EncryptedCoreData with swift?如何快速使用 EncryptedCoreData 进行加密?
【发布时间】:2017-12-15 08:50:42
【问题描述】:

我在弄清楚如何加密我的 sqlite 数据库时遇到了一些麻烦。我正在使用核心数据和以下项目:

https://cocoapods.org/?q=EncryptedCoreData

我想不通的是我应该如何使用这个项目来加密我的数据库。我已经安装了项目,我可以导入库 EncryptedCoreData。但是,我没有找到任何关于 swift 的实际示例的信息。在我的 appdelegate 中,我有以下代码

import UIKit
//import CoreData
//import SQLCipher
import EncryptedCoreData


lazy var persistentContainer: NSPersistentContainer = {
    // my attempt to initialize the container
    let modelURL = Bundle.main.url(forResource: "DbModel", withExtension: "momd")!
    var coordinator = NSPersistentStoreCoordinator.init(managedObjectModel: NSManagedObjectModel(contentsOf: modelURL)!)

    //originaly its
    let container = NSPersistentContainer(name: "DbModel")
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
        if let error = error as NSError? {
            fatalError("Unresolved error \(error), \(error.userInfo)")
        }
    })
    return container
}()

有人可以提供一个关于我应该如何初始化容器的示例吗?

【问题讨论】:

    标签: ios sqlite encryption encrypted-core-data-sql


    【解决方案1】:

    我将 Objective-C 翻译成 Swift 并且成功了,我只是添加了这行

    let container = NSPersistentContainer(name: "DbModel")
    // Begin of my code
    let cOpts : NSDictionary = [
                EncryptedStore.optionPassphraseKey() : "123deOliveira4", //your Key
                EncryptedStore.optionFileManager() : EncryptedStoreFileManager.default()
            ]
    let desc = try! EncryptedStore.makeDescription(options: cOpts as! [AnyHashable : Any], configuration: nil)
    container.persistentStoreDescriptions = [desc]
    //End
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
    })
    

    【讨论】:

    • 我也是这样做的。但我需要知道,在我的 appdelegate 文件中添加以上行后,我的数据加密会自动启动吗?或者我必须在保存数据时或在 saveContext() 方法中添加一些额外的代码?
    • 我记得数据文件将通过这样做进行加密,您可以通过尝试打开模拟器创建的文件来检查它。如果它请求密码短语密钥,它就会被加密。
    • 此代码导致错误Error Domain=Foundation._GenericObjCError Code=0 "(null) at:let DelTable = NSBatchDeleteRequest(fetchRequest: NSFetchRequest<NSFetchRequestResult>(entityName: "MyTable")) do { try managedContext.execute(DelTable) print("all data deleted from entity: MyTable ") } catch { let nserror = error as NSError print(nserror) }
    • 虽然它确实锁定了我的 *.sqlite 文件。我尝试在 DB 浏览器应用中打开它,它要求我输入密码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多