您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx引擎中lua使用加密sqlite数据库

2014-02-27 15:28 537 查看
倒腾了两天终于能在cocos2dx的lua脚本中操作加密版的sqlite数据库了。趁还没忘记,赶紧记录一下步骤

用到的资源:

cocos2dx 3.0 beta2

lua 5.1

wxsqlite3 V3.0.6(内含编译好的sqlite 3.8.2)

LuaSQLite3 V0.9.1

sqlitebrowser

步骤:

一、替换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的项目属性,添加以下预处理

SQLITE_HAS_CODEC=1

CODEC_TYPE=CODEC_TYPE_AES128

SQLITE_CORE

THREADSAFE

SQLITE_SECURE_DELETE

SQLITE_SOUNDEX

SQLITE_ENABLE_COLUMN_METADATA

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/

参考:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: