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文件替换工程对应的文件。
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的加密模块单独编译的更多相关文章
- 单独编译使用WebRTC的音频处理模块
块,每块个点,(12*64=768采样)即AEC-PC仅能处理48ms的单声道16kHz延迟的数据,而 - 加载编译好的NS模块动态库 接下来只需要按照 此文 的描述在 android 的JAVA代码 ...
- 烂泥:centos单独编译安装gd库
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 这几天一直在弄一个商城系统,该系统的源码及数据库都已经上传并创建完毕.但是在安装该系统时,却提示缺少gd库.如下: 使用php探针查看,发现php确实没 ...
- 安卓系统源码编译系列(六)——单独编译内置浏览器WebView教程
原文 http://blog.csdn.net/zhaoxy_thu/article/details/18883015 本文主要对从 ...
- android 单独编译某个模块
第一次下载好Android源代码工程后,我们通常是在Android源代码工程目录下执行make命令,经过漫长的等待之后,就可以得到Android系统镜像system.img了.以后如果我们修改了And ...
- Ubuntu为已经安装的PHP7单独编译mysqli
编译安装PHP7后没有在ext中没有生成mysqli.so等文件,现在单独编译安装mysqli php7安装的位置:/usr/local/php7/ 我的扩展目录:/usr/local/php7/li ...
- delphi中单独编译pas生成dcu文件
delphi中单独编译pas生成dcu文件 在网上下载了一个带源码的组件,结果碰到提示说缺少xxx.dcu.一看它的目录下确实没有,那能不能生成一个呢? 当然可以! 方法是使用delphi的安装目录\ ...
- Android AOSP 单独编译某一模块
由于AOSP 项目太大,我只修改了一个模块,比如设置. 那么只需要单独编译设置这个模块就可以了. 首先执行Source: source build/envsetup.sh 执行之后,就会有一些额外的命 ...
- Jenkins构建Maven多模块项目时,单独编译子模块,并且不触发构建其它模块
一.Jenkins构建Maven多模块项目时,单独编译子模块 配置: 1.Root POM指向父pom.xml 2.Goals and options指定构建模块的参数:mvn -pl jsoft-w ...
- 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 ...
随机推荐
- 分享:带波形的语音播放工具(wavesurfer-js)
项目名称:wavesurfer-js github地址:https://github.com/katspaugh/wavesurfer.js 官网地址:http://wavesurfer-js.org ...
- Const和ReadOnly
总结一下const和readonly有这么几条区别: const和readonly的值一旦初始化则都不再可以改写: const只能在声明时初始化:readonly既可以在声明时初始化也可以在构造器中初 ...
- ASP.NET 导入EXCEL文档
鉴于教务一般都是手动输入学生信息,在未了解本校数据库的客观情况之下,我们准备设计一个导入excel文档中学生信息如数据库的功能.结合网上各类大牛的综合版本出炉.. 首先具体的实现思想如下: 1.先使用 ...
- UIViewAnimationOptions类型
一个非常强大的博客 http://www.cnblogs.com/kenshincui/ 像我这种新手确实应该多看看 常规动画属性设置(可以同时选择多个进行设置) UIViewAnimati ...
- 2016.7.13final 修饰符使用
final修饰符可以修饰类.变量.函数: 1.被final所修饰的类不能被继承,函数不能被继承,成员变量不能再次被赋值并且被称为常量: 2.被final 修饰的成员变量 .它通常被static所修饰, ...
- centos 7 samba相关命令
1.安装相关包 yum install samba samba-client samba-common 2.启动smb的命令 systemctl enable smb.service systemct ...
- Oracle数据库之动态SQL
Oracle数据库之动态SQL 1. 静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:一种为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大 ...
- POJ3274-牛的属性-HASH-ACM
原题:POJ3274 参考:进击的阿俊 已知有n头牛,用一个K位二进制数Ak,Ak-1,...,A1表示一头牛具有的特征,Ai=1表示具有特征i.现给定按顺序排列的N头牛的k位特征值,称某个连续范围内 ...
- __call方法简介
作用:当程序试图调用不存在或不可见的成员方法时,PHP会先调用__call方法来储方法名及参数. __call方法包含两个参数:即方法名和方法参数.其中,方法参数是以数组形式存在的.
- coreseek(sphinx)错误:WARNING: attribute 'id' not found - IGNORING
coreseek(sphinx)错误:WARNING: attribute 'id' not found - IGNORING原因及解决方法 coreseek(sphinx)建立索引时提示错误: WA ...