sqlite是一个功能强大的数据库,开放源代码,基于单个文件,在嵌入式中有着广泛的应用。对于数据库的加密,sqlite预留了sqlite3_key,sqlite3_rekey 进行密码设置,他可以加密整个数据库,设置密钥后,对用户的存储是透明的,但这部分在sqlite的开源代码里并没有实现,幸运的是另一个开源项目wxSQLite3里包含了这部分代码。下面探讨下集成到cocos2d-x里的方法。

1)首先,去 http://jaist.dl.sourceforge.net/project/wxcode/Components/wxSQLite3/ 下载最新版本,目前最新是3.0.3版,更多内容参考http://www.wxwidgets.org ,wxSQLite3是wxwidgets开源项目的一个部分。

2)在cocos2d-x的“external”目录下新建“wxsqlite3\src”,将“wxsqlite3-3.0.3\sqlite3\secure\src”下的”.c”和”.h”拷贝进去。

3) 打开VC,“文件”,“新建”,“项目”,“Win32 项目” 选择“静态库” 。在新建项目的“属性”,“预处理器”,加上“SQLITE_HAS_CODEC”

4)导入“sqlite3secure.c”到工程中,编译后就可以作为静态库调用了。打开数据库后,调用 “sqlite3_key(db,key,keylen);” ,后面的存储过程对用户就是透明的了。

5)安卓调用,只需在wxsqlite3下新建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 := \
src/sqlite3secure.c

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/..

LOCAL_C_INCLUDES := $(LOCAL_PATH)/..

include $(BUILD_STATIC_LIBRARY)

就可以做为库调用 LOCAL_WHOLE_STATIC_LIBRARIES += wxsqlite3_static

怎么样,是不是很简单。

最后还有一条,在命令行查看加密的数据库,只需打开数据库后,输入

sqlite> pragma key=”abc123″;

然后就和没加密一样查看了。

2013-12-16 更新

导入VC中,只需要导入“sqlite3secure.c”,不用导入其他的,否则编译不过,而且可以在“sqlite3secure.c”最前面加上“#define SQLITE_HAS_CODEC” ,就无需去定义编译宏了。