wxsqlite3的加密模块单独编译
2018-06-17 21:02:16来源:未知 阅读 ()
转自:https://www.cnblogs.com/superbi/p/5235442.html
wxSqlite3官网:http://wxcode.sourceforge.net/components/wxsqlite3
github网址:https://github.com/utelle/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自带版本,而且它的更新也很快的。
示例代码如下
1、对未加密的数据库加密: #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", 10)) { std::string serr = "sqlite encrypt error:"; serr += sqlite3_errmsg(db); } } else { std::string serr = "sqlite open error:"; serr += sqlite3_errmsg(db); } sqlite3_close(db);
2、对加密后的数据库清除密码: #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", 10); /* clear password */ sqlite3_rekey(db, nullptr, 0); } else { std::string serr = "sqlite open error:"; serr += sqlite3_errmsg(db); } sqlite3_close(db);
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 关于各种不同开发语言之间数据加密方法(DES,RSA等)的互通的 2020-06-07
- 深入V8引擎-Time模块介绍 2019-05-24
- 在动态库里获取动态库的模块句柄 2019-02-21
- C++ 使用openssl库实现 DES 加密——CBC模式 && 2018-12-27
- 深入出不来nodejs源码-timer模块(C++篇) 2018-12-09
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash