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 ...
随机推荐
- HTML特效代码大全
1)贴图:<img src="图片地址">2)加入连接:<a href="所要连接的相关地址">写上你想写的字</a>1)贴 ...
- 为Activity设置特定权限才能启动
1.在AndroidManifest文件中,声明一个权限,并在activity中添加属性 <!--声明权限,权限名一般为包名+permission+类名 --> <permissio ...
- requirejs+anjularjs+express框架
1.目录 2.首页login.html如下: <!DOCTYPE html><html> <head> <title>登录界面</title> ...
- nextDay、beforeDay以及根据nextDay(beforeDay)求解几天后的日期,几天前的日期和两个日期之间的天数
实现代码: package com.corejava.chap02; public class Date { private int year; private int month; private ...
- Codeforces 193D Two Segments 解题报告
先是在蓝桥杯的网站上看到一道题: 给出1~n的一个排列,求出区间内所有数是连续自然数的区间的个数.n<=50000. 由于数据较弱,即使用O(N^2)的算法也能拿到满分. 于是在CF上发现了这一 ...
- Chrome rem bug
遇到一个bug,发现chrome在初始化页面的时候,会错误的渲染rem单位,导致字体过大. 比如: 正常的应该是这样的: 原因是,为了使用rem单位,我们常常将 html 的font-size设置为6 ...
- 【技术宅3】截取文件和url扩展名的N种方法
//截取文件扩展名的N种方法 //第1种 //strrchr() 函数查找字符在指定字符串中最后一次出现的位置,如果成功,则返回其后面的字符串 //返回带有点的扩展名 function get_e ...
- 通过Java代码浅谈HTTP协议
最近刚看了http协议,想写点东西加深一下理解,如果哪儿写错了,请指正. 1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(W ...
- Connect mysql on Linux from Windows
ON LINUX: 1 sudo apt-get install mysql-server 2 sudo apt-get install python-dev 3 sudo apt-get insta ...
- NET Core 静态文件及JS包管理器(npm, Bower)的使用
NET Core 静态文件及JS包管理器(npm, Bower)的使用 文章目录 在 ASP.NET Core 中添加静态文件 使用npm管理JavaScript包 使用Bower管理JavaScri ...