码迷,mamicode.com
首页 > 数据库 > 详细

wxsqlite3的加密模块单独编译

时间:2016-03-02 16:33:31      阅读:344      评论:0      收藏:0      [点我收藏+]

标签:

其实就是个编译过程,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);

 

wxsqlite3的加密模块单独编译

标签:

原文地址:http://www.cnblogs.com/superbi/p/5235442.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!