zoukankan      html  css  js  c++  java
  • sqlite3加密

    最近因为工作原因,需要使用sqlite数据库。sqlite数据库小并且使用方便,感觉挺不错的。但有一个不足就是没有对数据库进行加密,不过好的是sqlite预留有加密的接口,我们可以直接调用即可。我也是参考网上的资料对数据库进行加密:
    sqlite数据库默认没有加密功能,对一些需要对工程文件进行保密的场合产生了不便,本文以QT4.4.3为例,
    对qt源代码中的sql模块进行修改,为qt集成的sqlite数据库添加了加密功能.
    1. /wxsqlite3_prj/sqlite3目录 下的文件进行编译生成 sqlite3.lib
    2 将 sqlite3.h 和 上一步骤生成的sqlite3.lib 拷贝到目录 ?:Qt4.4.3srcpluginssqldriverssqlite 中.
    3 将 ?:Qt4.4.3srcpluginssqldriverssqlite 目录下的sqlite.pro文件修改为:
    TARGET = qsqlite
    # 不使用qt自带的sqilte源码文件,而是使用外部生成的库
    win32:LIBS += sqlite3.lib
    #
    HEADERS = ../../../sql/drivers/sqlite/qsql_sqlite.h
    SOURCES = smain.cpp
    ../../../sql/drivers/sqlite/qsql_sqlite.cpp
    !system-sqlite:!contains( LIBS, .*sqlite.* ) {
    CONFIG(release, debug|release):DEFINES *= NDEBUG
    DEFINES += SQLITE_CORE SQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_COMPLETE
    # INCLUDEPATH += ../../../3rdparty/sqlite
    # SOURCES += ../../../3rdparty/sqlite/sqlite3.c
    } else {
    LIBS *= $$QT_LFLAGS_SQLITE
    QMAKE_CXXFLAGS *= $$QT_CFLAGS_SQLITE
    }
    include(../qsqldriverbase.pri)
    4 修改 ?:Qt4.4.3srcsqldriverssqlite 目录下的文件 qsql_sqlite.cpp
    需要修改的函数 bool QSQLiteDriver::open(),函数体修改为:
    bool QSQLiteDriver::open(const QString & db, const QString &, const QString &, const QString &, int, const QString &conOpts)
    {
    if (isOpen())
    close();
    if (db.isEmpty())
    return false;
    if (sqlite3_open16(db.constData(), &d->access) == SQLITE_OK) {
    sqlite3_busy_timeout(d->access, qGetSqliteTimeout(conOpts));
    setOpen(true);
    setOpenError(false);
    //添加加密功能 "Trucc"为加密密匙,5为密匙长度
    sqlite3_key( d->access, "Trucc", 5);
    return true;
    } else {
    setLastError(qMakeError(d->access, tr("Error opening database"),
    QSqlError::ConnectionError));
    setOpenError(true);
    return false;
    }
    }
    5 编译 ?:Qt4.4.3srcpluginssqldriverssqlite 下的工程, 在目录 ?:Qt4.4.3pluginssqldrivers 中生成添加加密功能的sqlite
    相应库文件.
    摘自:http://apps.hi.baidu.com/share/detail/21604459
    可当我编译到最后一步的时候,出现了‘sqlite3_key’ was not declared in this scope 的错误信息,我死活不知道为啥,只出现这个错误,sqlite3.h文件也已经进行了引入,可为啥还是出错呢?今天静下心来,阅读sqlite3.h文件的sqlite3_key函数,发现在它的上面有一句
    #ifdef SQLITE_HAS_CODEC
    我突然若有所思,这句话的意思不就是如果定义了SQLITE_HAS_CODEC才可以使用sqlite3_key函数嘛。既然这样,我们只要在提出错误的文件中进行定义即可。这样我将出现找不到sqlite3_key函数的qsql_sqlite.cpp文件头部加上:
    #if defined SQLITE_HAS_CODEC
    在文件的末尾加上:
    #endif
    重新进行编译,编译通过。
    看来遇到问题,还是要就下心来。慢慢的,细心的分析,相信问题总能解决的。
     
  • 相关阅读:
    安装VMtools vim编辑器的使用 压缩包命令 Linux下的用户管理 (第三天)
    VM虚拟机安装 常用Linux命令 网卡配置 (第二天)
    数据库的交互模式 常用的dos命令 (第一天)
    Validate US Telephone Numbers FreeCodeCamp
    Arguments Optional FreeCodeCamp
    Everything Be True FreeCodeCamp
    Binary Agents FreeCodeCamp
    Steamroller FreeCodeCamp
    Drop it FreeCodeCamp
    Smallest Common Multiple FreeCodeCamp
  • 原文地址:https://www.cnblogs.com/blogpro/p/11426894.html
Copyright © 2011-2022 走看看