倒腾了两天终于能在cocos2dx的lua脚本中操作加密版的sqlite数据库了。趁还没忘记,赶紧记录一下步骤
用到的资源:
lua 5.1
wxsqlite3 V3.0.6(内含编译好的sqlite 3.8.2)
步骤:
一、替换cocos2dx自带的sqlite3为加密的sqlite3
1) 解压wxsqlite3。
2)将目录wxsqlite3-3.0.6\sqlite3\secure\aes128\dll\release下的sqlite3.dll和sqlite3.lib拷贝到
游戏工程根目录\cocos2d\external\sqlite3\libraries\win32,覆盖原文件。
3)将目录wxsqlite3-3.0.6\sqlite3\secure\src下的所有源文件拷贝到
游戏工程根目录\cocos2d\external\sqlite3\include,覆盖原文件
二、使lua可以操作sqlite3
1)解压LuaSQLite3
2)在游戏工程根目录\cocos2d\cocos\scripting\lua\bindings下创建一个文件夹(lsqlite3)
3)将LuaSQLite3解压目录中的lsqlite3.c文件拷贝到上边创建的lsqlite3文件夹内
4)新建lsqlite3.h头文件,放到上边创建的lsqlite3文件夹内,lsqlite3.h文件的内容如下,
#ifndef __LSQLITE3_H__
#define __LSQLITE3_H__
#include "lauxlib.h"
LUALIB_API int luaopen_lsqlite3(lua_State *L);
#endif
5)修改lsqlite3.c文件,包含lsqlite3.h头文件,并修改了lsqlite3.c中包含sqlite3.h头文件的路径
6)打开游戏工程,定位到LibLua项目,然后将lsqlite3.h、lsqlite3.c和cocos2d\external\sqlite3\include\sqlite3secure.c这3个文件添加到LibLua项目
最好在项目中新建两个文件夹筛选器分别存放上边三个文件
7)修改LibLua的项目属性,添加以下预处理
8)修改LibLua项目中lua_extensions.c文件,添加包含lsqlite3.h和注册lsqlite3
代码修改前:
// socket
#include "socket/luasocket.h"
#include "socket/mime.h"
#include "socket/socket_scripts.h"
static luaL_Reg luax_exts[] = {
{"socket.core", luaopen_socket_core},
{"mime.core", luaopen_mime_core},
{NULL, NULL}
};
代码修改后:
// socket
#include "socket/luasocket.h"
#include "socket/mime.h"
#include "socket/socket_scripts.h"
#include "lsqlite3/lsqlite3.h"
static luaL_Reg luax_exts[] = {
{"socket.core", luaopen_socket_core},
{"mime.core", luaopen_mime_core},
{"lsqlite3", luaopen_lsqlite3},
{NULL, NULL}
};
使用方法:
修改lsqlite3.c文件的lsqlite_do_open函数
在打开数据库后用函数sqlite3_key(数据库指针,密码,密码长度)函数加密数据库
if (sqlite3_open(filename, &db->db) == SQLITE_OK) {
/* database handle already in the stack - return it */
if (sqlite3_key(db->db, "abc123", 6) != SQLITE_OK) {
/* database handle already in the stack - return it */
return 0;
}
return 1;
}
测试:
将lsqlite3解压包中的test目录中的test.lua拷贝到游戏Resource目录,然后修改游戏代码使其执行test.lua文件,
如果成功执行并打印信息,生成test.db则证明可以操作数据库了,再用sqlitebrowser打开test.db,如果不能打开
则说明加密成功。
参考
SQLite加密 wxSqlite3http://blog.sina.com.cn/s/blog_648d306d0101jzfc.html
cocos2d-x 2.1 Win32+Android开发中的sqlite数据库加密技术探讨 http://blog.itpub.net/14466241/viewspace-752718/
参考: