wxsqlite3的加密模块单独编译

其实就是个编译过程,so easy,只是网上的方法各种,而且不是最新的,所以自己琢磨了。

1、从sqlite网站下载sqlite-amalgamation-xxx和sqlite-dll-win32-x86-xxx

2、从github下载wxsqlite3-xxx

3、使用vs创建win32 dll空项目

4、拷贝wxsqlite3-3.3.0\sqlite3\secure\src\下的所有h、c文件、def文件

5、添加sqlite3secure.c、sqlite3.h到工程

6、设置预处理定义: SQLITE_HAS_CODEC CODEC_TYPE=CODEC_TYPE_AES128 SQLITE_CORE SQLITE_SECURE_DELETE SQLITE_ENABLE_COLUMN_METADATA SQLITE_ENABLE_RTREE

编译静态库需要多添加:USE_DYNAMIC_SQLITE3_LOAD=0

7、编译动态库:在配置属性-->链接器-->输入-->模块定义文件 加入sqlite3.def 8、使用引入sqlite3.h和sqlite3userauth.h 示例代码参加编译工程

如果需要使用最新的sqlite3,请用sqlite-amalgamation-xxx中的h和c文件替换工程对应的文件。

ps:sqlite3的新版可能存在不兼容wxsqlite3的情况,建议使用wxsqlite3自带版本,而且它的更新也很快的。

示例代码如下

 1 #include "include\sqlite3.h"
 2 #include "include\sqlite3userauth.h"
 3
 4     /* sqlite3 加密示例 */
 5     /* 首先打开数据库 sqlite3_open,然后在操作数据库之前执行 sqlite3_key 后就可进行数据库操作,否则会返回错误。
 6     sqlite3_key是输入密钥,如果数据库已加密必须先执行此函数并输入正确密钥才能进行操作,
 7     如果数据库没有加密,执行此函数后进行数据库操作反而会出现“此数据库已加密或不是一个数据库文件”的错误。
 8     sqlite3_rekey是变更密钥或给没有加密的数据库添加密钥或清空密钥,
 9     变更密钥或清空密钥前必须先正确执行 sqlite3_key。
10     在正确执行 sqlite3_rekey 后在 sqlite3_close 关闭数据库之前可正常操作数据库,不需要再执行 sqlite3_key。*/
11
12     sqlite3_config(SQLITE_CONFIG_SINGLETHREAD);
13     sqlite3* db = nullptr;
14     if(SQLITE_OK == sqlite3_open_v2("../test.db3", &db, SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_READWRITE, nullptr))
15     {
16         /* encrypt
17         if(SQLITE_OK != sqlite3_rekey(psqlite3, "qazwsx!123", 10))
18         {
19             std::string serr = "sqlite encrypt error:";
20             serr += sqlite3_errmsg(psqlite3);
21         }*/
22
23         /* decrypt */
24         sqlite3_key(db, "qazwsx!123", 10);
25
26         /* query */
27         std::string sqlstr("select comment from country where codevalue=1");
28         sqlite3_stmt* pstmt;
29         if(SQLITE_OK == sqlite3_prepare_v2(db, sqlstr.c_str(), sqlstr.length(), &pstmt, nullptr))
30         {
31             if (SQLITE_ROW == sqlite3_step(pstmt))
32             {
33                 std::string stext = (char* )sqlite3_column_text(pstmt, 0);
34             }
35             else
36             {
37                 std::string serr = "sqlite step error:";
38                 serr += sqlite3_errmsg(db);
39             }
40         }
41         else
42         {
43             std::string serr = "sqlite prepare error:";
44             serr += sqlite3_errmsg(db);
45         }
46         sqlite3_finalize(pstmt);
47     }
48     else
49     {
50         std::string serr = "sqlite open error:";
51         serr += sqlite3_errmsg(db);
52     }
53     sqlite3_close(db);
时间: 2024-11-07 03:20:47

wxsqlite3的加密模块单独编译的相关文章

单独编译apache的rewrite模块

 单独编译apache的rewrite模块 当我们编译安装好apache的时候,就像这样: ./configure \ --prefix=/usr/local/apache \   //安装的路径 --with-included-apr \        // 跨平台 --enable-so \                 //启用DSO --enable-deflate=shared \    //动态共享的方式编译deflate模块 --enable-expires=shared \  

android 单独编译某个模块

