c++调用sqlite3(带加解密)

2023-11-18

    StringConvert见https://blog.csdn.net/wxd090108/article/details/84190762

第三方文件

    下载地址:https://sourceforge.net/projects/wxcode/files/Components/wxSQLite3/

    下载wxsqlite3-***.zip

         解压wxsqlite3-***.zip,获取wxsqlite3-***.zip\sqlite3\secure\src下所有文件

生成sqlite3.lib

1、新建一个空dll项目sqlite3:

2、解压wxsqlite3-***.zip,获取 wxsqlite3-3.3.1\\wxsqlite3-3.3.1\\sqlite3\\secure\\src下的所有文件,将文件放置项目sqlite3的根目录下

3、包含sqlite3secure.c到项目中

4、生成项目sqlite3

5、右键项目sqlite3——属性——c/c++——Preprocessor,在Preprocessor Definitions中添加下面预编译:

SQLITE_HAS_CODEC=1
CODEC_TYPE=CODEC_TYPE_AES128
SQLITE_CORE
THREADSAFE
SQLITE_SECURE_DELETE
SQLITE_SOUNDEX
SQLITE_ENABLE_COLUMN_METADATA

6、在sqlite3.c和sqlite3secure.c 的头部加入

#ifndef SQLITE_API
#define SQLITE_API __declspec(dllexport)
#endif

#ifndef SQLITE_HAS_CODEC
#define SQLITE_HAS_CODEC
#endif

7、在sqlite3.h的头部加入

#ifndef SQLITE_API
#define SQLITE_API __declspec(dllimport)
#endif

#ifndef SQLITE_HAS_CODEC
#define SQLITE_HAS_CODEC
#endif

8、重新生成项目sqlite3

 

测试

  1. 创建console项目Test
  2. 右键Test——属性——c/c++——General,Additional Include Directories中添加sqlite3.lib的头文件的路径
  3. 右键Test——属性——c/c++——Linker,Additional Dependencies中添加sqlite3.lib
  4. 包含头文件sqlite3.h、sqlite3userauth.h
#include "stdafx.h"
#include "sqlite3.h"
#include "sqlite3userauth.h"
#include "StringConvert.h"//见博主博文——字符串编码转换

//加密
void Encrypt(sqlite3 * pDB, const string& dbpath,const string & key);
//解密
void Decode(sqlite3 * pDB, const string& dbpath,const string & key);
//删除密码
void DeletePassword(sqlite3 * pDB, const string& dbpath,const string & key);

int _tmain(int argc, _TCHAR* argv[])
{
	string path="C:\\Users\\WXD\\Desktop\\sqlite3\\hytsystem.db";
	string key = "abcd";
	sqlite3 * pDB = NULL;
	
	int dbopen=-1,nRes = -1,index=0;

	//加密
	Encrypt(pDB,path,key);

	//解密
	Decode(pDB,path,key);

	//删除密码
	DeletePassword(pDB,path,key);

	return 0;
}

//加密
void Encrypt(sqlite3 * pDB, const string& dbpath,const string & key)
{
	int dbopen=-1;
	sqlite3_config(SQLITE_CONFIG_SINGLETHREAD);
	string utf8path = AsciiToUtf8(dbpath);//StringConvert.h中
	dbopen=sqlite3_open_v2(utf8path.c_str(),&pDB, SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_READWRITE, nullptr);     
	if (dbopen != SQLITE_OK)
	{
		sqlite3_close(pDB);
		return ;
	}

	dbopen=sqlite3_key(pDB,"",0);
	dbopen=sqlite3_rekey(pDB,key.c_str(),key.length());

	if (dbopen != SQLITE_OK)
	{
		sqlite3_close(pDB);
		return ;
	}

	sqlite3_close(pDB);
}


