2014年9月1日 星期一

cocos2d-x lua 加密解密

http://blog.csdn.net/luojun_yjh/article/details/10895729

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