2016-09-21 172 views
9

我已经使用FMDB在Swift中创建SQLite数据库。但现在我想加密它。那么任何人都可以帮助我使用'FMDB/SQLCipher'加密和解密SQLite数据库的Swift版本吗?我无法找到一个很好的教程来理解这一点。如何在Swift中使用'FMDB/SQLCipher'进行加密和解密?

+0

您需要打开明文数据库并将其复制到加密的数据库中,然后删除明文,如SQLCipher文档中所述:https://discuss.zetetic.net/t/how-to-encrypt -a-plaintext-sqlite-database-to-use-sqlcipher-and-avoid-file-is-encrypted-or-is-not-a-database-errors/868我不知道fmdb,所以我不是能够为此操作提供任何API级别的指导。 – Palpatim

+0

你能告诉,你如何添加FMDB框架?我想我可能会帮忙。 –

回答

0

根据此detailed tutorial,您必须使用Cocoapods加载正确的库和配置。本教程介绍了Objective-C的解决方案,但你可以在评论找个翻译斯威夫特:

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为完整的解释。

+0

我试过这个,但是当数据库被创建时它会崩溃。如果我在没有SCLCipher的情况下安装FMDB,那么一些代码可以正常工作。我使用Xcode 8和Swift 3。 – Salmo

相关问题