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

倒腾了两天终于能在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/          



    


参考:



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值