//解密
void Decode(sqlite3 * pDB, const string& dbpath,const string & key)
{
	int dbopen=-1, nRes=-1;
	int nRow=0, nColumn=0, nIndex=0;
	sqlite3 * pDB2 = NULL;
	char** dbResult=nullptr;
	char* errMes=nullptr;
	string utf8path = AsciiToUtf8(dbpath);//StringConvert.h中
	dbopen=sqlite3_open_v2(utf8path.c_str(),&pDB, SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_READWRITE, nullptr);    
	if (dbopen != SQLITE_OK)
	{
		sqlite3_close(pDB2);
		return ;
	}

	dbopen=sqlite3_key(pDB,key.c_str(),key.length());
	nRes=sqlite3_exec(pDB,"PRAGMA synchronous = OFF",0,0,0);    //提高性能
	nRes=sqlite3_exec(pDB,"PRAGMA cache_size = 8000",0,0,0); //加大缓存
	nRes=sqlite3_exec(pDB,"PRAGMA count_changes = 1",0,0,0); //返回改变记录数
	nRes=sqlite3_exec(pDB,"PRAGMA case_sensitive_like = 1",0,0,0); //支持中文LIKE查询

	if (dbopen != SQLITE_OK)
	{
		sqlite3_close(pDB2);
		return ;
	}
	nRes = sqlite3_exec(pDB,"CREATE table axue (name varchar(32),age int)",0,0,0);
	nRes = sqlite3_exec(pDB,"insert into  axue (name,age) values('axue',18)",0,0,0);
	nRes = sqlite3_get_table(pDB,"Select * from axue",&dbResult,&nRow,&nColumn,&errMes);
	nIndex+=nColumn;//第一行为字段名
	for (int i=0; i<nRow; i++)
	{
		for (int j=0; j<nColumn; j++)
		{
			cout<<dbResult[nIndex]<<endl;
			nIndex++;
		}
	}
	sqlite3_close(pDB);
}


