SQLite数据库添加密码

news2025/1/11 19:40:31

背景:

最近发现软件在运行过程中,数据库文件暴露在外面,而且直接拷贝后就能打开,发现这样来说数据并不是很安全
我使用的开发环境是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编译后,就可以使用了。


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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1635840.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kube-prometheus部署到 k8s 集群

文章目录 **修改镜像地址****访问配置****修改 Prometheus 的 service****修改 Grafana 的 service****修改 Alertmanager 的 service****安装****Prometheus验证****Alertmanager验证****Grafana验证****卸载****Grafana显示时间问题** 或者配置ingress添加ingress访问grafana…

《深入解析WIndows操作系统》第9章读书笔记

1、闪存类型&#xff1a;常见的闪存类型有NOR和NAND。NOR闪存在操作上最接近RAM&#xff0c;它的每个字节都可以被独立地寻址&#xff0c;而NAND闪存则被组织成以块为单位&#xff0c;就像磁盘一样。NOR类型的闪存用来设计保存计算机主板上的BIOS&#xff0c;而NAND类型的闪存被…

Go语言的包管理工具go mod与之前的GOPATH有什么区别?

在深入探讨Go语言的包管理工具go mod与之前的GOPATH之间的区别之前&#xff0c;我们首先需要理解这两个概念各自的作用和背景。 GOPATH时代 在Go语言早期版本中&#xff0c;GOPATH是一个非常重要的环境变量。它告诉Go工具链在哪里查找你的Go代码、第三方库以及编译后的二进制…

字节跳动(社招)四面算法原题

TikTok 进展 又是一期定时汇报 TikTok 进展的推文。 上周&#xff0c;美国总统拜登签署了价值 950 亿美元的一揽子对外援助法案。 该法案涉及强制字节跳动剥离旗下应用 TikTok 美国业务&#xff0c;即 针对 TikTok 非卖即禁的"强抢行为"开始进入九个月&#xff08;27…

JWT是什么?如何使用?

JWT是什么&#xff1f;如何使用&#xff1f; 前言什么是JWT&#xff1f;概念工作方式JWT的组成HeaderPayloadSignatrue 实战引入依赖自定义注解定义实体类定义一个JWT工具类业务校验并生成token定义拦截器配置拦截器定义接口方法并添加注解开始验证 使用场景注意事项 JWT与传统…

【练习1】

1.字符串最后一个单词的长度 #include <iostream> #include<string> using namespace std;int main() {string a;int res,i,flag;flag1;i0;getline(cin,a);res0;while(flag1){if(a[i]! ){resres1;}else{res0;}if(ia.length()-1){flag-1;}i;}cout<<res<<…

服务器遭受攻击后的黑洞状态应对策略及防护机制解析

引言 在网络安全领域中&#xff0c;当服务器遭受大规模DDoS攻击或其他恶意流量冲击时&#xff0c;为了保护服务的稳定性和其他正常用户的使用体验&#xff0c;往往会采取一种紧急防护手段——将服务器置于黑洞状态。所谓黑洞状态&#xff0c;即网络服务商暂时屏蔽掉对服务器的…

与Apollo共创生态:让汽车更聪明,让出行更简单

目录 前言Apollo X 企业解决方案Studio X 企业协同开发工具链Apollo开放平台携手伙伴共创生态Apollo开发平台生态共创计划 前言 百度2013年开始布局自动驾驶&#xff0c;2017年推出全球首个自动驾驶开放平台Apollo。目前百度Apollo已经在自动驾驶、智能汽车、智能地图等领域拥有…

Agisoft Metashape 自定义底图

Agisoft Metashape 自定义底图 前言 Agisoft Metashape 从2.0.2 版本开始,Agisoft Metashape Professional 和 Agisoft Viewer 支持自定义底图,可用于模型和正射视图模式。本文以添加Esri World Image卫星底图图源为例,介绍Agisoft Metashape 自定义底图的方法。 添加自定…

STM32F103(Cubemx)驱动ST7789

源码来源&#xff1a; 中景园电子的标准库使用SPI驱动ST7789的TFT_LCD彩屏&#xff0c;将标准库修改为HAL库使用 Cubemx配置&#xff1a; 时钟配置 SPI配置&#xff1a; 引脚配置 源码修改 修改原有的SPI发送函数&#xff0c;并把原有的引脚初始化注释&#xff0c;不需要…

