我总是想写点东西来得到大家的认可,因为我都想把我自己在开发过程中遇到的一些麻烦,花了一些时间然后解决的东西分享给大家,让需要的同学可以少走弯路!也是刚开始我的博客人生,总是想这样做应该有意义的,可以帮到大家!
废话不多说吧,相信有很多人用到了cocos的lua引擎,这个东西不错,有很多用处,甚至你可以用它来存储数据,作为配置文件!至于lua的用处,我就不多说了!现在我想讨论的是,如果你用了lua,你总是希望它是被加密的,也许里面的数据总是不想让别人看到的!我的项目也是,所以我就需要对lua文件进行加解密!lua加密的话跟普通文件加密一样的,你可以使用AES加密,这是一个比较普遍的加密解密算法,是一个开源的,比较不错,大家有兴趣可以网上搜索看一看!在cocos2d-x里面,有对lua的使用做了test,大家不会的也可以去看!
首先,我们要用lua引擎的读取内存的方法,这样,我们才可以把你的lua文件解密出来,传给lua方法!来看看这个代码
cocos2d::CCString* pstrFileContent = cocos2d::CCString::createWithContentsOfFile("E:\1-1.lua");
pEngine->executeString(pstrFileContent->getCString());
上面的代码就是先把lua文件读到内存,然后传给lua引擎去处理!这样,我们就可以在将lua文件读到内存之后,对内存中的lua文件先进行解密后再传给lua引擎处理(假设你的lua已经加密了)!现在来看看我是怎么做的
cocos2d::CCString* pstrFileContent = luaDecode(fullPath .c_str(),LUADECODEKEY); //lua 解密
pEngine->executeString(pstrFileContent->getCString());
我自己写了一个解密函数,返回一个CCString!
再来看看我那个解密函数
cocos2d::CCString* luaDecode(const char *pszFileName,int key)
{
unsigned long size = 0;
unsigned char* pData = 0;
CCString* pRet = NULL;
pData = CCFileUtils::sharedFileUtils()->getFileData(pszFileName, "rb", &size);
for(int i=0;i<size;i++ )
{
pData[i] = (char)(pData[i]^key);
}
pRet = CCString::createWithData(pData, size);
CC_SAFE_DELETE_ARRAY(pData);
return pRet;
}
当然,这是一个非常简单的加密解密方法(异或)!就这样,你的lua问价就解密了!
对于lua的加密,自己可以做一个小工具,这个小工具的思路跟大家分享一下,先把要加密的文件读取了,然后加密再存到另一个文件夹就OK了!这个应该大家都都懂,但是有些人可能还是有点不知所措,在这里点一下应该不清楚的也清楚了!!!
今天的分享就先到这里了,只是个人见解,对你有用当然好,如果对你没用,也许对你还是有点启发吧,呵呵