https://blog.51cto.com/u_15127501/4373119

整合sqlite代码开源的sqlite中没有实现加密的功能,所以如果需要加密功能,需要自己实现 sqlite3_keysqlite3_rekey 等相关函数不过开源的 ​ ​wxsqlite3​​中已经实现了加密,所以只要将这里的代码整合到qt 中就行,主要是将其实现的 sqlite3_key sqlite3_rekey 等函数添加到 qt 的 sqlite3.c 中这里有一份已经整合好的代码​ ​qt_sqlite_driver.zip​直接解压到 qtbase\src\3rdparty 下就行整合主要的修改如下:修改了 sqlite.pri 编译配置文件修改了 sqlite\sqlite3.c 文件增加了 sqlite\codec.c(.h) sqlite\rijndael.c(.h) sqlite\sha2.c(.h)修改qt源码打开 qtbase\src\sql\kernel\qsqldriver.h,声明两个新的接口12345678910111.2.3.4.5.6.7.8.9.10.11./** * @brief 设置数据库密码 * @param key - 密码 */virtual bool setKey(const QString& key);

/** * @brief 重置数据库密码 * @param key - 密码 */virtual bool resetKey(const QString& key);1.2.3.4.5.6.7.8.9.10.11.

打开 qtbase\src\sql\kernel\qsqldriver.cpp,给新增的两个接口增加一个默认实现1234567891.2.3.4.5.6.7.8.9.bool QSqlDriver::setKey(const QString&){ return false;}

bool QSqlDriver::resetKey(const QString&){ return false;}1.2.3.4.5.6.7.8.9.

打开 qtbase\src\sql\drivers\sqlite\qsql_sqlite_p.h,继承那两个新的接口12345678910111.2.3.4.5.6.7.8.9.10.11./** * @brief 设置数据库密码 * @param key - 密码 */bool setKey(const QString& key);

/** * @brief 重置数据库密码 * @param key - 密码 */bool resetKey(const QString& key);1.2.3.4.5.6.7.8.9.10.11.

打开 qtbase\src\sql\drivers\sqlite\qsql_sqlite_p.cpp,继承那两个新的接口1234567891011121314151617181920211.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.登录后复制 bool QSQLiteDriver::setKey(const QString& key){ Q_D(QSQLiteDriver); if (d->access) { return (SQLITE_OK == sqlite3_key(d->access, key.toStdString().c_str(), key.toStdString().size())); }

return false;}

bool QSQLiteDriver::resetKey(const QString& key){ Q_D(QSQLiteDriver); if (d->access) { return (SQLITE_OK == sqlite3_rekey(d->access, key.toStdString().c_str(), key.toStdString().size())); }

return false;}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.

编译qt​ ​动态编译 Qt 5.6​​

​ ​静态编译 Qt 5.6​​

 

http://wangjie.rocks/2016/05/10/qt-sqlite-cipher/-----------------------------------给 Qt sqlite 增加加密功能https://blog.51cto.com/u_15127501/4373119

推荐链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。