我想在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驱动程序。唯一需要注意的是

  • 库和头文件名相同,并且可用,并且
  • 您可以使用SQLCipher的PRAGMA指令手动初始化加密参数,然后才能访问任何数据

  • http://sqlcipher.net/sqlcipher-api/

    如果您在Linux上并且不能(或不想)修改系统,请在sqlite下修改configure脚本,以便它找到sqlcipher header 并与正确的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进行配置

    关于c++ - 是否可以在SQLCipher上使用QSqlDatabase?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22423280/

    10-10 22:34