第一次下载好Android源代码工程后,我们通常是在Android源代码工程目录下执行make命令,经过漫长的等待之后,就可以得到Android系统镜像system.img了.以后如果我们修改了Android源代码中的某个模块或者在Android源代码工程新增一个自己的模块,是不是还是执行make命令呢?答案是否定的,Google为我们准备了另外的命令来支持编译单独的模块,以及重新打包system.img的命令.在继续学习Android源代码之前,就让我们先来看看这个命令吧. 一. 首先在And

Ubuntu为已经安装的PHP7单独编译mysqli

编译安装PHP7后没有在ext中没有生成mysqli.so等文件,现在单独编译安装mysqli php7安装的位置:/usr/local/php7/ 我的扩展目录:/usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/ 解压php7安装包,进入 ext/mysqli/ 目录 执行: /usr/local/php7/bin/phpize   会在该目录下生成configure等文件 [如果提示没有autoconf.m4错误,用 a

CentOS6.5 单独编译安装PHP gd库扩展

公司网站的服务器前几天安装了Workpress环境主要是跑PHP,环境是Nginx+php-fpm,PHP是yum安装的,所以是最小化安装,php的各种扩展都没有.今天需要用到GD库,才发现没GD库环境,所以需要安装这个扩展.对付单个扩展,单独编译动态加载是比较方便快捷的. 先安装 gd 前置库 : freetype ,jpegsrc,libpng. 1. freetype wget http://download.savannah.gnu.org/releases/freetype/freet

单独编译和使用webrtc音频降噪模块(附源码+测试demo)

webrtc的音频处理模块分为降噪ns,回音消除aec,回声控制acem,音频增益agc,静音检测部分.另外webrtc已经封装好了一套音频处理模块APM,如果不是有特殊必要,使用者如果要用到回声消除,音频增益等较为复杂的模块时,最好使用全部的音频处理模块二不要单独编译其中一部分以免浪费宝贵的时间. 但是音频降噪部分较为简单,用起来也就几个函数,除了需要传入的音频数据以外,需要调整的参数也就是音频采样率和降噪等级.另外这部分代码采用纯C语言语法编写,可以跨平台编译.整个算法也不算特别复杂,运行起

单独编译kvm模块

背景:最近在做一个虚拟机安全的项目,使用KVM来支撑虚拟化,涉及到KVM和QEMU的代码修改.由于KVM可以以模块的方式加载到内核中,可以单独编译KVM模块,而不必每次重新编译内核(鉴于编译内核所耗的时间,如果每次改动KVM都要重新编译一次内核,估计等项目做完,头发也等白了) 参考:http://blog.chinaunix.net/uid-23390992-id-3300514.html 我的改进: 1.清理 make clean CONFIG_KVM=m CONFIG_INTEL_KVM=m

内核模块的单独编译

1.在需要单独编译为模块的目录里执行如下命令: make CONFIG_IGB=m -C /home/centoser/linux M=/home/centoser/linux/drivers/net/ethernet/intel/igb modules 2.拷贝 cp igb.ko /lib/modules/3.10.0-123.el7.x86_64/kernel/drivers/net/ethernet/intel/igb/igb.ko 3.卸载原有驱动 modprobe -r igb 4.

WebRTC 音频模块单独编译 --【转载】

原文地址:http://billhoo.blog.51cto.com/2337751/1213801 [2015年2月15日] Bill 这段时间没有再关注 WebRTC 以及音频处理的相关信息,且我个人早已不再推荐单独编译 WebRTC 中的各个模块出来使用.实际上本文的参考价值已经很小了,甚至可能会产生误导.不删这篇文章的原因在于文后有很多读者的讨论,其中的一些仍具备一定的价值,请大家务必以批判和审慎的态度阅读文章. [2014年5月14日] 昨天有幸在 Google 论坛里询问到 AECM

CentOS单独编译安装PHP gd库扩展

网站的第二台服务器跑的的环境主要是Python/Ruby,有时也需要简单跑跑PHP脚本,所以也安装了PHP,环境是Nginx+php-fpm,PHP是源码编译安装的,所以是最小化安装,甚至连mysqli扩展都没有.今天需要用到GD库,才发现没GD库环境,所以需要安装这个扩展.对付单个扩展,单独编译动态加载是比较方便快捷的.安装过程也比较繁杂,这个记录一下,方便后来者. 首先说明,我的PHP是源码编译安装的,可以参看 以源码编译的方式安装PHP与php-fpm. 先安装 gd 前置库 : free