是否可以将QSqlDatabase与SQLCipher一起使用?

Is it possible to use QSqlDatabase along SQLCipher?

本文关键字:一起 SQLCipher QSqlDatabase 是否      更新时间:2023-10-16

我想在Qt中使用加密的SQLite数据库,是否可以通过QSqlDatabase连接到数据库并使用SQLCipher加密或解密数据库?例如,我经常连接到SQLite数据库文件,像这样:

QSqlDatabase db = QSqlDatabase::addDatabase( "QSQLITE","Main_Connection" );
db.setDatabaseName( "Main.sqlite" );
db.open();

我想知道是否可以使用SQLCipher API来解密数据库,并使用Qt数据库模块来连接和操作数据库?

由于API是相同的,您应该能够使用SQLCipher构建Qt的SQLITE驱动程序而无需修改。唯一需要注意的是,

  1. 库和头文件名相同,并且是可用的,并且
  2. 在访问任何数据之前,使用SQLCipher的PRAGMA指令手动初始化加密参数
http://sqlcipher.net/sqlcipher-api/

如果您在Linux上并且不能(或不想)修改系统,那么在sqlite下修改configure script,这样它就可以找到sqlcipher头并链接到正确的libsqlcipher库。例如,这个改变允许我用SQLCipher来构建SQLite插件,

--- a/configure
+++ b/configure
@@ -4736,12 +4736,12 @@ for _SQLDR in $CFG_SQL_AVAILABLE; do
             if [ "$CFG_SQL_sqlite" != "no" ]; then
                 SQLITE_AUTODETECT_FAILED="no"
                 if [ "$CFG_SQLITE" = "system" ]; then
-                    if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists sqlite3 2>/dev/null; then
+                    if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists sqlite3override 2>/dev/null; then
                         QT_CFLAGS_SQLITE=`$PKG_CONFIG --cflags sqlite3 2>/dev/null`
                         QT_LFLAGS_SQLITE=`$PKG_CONFIG --libs sqlite3 2>/dev/null`
                     else
-                        QT_CFLAGS_SQLITE=
-                        QT_LFLAGS_SQLITE="-lsqlite3 -lz"
+                        QT_CFLAGS_SQLITE="-I/usr/include/sqlcipher"
+                        QT_LFLAGS_SQLITE="-lsqlcipher -lz"
                     fi
                     if compileTest unix/sqlite "SQLite" $QT_LFLAGS_SQLITE $QT_CFLAGS_SQLITE; then
                         if [ "$CFG_SQL_sqlite" = "auto" ]; then

那么你需要配置-system-sqlite