SQLite数据库添加密码

背景:

最近发现软件在运行过程中,数据库文件暴露在外面,而且直接拷贝后就能打开,发现这样来说数据并不是很安全
我使用的开发环境是VS QT,使用navicat创建了一个数据库

准备

百度搜索了一些资料和博客,发现QSqlite 本身是不支持这个加密功能的。然后说有这个叫 QtCipherSqlitePlugin 的一个QT扩展插件。

下载地址: 点击这里

开始编译库

1、然后使用VS for QT 工具打开这个pro文件:

在这里插入图片描述

2、编译一下这三个项目:

在这里插入图片描述

注意: 这个有个小问题,如果你的是vs2022,那么这个地方需要修改一下平台工具集:

在这里插入图片描述
编译完成以后找到对应的文件夹:
在这里插入图片描述

目录1:

在这里插入图片描述

目录2:
在这里插入图片描述

测试

1、新建一个vs工程

然后包含对应的头文件:

#include <qsqldatabase.h>
#include <qsqlquery.h>
#include <qsqlerror.h>
#include <qdebug.h>

测试是否数据库驱动是否存在:

qDebug() << "Available drivers:" << QSqlDatabase::drivers();

如果输出的结果包含这个新的数据库驱动,那么证明没问题

Available drivers: ("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7", "SQLITECIPHER")

最后一个就是我们新配置的数据库驱动

注意:

数据库创建密码只能创建,一次,如果创建多次就会报错!!!
所以,当我们第一次给数据库创建密码时:


第一步

这三行是设置数据库,这里我先在navicat中创建了一个不带密码的普通SQLite数据库,命名为test1.db

QString DB_FILE_PATH = "test1.db";
QSqlDatabase dbconn = QSqlDatabase::addDatabase("SQLITECIPHER");//添加SQLITECIPHER驱动
dbconn.setDatabaseName(DB_FILE_PATH);

第二步

这一行代表的是创建数据库的密码,请牢记,这个数据库这行代码只调用一次调用一次用一次一次

下一次再打开数据库的时候,直接注释掉这一行。

dbconn.setConnectOptions("QSQLITE_CREATE_KEY;"); 

如果想更新密码则使用

dbconn.setConnectOptions("QSQLITE_UPDATE_KEY"); //更新密码

如果想删除密码则使用

dbconn.setConnectOptions("QSQLITE_REMOVE_KEY"); //删除密码

第三步

这一行代表设置加密的规则:

dbconn.setConnectOptions("QSQLITE_USE_CIPHER=aes128cbc;"); 

加密方式总共有五种:

  1. aes128cbc
  2. aes256cbc
  3. chacha20
  4. sqlcipher
  5. rc4

默认的情况下,好像使用的是第四种sqlcipher
PS:
但是,据说这种方法在navicat中打不开,所以,使用的是aes128cbc的加密方式。
还有的大佬说,需要这样来设置:

dbconn.setConnectOptions("QSQLITE_USE_CIPHER=sqlcipher;SQLCIPHER_LEGACY=1; SQLCIPHER_LEGACY_PAGE_SIZE=4096; QSQLITE_CREATE_KEY")

据说这样在代码中创建的数据库才能在navicat中打开,但是我没有测试这种方式,如果你们按照上一种设置解决不了,可以试试这样。


第四步

然后就是设置密码了:

dbconn.setPassword("123456");

第五步

打开navicat,新建一个连接:
在这里插入图片描述
简单设置一下:
在这里插入图片描述
然后测试一下连接:
在这里插入图片描述
报错了,别慌,这样来解决:
在这里插入图片描述
然后就会发现:

在这里插入图片描述
创建完成后,双击这个连接的时候,会提示要输入密码的哦,就是刚才程序里设置的123456.
👆这上面作为第一种方式:👆





第二种方式也就出来了:


我们可以使用navicat的时候直接创建一个带密码的sqlite数据库:

第一步:

在这里插入图片描述

第二步

在这里插入图片描述
看吧,同样也能够创建一个具有密码的sqlite数据库
这个会简单一些,但是,如果你程序中使用的时候,记得还是要加载我们编译的的那个数据库的驱动。

这个搞了我两天,终于算是弄出来了,前面使用QTCreator编译这个库的时候一直出问题,怎么放进去都不好用,所以,后来又找了一个新的,然后用VS编译后,就可以使用了。


希望可以帮到你!🌹🌹🌹🌹🌹🌹


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值