最近使用wxsqlite加密sqlite3數據庫,剛開始折騰好幾天,在xcode上一直編譯不通過,后來在sqlite3.c找到配置,編譯順利通過,太激動了,哈哈,廢話少說!總結一下android和ios平台。
wxsqlite3
wxSqlite3作為wxWidgets的擴展組件用C++語法對Sqlite3的API進行了封裝,為Sqlite3的使用提供了方便,並順帶實現了加密。wxWidgets是一個著名的C++跨平台UI框架。支持兩種加密算法,128位的rijndael算法(默認)和256位的AES算法。下載:http://sourceforge.net/projects/wxcode/files/Components/wxSQLite3/
解壓wxSqlite3壓縮包,找到sqlite3/secure/src文件夾的文件復制到external/sqlite3/include目錄下,並且只需編譯sqlite3secure.c文件。
-->啟用宏
需要在sqlite3secure.c最上面添加宏,啟用加密
#define SQLITE_HAS_CODEC
//啟用256位加密,如果不啟用,可不加
#define CODEC_TYPE CODEC_TYPE_AES256
在sqlite3.h和sqlite3.c最上面添加
#define SQLITE_HAS_CODEC
Android支持
1.在external/sqlite3目錄下新建一個Android.mk文件
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := wxsqlite3_static LOCAL_MODULE_FILENAME := libwxsqlite3 LOCAL_CFLAGS := \ -DSQLITE_HAS_CODEC \ -DCODEC_TYPE=CODEC_TYPE_AES128 LOCAL_SRC_FILES := \ include/sqlite3secure.c LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) LOCAL_C_INCLUDES := $(LOCAL_PATH) include $(BUILD_STATIC_LIBRARY)
在項目的Android.mk文件中添加支持
LOCAL_WHOLE_STATIC_LIBRARIES += wxsqlite3_static
LOCAL_SRC_FILES :=../../Classes/modules/SQLite3/sqlite3secure.c
$(call import-module,external/sqlite3)
iOS支持
添加代碼目錄,找到我們剛才添加的那個文件夾,添加好后,將除sqlite3.h和sqlite3secure.c的所有文件都刪除引用
相關api函數接口
SQLite添加了加密解密功能后,使用方法如下:
1、 在調用sqlite3_open()函數打開數據庫后,要調用sqlite3_key()函數為數據庫設置密碼;
2、 如果數據庫之前有密碼,則調用sqlite3_key()函數設置正確密碼才能正常工作;
3、 如果一個數據庫之前沒有密碼,且已經有數據,則不能再為其設置密碼;
4、 如果要修改密碼,則需要在第一步操作后,調用sqlite3_rekey()函數設置新的密碼;
5、 設置了密碼的SQLite數據庫,無法使用第三方工具打開;
