使用wxsqlite3加密解密数据库(不用管报错)

按照网上说的配置发现有报错,一开始一直在调试报错,调了半天一直有错误,最后忍不住直接运行,没想到成功了。。。

有些模块的报错不用管,应该是vs检查太严格或者出错了。

1、下载wxsqlite3(推荐4.5.1)

后面版本的加密功能好像有变动,如果要打开之前加密的数据库需要注意版本对应

可以到这里下载各个版本的wxsqlite3:

https://github.com/utelle/wxsqlite3/releases

我下的是wxsqlite4.5.1,配套的sqlite3是3.31.1

 

后面版的加密功能好像有变化,官网是这么说的(https://github.com/utelle/wxsqlite3)

With the release of SQLite version 3.32.0 on May 22, 2020 critical changes to the public SQLite code finally took officially effect, although they weren't officially announced. They were introduced on Feb 7, 2020: "Simplify the code by removing the unsupported and undocumented SQLITE_HAS_CODEC compile-time option". As a consequence, updating the wxSQLite3 encryption extension to support SQLite version 3.32.0 and later was no longer possible.

Since August 2020 a new implementation of an encryption extension, capable of supporting SQLite version 3.32.0 and later, is available as a separate project, SQLite3 Multiple Ciphers. Starting with the release of wxSQLite3 4.6.0 this new implementation is used.

 

2、解压拷贝sqlite3secure/src

解压后有个build文件夹,里面有sln可以用vs打开对应版本的解决方案直接编译成lib使用(vs2012对应vc11,以此类推)

但是我用编译的lib好像无法使用,不知道哪里出问题了,我还是直接跑源代码算了

vs新建一个console项目,可以叫sqlite3Encrypt,拷贝sqlite3secure/src下面的所有文件到项目文件夹,

这个版本自带sqlite3.c,不用额外下载了。

 

3、添加qlite3.h和sqlite3secure.c

这是关键的一步,只添加这两个文件到工程里面就可以了,不要添加其他模块,其他模块报错也不用管,可以直接运行

 

4、添加预处理器SQLITE_HAS_CODEC

一般添加这一个预定义就可以了,如果还有缺的可以自己补。

 

5、调用加密/解密函数

没错,这时候就可以直接加密/解密数据库了,其实很简单。

要注意的是,加密和解密都要在sqlite3_open之后立即执行,中间不能做其他操作。

加密函数: sqlite3_rekey(db, "字符串密码", n); //n是字符串密码长度

解密: nRet = sqlite3_key(db, "字符串密码", n);

取消密码:

C++:sqlite3_rekey(pDb, nullptr, 0);

C:nRet = sqlite3_rekey(pDb, NULL, 0);

其实就是rekey一个空密码。

 

wxsqlite3预编译的shell也可以在命令行打开解密的数据库,用pragma key="密码"

但是我这个数据库打开还是有问题,好像还有个write密码。

另外有个sqliteStudio也可以打开加密数据库,添加数据库时选择wxsqlite输入密码就可以了。

posted @ 2022-09-17 10:39  科学修行的红客  阅读(1293)  评论(0编辑  收藏  举报