使用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輸入密碼就可以了。