如何在Swift中使用'FMDB / SQLCipher'进行加密和解密?

时间:2016-09-21 16:47:21

标签: ios swift fmdb sqlcipher

我使用FMDB在Swift中创建SQLite数据库。但现在我想加密它。那么有谁能帮助我使用'FMDB / SQLCipher'加密和解密SQLite数据库的Swift版本?我无法找到一个很好的教程来理解这一点。

2 个答案:

答案 0 :(得分:0)

根据此detailed tutorial,您必须使用Cocoapods来加载正确的库和配置。本教程描述了Objective-C解决方案,但您可以在评论中找到Swift中的翻译:

var db: COpaquePointer = nil;
let databasePath = FileUtils.getPath(“app.db”)
var ecDB = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0].stringByAppendingPathComponent(“encrypted.sqlite”)

let result = String.fromCString(“ATTACH DATABASE \(ecDB) AS encrypted KEY TaP”)

if (sqlite3_open(databasePath, &db) == SQLITE_OK) {

   // Attach empty encrypted database to unencrypted database
   sqlite3_exec(db, result!, nil, nil, nil);

   // export database
   sqlite3_exec(db, “SELECT sqlcipher_export(‘encrypted’);”, nil, nil, nil);

   // Detach encrypted database
   sqlite3_exec(db, “DETACH DATABASE encrypted;”, nil, nil, nil);

   sqlite3_close(db);
}
else {
   sqlite3_close(db);
   sqlite3_errmsg(db);
}

阅读detailed tutorial以获取完整说明。

答案 1 :(得分:0)

下面是一个示例代码,该示例代码在作为FMDatabase对象的数据库上设置了密钥。您必须使用setKey()方法才能访问加密的数据库。我还编写了FMDB库的包装器,这将使您处理加密数据库的工作变得更加轻松。

这里是:https://github.com/SagarSDagdu/SDDatabase/ 它还有大量的文档和示例代码。

func executeUpdate(onDatabase database:FMDatabase, withStatement statement:String, values: [Any]?) -> Bool {
    var success:Bool = false
    do {
        database.logsErrors = self.loggingEnabled
        if let key = self.dbPassKey { //Use your key here
            database.setKey(key)
        }
        try database.executeUpdate(statement, values:values)
        success = true
    }
    catch {
        print("Error in \(#function) with query: \(statement), error : \(error)")
    }
    return success
}