smac 路径优化器分析——距离成本和代价地图成本分析

参考 泰勒级数直观详解 前向差分&#xff0c;后向差分&#xff0c;中心差分 相关文章 smac 路径优化器分析——平滑度成本分析 smac 路径优化器分析——曲率成本分析 距离成本 距离成本函数 用优化后的点与原路径点的欧氏距离的平方作为成本。 下图中蓝色原点是原路径点…

73、栈-柱状图中最大的矩形

思路&#xff1a; 矩形面积&#xff1a;宽度*高度 高度如何确定呢&#xff1f;就是在宽度中最矮的元素。如何确定宽度&#xff0c;就是要确定左右边界。 当我们在处理直方图最大矩形面积问题时&#xff0c;遇到一个比栈顶柱子矮的新柱子时开始计算面积的原因关键在于如何确定…

大数据组件之Storm详解

Storm 是一个免费并开源的分布式实时计算系统&#xff0c;具有高容错性和可扩展性。它能够处理无边界的数据流&#xff0c;并提供了实时计算的功能。与传统的批处理系统相比&#xff0c;Apache Storm 更适合处理实时数据。 让我们深入了解一下 Storm&#xff1a; 1.Storm 简介…

【自研网关系列】过滤器链 -- 灰度发布过滤器

&#x1f308;Yu-Gateway&#xff1a;&#xff1a;基于 Netty 构建的自研 API 网关&#xff0c;采用 Java 原生实现&#xff0c;整合 Nacos 作为注册配置中心。其设计目标是为微服务架构提供高性能、可扩展的统一入口和基础设施&#xff0c;承载请求路由、安全控制、流量治理等…

图像预处理工具_CogImageFileTool

CogImageFileTool工具可以用来将单张图片或idb格式的图片数据库读入内存。也可使用CoglmageFileTool工具将图片插入到.idb数据库里。 添加工具 参数介绍 文件名 写入模式 读取模式 删除

k8s集群Grafana精选dashboard页面

文章目录 参考文档 Grafana自选模板推荐模板&#xff1a;13332、13824、14518Grafana默认配置我们选择 Node Exporter/Nodes 的 Dashboard 进去&#xff1a;点击 Kubernetes/Networking/Cluster 进去使用模板查看结果 Grafana接入Prometheus数据Grafana添加监控模板导入 1860_r…

Hotcoin Research|玩赚WEB3:Seraph零成本赚取技巧

在《Seraph》这款游戏里&#xff0c;要提升自己的游戏技能和体验&#xff0c;了解如何免费赚取游戏货币灵魂晶石并挑战游戏主线是非常重要的。你可以通过卖东西、参加虚空异界地图和混沌秘境来在游戏里赚更多的钱&#xff0c;并更享受游戏的乐趣。最酷的是&#xff0c;得到的灵…

远程桌面连接服务器怎样连接不上的六个常见原因

远程桌面连接服务器无法连接的问题可能由多种原因引起。以下是一些常见的问题及其解决方案&#xff1a; 1. 网络连接问题&#xff1a;远程桌面连接的基础是稳定的网络连接。如果网络连接不稳定或中断&#xff0c;那么你将无法连接到远程桌面。检查你的网络连接&#xff0c;确保…

ubuntu 利用阿里网盘API实现文件的上传和下载

文章目录 背景脚本初始化 阿里云盘API工具 aligo安装aligoaligo教程实战parse.py 演示上传文件上传文件夹下载文件下载文件夹 背景 最近在用ubuntu系统做实验&#xff0c;而ubuntu 系统的文件上传和下载操作很麻烦&#xff1b; 于是便打算使用阿里网盘的API 进行文件下载与上传…

局域网屏幕桌面监控哪个软件比较好?哪款好用?

在企业、教育机构或其他组织中&#xff0c;出于提高工作效率、保障数据安全、规范员工行为等目的&#xff0c;对局域网内电脑屏幕进行实时监控的需求日益凸显。 面对市场上众多屏幕监控软件&#xff0c;选择一款功能全面、稳定可靠且符合法规要求的产品至关重要。 在局域网屏幕…