其实就是个编译过程,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文件替换工程对应的文件。

9、 使用注意:

首先打开数据库 sqlite3_open,然后在操作数据库之前执行 sqlite3_key 后就可进行数据库操作,否则会返回错误。
 sqlite3_key是输入密钥,如果数据库已加密必须先执行此函数并输入正确密钥才能进行操作,
 如果数据库没有加密,执行此函数后进行数据库操作反而会出现“此数据库已加密或不是一个数据库文件”的错误。
 sqlite3_rekey是变更密钥或给没有加密的数据库添加密钥或清空密钥,
 变更密钥或清空密钥前必须先正确执行 sqlite3_key。
 在正确执行 sqlite3_rekey 后在 sqlite3_close 关闭数据库之前可正常操作数据库,不需要再执行 sqlite3_key。

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

示例代码如下

  、对未加密的数据库加密:
#include "include\sqlite3.h"
#include "include\sqlite3userauth.h" sqlite3_config(SQLITE_CONFIG_SINGLETHREAD);
sqlite3* db = nullptr;
char *errorMsg;
if(SQLITE_OK == sqlite3_open_v2("../test.db3", &db, SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_READWRITE, nullptr))
{
/* encrypt */
if(SQLITE_OK != sqlite3_rekey(db, "qazwsx!123", ))
{
std::string serr = "sqlite encrypt error:";
serr += sqlite3_errmsg(db);
}
}
else
{
std::string serr = "sqlite open error:";
serr += sqlite3_errmsg(db);
}
sqlite3_close(db);
 、对加密后的数据库清除密码:
#include "include\sqlite3.h"
#include "include\sqlite3userauth.h" sqlite3_config(SQLITE_CONFIG_SINGLETHREAD);
sqlite3* db = nullptr;
char *errorMsg;
if(SQLITE_OK == sqlite3_open_v2("../test.db3", &db, SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_READWRITE, nullptr))
{
/* decrypt */
sqlite3_key(db, "qazwsx!123", ); /* clear password */
sqlite3_rekey(db, nullptr, );
}
else
{
std::string serr = "sqlite open error:";
serr += sqlite3_errmsg(db);
}
sqlite3_close(db);

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

  1. 单独编译使用WebRTC的音频处理模块

    块,每块个点,(12*64=768采样)即AEC-PC仅能处理48ms的单声道16kHz延迟的数据,而 - 加载编译好的NS模块动态库 接下来只需要按照 此文 的描述在 android 的JAVA代码 ...

  2. 烂泥:centos单独编译安装gd库

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 这几天一直在弄一个商城系统,该系统的源码及数据库都已经上传并创建完毕.但是在安装该系统时,却提示缺少gd库.如下: 使用php探针查看,发现php确实没 ...

  3. 安卓系统源码编译系列(六)——单独编译内置浏览器WebView教程

    原文                   http://blog.csdn.net/zhaoxy_thu/article/details/18883015                 本文主要对从 ...

  4. android 单独编译某个模块

    第一次下载好Android源代码工程后,我们通常是在Android源代码工程目录下执行make命令,经过漫长的等待之后,就可以得到Android系统镜像system.img了.以后如果我们修改了And ...

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

    编译安装PHP7后没有在ext中没有生成mysqli.so等文件,现在单独编译安装mysqli php7安装的位置:/usr/local/php7/ 我的扩展目录:/usr/local/php7/li ...

  6. delphi中单独编译pas生成dcu文件

    delphi中单独编译pas生成dcu文件 在网上下载了一个带源码的组件,结果碰到提示说缺少xxx.dcu.一看它的目录下确实没有,那能不能生成一个呢? 当然可以! 方法是使用delphi的安装目录\ ...

  7. Android AOSP 单独编译某一模块

    由于AOSP 项目太大,我只修改了一个模块,比如设置. 那么只需要单独编译设置这个模块就可以了. 首先执行Source: source build/envsetup.sh 执行之后,就会有一些额外的命 ...

  8. Jenkins构建Maven多模块项目时,单独编译子模块,并且不触发构建其它模块

    一.Jenkins构建Maven多模块项目时,单独编译子模块 配置: 1.Root POM指向父pom.xml 2.Goals and options指定构建模块的参数:mvn -pl jsoft-w ...

  9. Maven多模块项目单独编译子模块项目时报错:Failed to execute goal on project/Could not resolve dependencies for project

    背景:常规的父子项目搭建的工程,参考:http://www.cnblogs.com/EasonJim/p/6863987.html 解决方法: 1.需要把parent工程,也就是package是pom ...

随机推荐

  1. 转--Oracle DB 服务器系统时间修改问题与 SCN 关系的深入研究

    论坛里一个朋友说将DB 服务器系统时间往往后修改了3个月(从11年改成10年),启动DB报600的错误. 一. 先做个测试 1.1 关闭DB SQL> shutdown immediate Da ...

  2. Java集群之session共享解决方案

    随着互联网的日益壮大,网站的pv和uv成线性或者指数倍的增加.单服务器单数据库早已经不能满足实际需求.比如像盛大,淘宝这样的大型网络公司,更是如此.     集群,也就是让一组计算机服务器协同工作,达 ...

  3. 在Weex中定制自定义组件

    1.配置自定义组件 public class MyViewComponent extends WXComponent{ public MyViewComponent(WXSDKInstance ins ...

  4. JAAS - Document

    JAAS 参考文档: JAAS Reference Guide JAAS Authentication Tutorial JAAS Authorization Tutorial LoginModule ...

  5. Java 406

    项目改名之后, 项目上传后,报错,406,可是项目本地是可以跑起来的, 联系管理员,管理员改了个/etc/httpd/conf/workers2.properties 里面,将本次的项目加入进去就OK ...

  6. CSS Pseudo-Element Selectors伪对象选择符

    一: CSS3将伪对象选择符(Pseudo-Element Selectors)前面的单个冒号(:)修改为双冒号(::)用以区别伪类选择符(Pseudo-Classes Selectors),但以前的 ...

  7. CentOS中vsftp安装、配置、卸载

    1. 安装VSFTP 1 [root@localhost ~]# yum -y install vsftpd 2. 配置vsftpd.conf文件 [root@localhost ~]# vi /et ...

  8. javascript中的基本数据类型

    在javascipt中有五大基本数据类型,列表如下: 1.数字 他们又又包括(正负整数,浮点数)十进制数,十六进制数与八进制数,指数和特殊数值NaN,(Infinity,-Infinity)正负无穷 ...

  9. 一个小白对Arguments的理解

    1.Arguments是一个类似数组的实参队列,译为:论据,论点,姑且译作参数(实参): 2.Arguments与形参保持不同的存储空间,只有当形参被赋值之后两者才会相等 3.传说在严格模式下函数内自 ...

  10. aix7安装was7、打补丁、更改访问端口、手动启动was、配置was7、部署项目

    1:准备工作  首先了解下我们下面即将用到的aix命令,以及安装包.补丁安装工具.补丁 was7的安装包以及补丁工具都是压缩包形式并且以.tar.gz结尾的 安装包在800MB左右,通常为****_w ...