//删除密码
void DeletePassword(sqlite3 * pDB, const string& dbpath,const string & key)
{
	string utf8path = AsciiToUtf8(dbpath);//StringConvert.h中
	int dbopen=-1;
	dbopen=sqlite3_open_v2(utf8path.c_str(),&pDB, SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_READWRITE, nullptr);    
	if (dbopen != SQLITE_OK)
	{
		sqlite3_close(pDB);
		return ;
	}
	dbopen=sqlite3_key(pDB,key.c_str(),key.length());
	dbopen=sqlite3_rekey(pDB,nullptr,0);
	sqlite3_close(pDB);
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++调用sqlite3(带加解密) 的相关文章

  • python 在linux中使用sqlite3

    python 在linux中使用sqlite3 如果出现如下错误 gt gt gt imp ort sqlite3 Traceback most recent call last File 34 lt stdin gt 34 line 1
  • mysql trigger 使用以及与 sqlite3 trigger 比较

    一 触发事件的表与触发更新的表使用同一个表 使用情景 xff0c 表里的某行数据发生update时自动更新修改时间 updated sqlite3 3 40 0 MariaDB 10 10 2 对应 MySQL 8 1 sqlite3 up
  • sqlite3

    一 版本 从 www sqlite org 网站可下载到最新的 sqlite 代码和编译版本 写此文章时 xff0c 最新代码是 3 3 17 版本 二 基本编译 把 sqlite3 c 和 sqlite3 h 添加到工程 xff0c 再新
  • sqlite3 的二进制数据插入与获取

    sqlite3 存储和查找二进制数据对象 使用c语言接口 思路 xff1a 通过让代码执行执行sql语句进行查找 xff0c 但二进制的显示方法无法确定所以 xff0c 二进制数据对象查询语句略有不同 注意 xff1a sqlite3的数据
  • 【Go】Go Gorm Sqlite3 CreateInBatches 报错:too many SQL variable 排查与解决

    Go xff1a 1 17 7 Gorm xff1a gorm io gorm v1 22 3 Gorm Sqlite3 driver gorm io driver sqlite v1 2 4 mattn Sqlite3 github co
  • SQLITE3 使用总结(3~5)(转)

    3 不使用回调查询数据库 34 Z6 b L 34 A 39 i8 M w d 96 T6 F H m2 上面介绍的 sqlite3 exec 是使用回调来执行 select 操作 还有一个方法可以直接查询而不需要回调 但是 xff0c 我
  • sqlite3中BLOB数据类型存储大对象运用示例

    1 常用接口 个人比较喜欢sqlite 使用最方便 xff0c 唯一的准备工作是下载250K的源 xff1b 而且作者很热心 xff0c 有问必答 以下演示一下使用sqlite的步骤 xff0c 先创建一个数据库 xff0c 然后查询其中的
  • sqlite3 database is locked 问题解决方案

    sqlite3 database is locked 问题解决方案 sqlite3只支持一写多读 读与读可以同时进行 读与写不可同时进行 写与写不可同时进行 一写多读的案例 场所 span class token punctuation s
  • Django实战(自定义模块+Echart Tree+sqlite3)

    主要从以下这些方面依次介绍这次django实战经验 xff1a 数据处理django基本框架搭建sqlite3数据库Json数据Echart树状图Jquery 异步刷新laydate 日期查询前后端交互 数据处理 从本地文件夹中获得所有源文
  • SQLite Database Introduction

    Use SQLite installed on Linux CentOS7 to introduce You can also use python to install SQLite3 for learning SQLite Prefac
  • getchar()的作用

    就目前而言 我所遇到的getchar 有两处 1 在程序末尾加getchar 用来让程序不会立即退出 跟system pause 是一样的功能 可能你在写完代码后用ctrl F5运行时 不加getchar 程序也不会立即退出 这是当然的 编
  • QSqlite3创建数据库表格时出现的create error QSqlError(““, ““, ““)

    QSqlite3创建数据库表格时出现的create error QSqlError 这个问题卡了很长时间 连接数据库成功了 但是创建表格时一直失败 通过 qCritical lt lt file lt
  • sqlite3数据库交叉编译并移植到嵌入式开发环境步骤

    一 首先到http www sqlite org download html下载linux版本的源码 sqlite autoconf 3130000 tar gz 二 解压 tar xvzf sqlite autoconf 3130000
  • python sqlite3

    含数据库连接 表创建 增删改查 查看sqlite数据库的软件推荐使用sqlitestudio 下载地址 sqlitestudio SQLite文档类资源 CSDN下载 coding utf 8 乐乐感知学堂公众号 author https
  • 详细使用sqlite3教程及打包资源

    包含编译好的unicode 多字节两种静态库 和sqlite3 h 还有我自己写的详细使用sqlite3的类 完整可用 实际项目我用过 有不对的地方还请大家批评指正 https download csdn net download qq 3
  • 嵌入式ARM移植sqlite3

    Sqlite3数据库移植 平台 处理器 I MX6ULL 内核 linux 4 1 15 官网下载源码 https www sqlite org download html tar vxf sqlite autoconf 3390400 t
  • 使用sqlite3 模块操作sqlite3数据库

    Python内置了sqlite3模块 可以操作流行的嵌入式数据库sqlite3 如果看了我前面的使用 pymysql 操作MySQL数据库这篇文章就更简单了 因为它们都遵循PEP 249 所以操作方法几乎相同 废话就不多说了 直接看代码吧
  • sqlite3的交叉编译

    比如说我们在qtcreator中编写程序的时候想用到sqlite3数据库 但是因为qtcreator中的编译器中的库中并没有sqlite3的库 所以肯定编译不了 所以若想在qtcreator中编译sqlite3的程序 首先的将sqlite3
  • 嵌入式数据库——sqlite3

    前言 数据库是 按照数据结构来组织 存储和管理数据的仓库 是一个长期存储在计算机内的 有组织的 可共享的 统一管理的大量数据的集合 数据库是以一定方式储存在一起 能与多个用户共享 具有尽可能小的冗余度 与应用程序彼此独立的数据集合 可视为电
  • Peewee

    Part1前言 在 Python 的 ORM 框架中 比较主流的有 Sqlalchemy peewee pony 等等 但是其中 peewee 和 Django 的 Models 框架很像 如果了解 Django 的同学肯定对 peewee

随机推荐

  • Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore

    Java并发编程 CountDownLatch CyclicBarrier和 Semaphore 2016 10 07 分类 基础技术 7 条评论 标签 并发 分享到 0 原文出处 海子 在java 1 5中 提供了一些非常有用的辅助类来帮
  • linux源码安装git 教程 ,设置远程库,客户端访问完整版

    1 linux 在 github 下载 git 安装包 然后解压 wget https github com git git archive v2 21 0 tar gz tar zxvf git v2 21 0 tar gz 2 安装gi
  • C++的文件操作open与close

    先看一下相应的打开文件的不同参数的作用 C open 打开文件 含打开模式一览表 打开模式可以用多个 但符号是 不是 注意啦 比如 ios in ios binary表示用二进制模式 以读取的方式打开文件 ios out ios binar
  • 3. 类指针与智能指针

    3 类指针与智能指针 本篇主要解答以下问题 类的对象与类指针的区别 为什么要用智能指针 unique ptr 和 shared ptr 3 1 类对象与类指针 实例化一个类的时候 有两种方式 一是创建对象 二是创建指针 以2 1中的stud
  • 页表长度和页表大小_OS——关于页面大小与页表项的问题

    一 采用分页管理方式时 操作系统将进程划分成若干个页面 将内存划分为若干个内存块 or页 页面和内存块大小一致并且一一对应 但是由于进程划分页面时 最后一个页面大小可能小于内存块大小 导致存放的最后一个内存块存在内部碎片 成为页内碎片 为了
  • 数据库中视图、索引、存储过程的作用

    视图可以被看成是虚拟表或存储查询 可通过视图访问的数据不作为独特的对象存储在数据库内 数据库内存储的是 SELECT 语句 SELECT 语句的结果集构成视图所返回的虚拟表 用户可以用引用表时所使用的方法 在 Transact SQL 语句
  • 内置对象Session与HttpSession是同一个东西吗?

    本质上是 在jsp中session是个内置对象 而在servlet中想使用session就要先得到session 方法如下 HttpSession session request getSession 在jsp中或是在servlet中ses
  • 原动力×云原生正发声 降本增效大讲堂

    原动力 云原生正发声 降本增效大讲堂课程活动链接 原动力 云原生正发声 降本增效大讲堂 提升IT资源利用率 实现降本增效 已经成为企业关注重点 2021 年 CNCF FinOps Kubernetes Report 指出 迁移至 Kube
  • c++ 模板的具体化与实例化

    函数模板是C 新增的一种性质 它允许只定义一次函数的实现 即可使用不同类型的参数来调用该函数 这样做可以减小代码的书写的复杂度 同时也便于修改 注 使用模板函数并不会减少最终可执行程序的大小 因为在调用模板函数时 编译器都根据调用时的参数类
  • Unity3d 简单的按照路径移动物体!

    在TORQUE引擎中 我们只要设置几个点 然后物体会按照这几个点顺序移动 Unity3d也可以的 现在介绍一个很简单的按照路径移动的方法 目标是让蓝色方块沿着紫色方块组成的路径移动 设计思想就是让蓝色方块移动第一个 然后继续移动到第二个 然
  • 室内探索无人机,解决复杂环境下的任务挑战!

    前言 室内探索无人机是一种专为在室内环境中进行任务的无人机系统 相比传统的人员部署 室内探索无人机具有更高的灵活性和机动性 能够在复杂的室内环境中执行任务 用于未知环境的探索和特定目标的搜索 为完成无人机室内搜索与识别等复杂任务 阿木实验室
  • Ubuntu18环境下 python 多进程与多线程测试

    Ubuntu18环境下 python 多进程与多线程测试 测试说明 单一线程单一进程测试函数 多线程下测试函数 多进程下测试函数 主函数与测试结果 测试说明 测试的对象为多次求平方的程序 def task powers limit int
  • 鸿蒙内核阅读笔记-时间管理(los_sys)

    简介 近期在阅读鸿蒙liteOS a 由于是初次探索内核的奥秘 将一些阅读的心得进行分享 希望能在作为笔记的同时 也能帮助更多人学习 感谢图灵大佬的注释项目 使我能够更加快速的理解 https weharmony github io 核心模
  • C语言用循环编写简单菜单程序

    C语言用循环编写简单菜单程序 源码如下 include
  • MyBatis架构与原理深入解析

    点击上方 芋道源码 选择 设为星标 管她前浪 还是后浪 能浪的浪 才是好浪 每天 8 55 更新文章 每天掉亿点点头发 源码精品专栏 原创 Java 2020 超神之路 很肝 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络
  • 汽车信息安全标准ISO/SAE21434与UN/WP.29阅读总结

    1 序言 伴随着汽车与外界的交互手段不断丰富 车联网相关设备 系统间的数据交互更加频繁 万物互联下的网络攻击也逐渐渗透延伸到车联网的领域 这给汽车行业带来了新的 专属挑战 我这几天简要阅读了汽车信息安全领域的几个重要的国际规范 本文就简要讨
  • 光分配网(ODN)一级分光和二级分光的区别及应用场景

    光分配网 ODN 的分光方式主要有两种 一级分光和二级分光 如图1所示 受PON设备光功率预算及带宽的限制 当前 ODN的总分路比一般为1 64 图1 ODN的一级分光和二级分光 采用一级分光时 分路器一般设置在配线光交处 采用二级分光时
  • 什么是新生代的复制算法

    https blog csdn net ooppookid article details 51523701 1 什么是新生代的复制算法 了解堆内存看这里 java堆内存是什么样的 了解java垃圾回收看这里 java垃圾回收机制是什么 所
  • 图像拼接算法及实现_浅谈图像处理算法的实现途径(CPU/FPGA/ASIC)

    人们对图像质量要求的不断提升 直接推动着图像算法的不断向前发展 那么到今天为止 常用的图像处理算法是怎么实现的呢 今天我们来谈一谈 图像处理算法的实现一般有两种途径 软件或者硬件 软件 VS 硬件 软件实现方式 成本低 迭代快 且随着现在各
  • c++调用sqlite3(带加解密)

    StringConvert见https blog csdn net wxd090108 article details 84190762 第三方文件 下载地址 https sourceforge net projects wxcode fi