QT使用WxSQLite3打开加密数据库并查询

QT使用WxSQLite3打开加密数据库并查询

这篇文章主要目的是让大家快速实现打开加密sqlite数据库的功能,并没有对其中所用的库进行详细说明,还请见谅

一、SQLite3MultipleCiphers

这个库集成了多种wxsqlite的加密算法,可以通过在代码中随意切换不同的加密算法。

github地址:https://github.com/utelle/SQLite3MultipleCiphers?tab=readme-ov-file

编译

我使用的是release 2.1.2版本的源码。

直接在vscode中打开使用cmake构建,选择和你QT项目对应的编译工具,CMakeLists基本不用修改,直接编译就行了。

编译完成后得到:

libsqlite3mc.dll

libsqlite3mc.dll.a

头文件我是从sqlite3mc-2.1.2-sqlite-3.50.0-win32.zip中获取的
https://github.com/utelle/SQLite3MultipleCiphers/releases/download/v2.1.2/sqlite3mc-2.1.2-sqlite-3.50.0-win32.zip

二、QT中实现

引用libsqlite3mc

在.pro文件中添加如下,我把libsqlite3mc.dll.a放在项目目录的libs文件夹中

LIBS += -L$$PWD/libs -llibsqlite3mc.dll

头文件引用:

#放在项目目录的utils/wxsqlite文件夹中

INCLUDEPATH += $$PWD/utils/wxsqlite

不要忘了libsqlite3mc.dll要放在编译出来的测试程序目录下哦

功能代码-打开数据库测试

部分代码由AI生成

javascript 复制代码
// 加密算法类型
QList<QString> CODEC_TYPE_NAME_LIST = {"AEGIS", "Ascon-128", "SQLCipher", "System.Data.SQLite: RC4", "ChaCha20", "wxSQLite3: AES 128 Bit", "wxSQLite3: AES 256 Bit"};
QList<QString> CODEC_TYPE_LIST = {"aegis", "ascon128", "sqlcipher", "rc4", "chacha20", "aes128", "aes256"};

sqlite3* db;
// db_path是数据库文件路径
if (SQLITE_OK != sqlite3_open(db_path.toStdString().c_str(), &db)) {
   ui->label_test_status->setText(tr("数据库打开失败"));
   return;
}

// 设置密码
bool result = true;
// cipher是加密算法类型
std::string cipher = CODEC_TYPE_LIST[ui->comboBox_codec_type->currentIndex()].toStdString().c_str();
std::string pragma = "PRAGMA cipher = '" + cipher + "';";
result &= SQLITE_OK == sqlite3_exec(db, pragma.c_str(), nullptr, nullptr, nullptr);
pragma = "PRAGMA key = '" + password.toStdString() + "';";
result &= SQLITE_OK == sqlite3_exec(db, pragma.c_str(), nullptr, nullptr, nullptr);
if (!result) {
   ui->label_test_status->setText(tr("设置密码失败"));
   return;
}

char* errMsg = nullptr;
// 执行查询
const char* sql = "SELECT name FROM sqlite_master WHERE type='table';";
if (sqlite3_exec(db, sql, nullptr, nullptr, &errMsg) != SQLITE_OK) {
   ui->label_test_status->setText(errMsg);
   sqlite3_free(errMsg);
} else {
   ui->label_test_status->setText(tr("测试成功"));
}

// 关闭数据库
sqlite3_close(db);

简单地写一个QT界面:

测试Demo

只要成功打开了数据库后续的操作就是传统的sqlite代码了,这有一个简单的demo,大家有需要的可以下载试试看,有问题可以评论交流一下。
https://gitee.com/gjhjsan/qt-wxsqlite3-demo

相关推荐
t198751281 小时前
解决MySQL删除/var/lib/mysql下的所有文件后无法启动的问题
数据库·mysql·adb
大佐不会说日语~4 小时前
Redis高频问题全解析
java·数据库·redis
会飞的灰大狼4 小时前
初识数据库
数据库
旋风菠萝6 小时前
JVM易混淆名称
java·jvm·数据库·spring boot·redis·面试
AWS官方合作商7 小时前
Amazon RDS for MySQL成本优化:RDS缓存降本实战
数据库·mysql·aws
77qqqiqi7 小时前
解决Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required报错问题
java·数据库·微服务·mybatis·mybatisplus
机器视觉知识推荐、就业指导7 小时前
手动开发一个TCP客户端调试工具(一):了解Qt中TCP通信原理与核心类
网络·qt·tcp/ip
眺望电子-ARM嵌入式8 小时前
技术笔记 | Ubuntu 系统 OTA 升级全流程详解
数据库·postgresql·php
程序猿小D9 小时前
Java项目:基于SSM框架实现的校园活动资讯网管理系统【ssm+B/S架构+源码+数据库+毕业论文+远程部署】
java·数据库·mysql·spring·毕业设计·ssm框架·校园活动
数据要素X9 小时前
【数据架构08】数字化转型架构篇
大数据·数据库·数据仓库·架构·数据库架构