给 Qt sqlite 增加加密功能
整合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/**
* @brief 设置数据库密码
* @param key - 密码
*/
virtual bool setKey(const QString& key); /**
* @brief 重置数据库密码
* @param key - 密码
*/
virtual bool resetKey(const QString& key);打开 qtbase\src\sql\kernel\qsqldriver.cpp,给新增的两个接口增加一个默认实现
1
2
3
4
5
6
7
8
9bool QSqlDriver::setKey(const QString&)
{
return false;
} bool QSqlDriver::resetKey(const QString&)
{
return false;
}打开 qtbase\src\sql\drivers\sqlite\qsql_sqlite_p.h,继承那两个新的接口
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);打开 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
21bool 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;
}
编译qt
http://wangjie.rocks/2016/05/10/qt-sqlite-cipher/
给 Qt sqlite 增加加密功能的更多相关文章
- SQLite XXTea加密学习
这几天优化数据库读写,移植了xxtea加密到最新的数据库sqlite 3.12.2里,一些好文章放在这里.移植后,数据库读写性能异常优秀! 这几天又发现,数据库还是发生了无法写入情况,数据库崩溃掉了. ...
- [转载]TexturePacker 如何使用自带的加密功能及在cocos2dx中的使用
在cocos2dx中使用纹理图集是非常节省资源的,在这里推荐 TexturePacker,而且 TexturePacker工具的加密接口也非常的好用,下面就来介绍一下... TexturePacker ...
- 学习ASP.NET Core Razor 编程系列九——增加查询功能
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- SQLite Encryption(加密)新姿势
什么是SQLite? SQLite是一个C语言实现的小型.快速.自包含.高可靠性.功能全面的SQL数据库引擎. 起因: 刚好项目上有个需求,需要使用VS2019+.Net famework 4.6.1 ...
- Android Sqlite数据库加密
Android使用的是开源的SQLite数据库,数据库本身没有加密,加密思路通常有两个: 1. 对几个关键的字段使用加密算法,再存入数据库 2. 对整个数据库进行加密 SQLite数据库加密工具: 收 ...
- 如何Windows分页控件中增加统计功能
在我的博客里面,很多Winform程序里面都用到了分页处理,这样可以不管是在直接访问数据库的场景还是使用网络方式访问WCF服务获取数据,都能获得较好的效率,因此WInform程序里面的分页控件的使用是 ...
- 如何对具有端点加密功能的LINE进行取证
LINE又有新动作了,这回默认即启用了端点加密功能,强调确保传输过程的安全,且让我们来看看如何对付新版的LINE. 有启用Letter Sealing就会在昵称前多个锁头的图像. 这手机据犯嫌供称,落 ...
- 为ecshop红包增加”转赠”功能
ecshop促销中使用红包激励用户购物,要想炒热活动,红包就需要有物以稀为贵的感觉.有人求有人送,这样红包之间的转赠有助于拉动第二梯队的顾客.但是如果已经把红包添加到自己的账户了怎么办?如果ecsho ...
- Dynamics CRM 2013 初体验(3):新增加的功能
新系统除了修补系统历史漏洞外当然还会添加些比较有意思的新功能,至于这些新功能是否好用那就得看它是否能经过咱们这些使用者的考验了.Dynamics CRM 2013系统将不再支持Dynamics CRM ...
随机推荐
- SecureCRT 向多个终端发送相同命令
选中view,选择command windows 在下方出现的窗口中右键,接下来在窗口中输入命令即可,可以一定程度上代替分发脚本,具体请参考https://www.cnblogs.com/tele-s ...
- hadoop 3.x 启动过程中 Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
出现这种状况是因为当前账号没有配置ssh免密登录 进入到以下目录,查看是否生成过秘钥对,如果有的话直接ssh-copy-id 主机名 没有的话执行ssh-keygen -t rsa后再重新执行ssh- ...
- docker部署netcore应用(二)
基于第一章已经安装好了docker,这次将把netcore应用部署到docker容器中 开发工具vs2017,准备个DotNet Core的Console应用程序,测试一下 发布DockerTest项 ...
- 构建工具Gradle
1.Summary 从Android团队开始宣布放弃Eclipse转投Android Studio时,构建工具Gradle进入了Android开发者的视野.而随着热修复.插件化.编译时注解的流行, ...
- 字符串、对象、数组操作方法、json方法
1.字符串操作方法 1.charAt * 作用 * 通过索引找字符 ...
- 关于js的window.open()
window.open是javascript函数,该函数的作用是打开一个新窗口或这改变原来的窗口,不过一般用来的是打开新窗口,因为修改原来的网页地址,可以有另一个函数,那就是window.locati ...
- ios中 微信点击 某个元素 该元素会闪一下
-webkit-user-select: none;-webkit-tap-highlight-color: rgba(200,200,200,0);
- Dual Dijkstra search for planning multiple paths
The dual Dijkstra search for planning multiple paths is performed by: (1) calculating a first shorte ...
- jQuery插件接口的实现,jquery.extend
http://www.imooc.com/code/3403 如果jQuery没有插件接口的设计,那么他就像个光杆司令没有兵,就是没有手下,只有自己一个封闭的城堡.因此jQuery城堡需要设计一个大门 ...
- Python 动图、动画制作 —— moviepy、matplotlib.animation
进入命令行界面(windows ⇒ cmd),下载安装,pip install moviepy 0. figure 的成员函数 # 创建 figure fig, ax = plt.subplots() ...