热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用CppSQLite3封装结合wxSQLite实现加密版的SQLite数据库操作类

最近用到SQLite数据库,刚开始想用ADO来搞,毕竟经常用,结果发现还挺麻烦,要装SQLite的ODBC驱动,装了以后还是连不上,听说这SQLite是开源项目,可以将开发库引入项目来

最近用到SQLite数据库,刚开始想用ADO来搞,毕竟经常用,结果发现还挺麻烦,要装SQLite的ODBC驱动,装了以后还是连不上,听说这SQLite是开源项目,可以将开发库引入项目来直接操作,就在网上找了找对应封装好的库来使用(么办法,不想造轮子,况且网上的大牛多得是,人家造的肯定比自己好),找到了codeproject上的CppSQLite3这个封装库,看了看带的例子,迅速就可以上手使用,效果还不错。貌似,一切都是那么美好。忽然想到一个问题,这数据库没有密码吗?谁都可以访问吗?当然不可能,好吧,网上继续搜,sqlite3_key和sqlite3_rekey这两个函数出现了。然而我们的CppSQLite3封装类中没有这两个东西,几经折腾才知道SQLite3发布版中没有实现加密,又听说有个wxSQlite版可以,就下载下来,直接编译,提示几个头文件找不到,一查才知道还要安装什么wxWidgets,哎最烦这种动不动就要安装个什么东西的了。继续找,不经意间,发现一篇文章,很轻松的就编译出了带加密功能的sqlite库,再配合我们的CppSQLite3就完美了(什么?怎么配合?直接把原有的sqlite3.h,lib,dll替换成我们下边编译的就好啦)。好了,说了一堆废话,下边切入正题。

SQLite 3开源发布版不带加密功能,导出头文件中有sqlite3_key和sqlite3_rekey的定义,注释中说没有对应的实现(有加密实现的版本还需要在预编译中定义预处理宏SQLITE_HAS_CODEC才能开启这几个函数的功能)。因此,需要借助另一个sqlite3加强的开源项目wxSQLite3。

1:首先在这里下载wxSQLite3源码
https://github.com/utelle/wxsqlite3/releases
以3.3.5.3版本为例,其目录中.\sqlite3\secure\src下是实现加密所需的源代码。
这里写图片描述
2 新建一个“WIN32控制台应用程序”工程,以vs2013为例创建。项目名称为sqlite3,不勾选“预编译头”选项。点击“完成”。
3将下载的源代码.\sqlite3\secure\src中的文件都拷贝到新建的工程目录下。只将sqlite3.def 和sqlite3secure.c添加到项目中.注意不要添加其他文件。
4.在工程属性中,加入预定义宏
SQLITE_ENABLE_RTREE,SQLITE_ENABLE_COLUMN_METADATA,SQLITE_HAS_CODEC=1,SQLITE3ENCRYPT_EXPORTS,SQLITE_ENABLE_FTS3,SQLITE_ENABLE_FTS3_PARENTHESIS,SQLITE_SECURE_DELETE,SQLITE_SOUNDEX,CODEC_TYPE=CODEC_TYPE_AES128。
这里写图片描述
5接下来,修改项目配置类型,就可以编译需要的lib了,
例如:修改配置类型为“静态库(.lib)”编译 lib文件
这里写图片描述

6编译好后,就可以将其sqlite3.h, sqlite3.lib引入到要使用的项目上即可。也可以修改配置类型为“动态库(.dll)”同时在属性的“链接器”->“输入”->“模块定义文件”中填写“sqlite3.def”,这样在生成dll的同时会生成一个lib(较之之前的lib小很多,不过这样的链接方式,应用程序发布时要带上这个dll)。这样编译的版本就可以使用sqlite3_key和sqlite3_rekey函数对数据库进行加密了。


推荐阅读
  • 在加载一个第三方厂商的dll文件时,提示“找不到指定模块,加载失败”。由于缺乏必要的技术支持,百思不得期间。后来发现一个有用的工具 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • Python中sys模块的功能及用法详解
    本文详细介绍了Python中sys模块的功能及用法,包括对解释器参数和功能的访问、命令行参数列表、字节顺序指示符、编译模块名称等。同时还介绍了sys模块中的新功能和call_tracing函数的用法。推荐学习《Python教程》以深入了解。 ... [详细]
  • HashMap的扩容知识详解
    本文详细介绍了HashMap的扩容知识,包括扩容的概述、扩容条件以及1.7版本中的扩容方法。通过学习本文,读者可以全面了解HashMap的扩容机制,提升对HashMap的理解和应用能力。 ... [详细]
  • 本文讨论了将HashRouter改为Router后,页面全部变为空白页且没有报错的问题。作者提到了在实际部署中需要在服务端进行配置以避免刷新404的问题,并分享了route/index.js中hash模式的配置。文章还提到了在vueJs项目中遇到过类似的问题。 ... [详细]
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • 在IDEA中运行CAS服务器的配置方法
    本文介绍了在IDEA中运行CAS服务器的配置方法,包括下载CAS模板Overlay Template、解压并添加项目、配置tomcat、运行CAS服务器等步骤。通过本文的指导,读者可以轻松在IDEA中进行CAS服务器的运行和配置。 ... [详细]
author-avatar
腾云溪牛_556
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有