[数据库] SQLite数据库添加密码

14991 0
Honkers 2025-3-8 16:00:56 来自手机 | 显示全部楼层 |阅读模式

背景:

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

准备

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

下载地址: 点击这里

开始编译库

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

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

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


编译完成以后找到对应的文件夹:

目录1:

目录2:

测试

1、新建一个vs工程

然后包含对应的头文件:

  1. #include <qsqldatabase.h>
  2. #include <qsqlquery.h>
  3. #include <qsqlerror.h>
  4. #include <qdebug.h>
复制代码

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

  1. qDebug() << "Available drivers:" << QSqlDatabase::drivers();
复制代码

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

  1. Available drivers: ("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7", "SQLITECIPHER")
复制代码

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

注意:

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


第一步

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

  1. QString DB_FILE_PATH = "test1.db";
  2. QSqlDatabase dbconn = QSqlDatabase::addDatabase("SQLITECIPHER");//添加SQLITECIPHER驱动
  3. dbconn.setDatabaseName(DB_FILE_PATH);
复制代码

第二步

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

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

  1. dbconn.setConnectOptions("QSQLITE_CREATE_KEY;");
复制代码

如果想更新密码则使用

  1. dbconn.setConnectOptions("QSQLITE_UPDATE_KEY"); //更新密码
复制代码

如果想删除密码则使用

  1. dbconn.setConnectOptions("QSQLITE_REMOVE_KEY"); //删除密码
复制代码

第三步

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

  1. dbconn.setConnectOptions("QSQLITE_USE_CIPHER=aes128cbc;");
复制代码

加密方式总共有五种:

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

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

  1. dbconn.setConnectOptions("QSQLITE_USE_CIPHER=sqlcipher;SQLCIPHER_LEGACY=1; SQLCIPHER_LEGACY_PAGE_SIZE=4096; QSQLITE_CREATE_KEY")
复制代码

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


第四步

然后就是设置密码了:

  1. dbconn.setPassword("123456");
复制代码

第五步

打开navicat,新建一个连接:


简单设置一下:

然后测试一下连接:

报错了,别慌,这样来解决:

然后就会发现:


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





第二种方式也就出来了:


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

第一步:

第二步


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

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


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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行