给 Qt sqlite 增加加密功能

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,声明两个新的接口
1
2
3
4
5
6
7
8
9
10
11
1.
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,给新增的两个接口增加一个默认实现
1
2
3
4
5
6
7
8
9
1.
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,继承那两个新的接口
1
2
3
4
5
6
7
8
9
10
11
1.
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,继承那两个新的接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1.
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

posted @ 2022-12-07 09:28  China Soft  阅读(227)  评论(0编辑  收藏  举报