使用Base64算法对Cocos2dX自带CCUserDefault游戏存储数据编码加密

上一篇介绍了,如何使用Cocos2dX自带的CCUserDefault 存储游戏数据,那么Himi也提到此方式保存的为xml格式并且数据明文显示=。 =,这个对于我们开发者来说太暴漏了有木有! so~本篇Himi分享如何使用经典Base64算法对CCUserDefault进行数据编码形成一种简单的加密形式!

OK,关于base64的介绍,不再赘述,还不太熟悉的童鞋请点击以下连接阅读:
http://baike.baidu.com/view/469071.htm  (百度百科的 base64详细解释)

如果对于Cocos2dX自带的CCUserDefault类不太熟悉的请点击如下连接:
游戏存储之Cocos2dX自带CCUserDefault类详解;

对Base64有了基础认识后我们就开始进入正题,首先,我们针对Cocos2dX使用c++版的base64编码文件:
base64.h以及base64.cpp  文件下载导入项目中:
DataBase64Himi.zip  (647 字节)   http://115.com/file/dpw4wf4e

然后Himi封装好了两个函数:(这里我们假设存储游戏金币)
首先.h中,定义枚举变量 (备注1)

  1. enum{
  2.     DATA_GOLD,//金币

  3. };
复制代码

然后.h定义两个函数: (备注2)

  1. //存储数据
  2. void saveDataByKeyValue(int iKey, string sValue);

  3. //读取数据
  4. int loadDataByKey(int iKey);
复制代码

最后.cpp中函数具体实现代码: (备注3)

  1. //存储
  2. void HelloWorld::saveDataByKeyValue(int iKey, string sValue){
  3.     char buffer[32];
  4.     sprintf(buffer, "%s%d", "Himi",iKey);
  5.     CCLog("----------存储");
  6.     CCLog("存储之前数据 key:index: Himi%i, value: %s  ",iKey,sValue.c_str());
  7.     string sKey = himiSaveData(reinterpret_cast(sValue.c_str()), sValue.length());
  8.     CCLog("存储编码后的数据 key:index: Himi%i, value: %s  ",iKey,sKey.c_str());
  9.     CCUserDefault::sharedUserDefault()->setStringForKey(buffer, sKey);
  10.     CCUserDefault::sharedUserDefault()->flush();
  11. }

  12. //读取
  13. int HelloWorld::loadDataByKey(int iKey){
  14.     CCLog("----------读取");
  15.     char buffer[32];
  16.     sprintf(buffer, "%s%d", "Himi",iKey);

  17.     string s = CCUserDefault::sharedUserDefault()->getStringForKey(buffer);
  18.     CCLog("解码前的数据: %s  ",s.c_str());
  19.     string parseKey = himiParseData(s);
  20.     CCLog("解码后的数据: %s  ",parseKey.c_str());
  21.     return atoi(parseKey.c_str());
  22. }
复制代码

OK,这里开始逐步解释一下:
首先说下备注2,这里定义的两个方法,第一个函数:

  1. //存储数据
  2. void saveDataByKeyValue(int iKey, string sValue);
复制代码

其中第一个函数传入一个int值,为什么要这样,原因是这样方便与结合枚举变量(备注1)来进行存储,这样使用的时候非常简化你的代码和步骤;第二个函数是值,这里我封装成string,这样为了更好的结合我们的base64编码!这点在(备注3)中体现!

第二个函数:

  1. //读取数据
  2. int loadDataByKey(int iKey);
复制代码

这个函数没什么好说的,传入的参数int,枚举变量即可!至于返回值是int 是方便程序中使用!

OK,那么备注3对于两个封装函数中的实现需要说明的有3点:
1.  将传入的int值(key)转化成char*类型,因为cocos2dx中并没有itoa这样的方法(原因上一篇有介绍),所以这里我采用   char buffer[32];    sprintf(buffer, “%s%d”, “Himi”,iKey);  方式进行将int转化char*类型;

2. 存储的时候我们步骤是:string值进行base64编码,然后存储到xml中;

3.  将int转化string的时候我在枚举变量前加入”Himi”,大家不喜欢可以换成自己喜欢的,但是千万不要删除!因为一旦你删除掉,然后将存储后的形式为: <1>数据  这样会造成你读取数据出错!

读取数据步骤:根据key读取xml的编码过的string,然后base64解码出原始值,最终atoi转化成int扔出!
这其中应该说没什么难于理解的,所以这里不再赘述了;

那么下面我们来看这两个函数如何使用:

  1. //base64编码存储
  2. this->saveDataByKeyValue(DATA_GOLD, "10000");

  3. //base64读取数据
  4. this->loadDataByKey(DATA_GOLD);
复制代码

代码是不是用起来很方面呢!哈哈,这就对啦,不能因为编码弄得乱78糟~OK,运行项目,控制台你将看到如下显示:

  1. Cocos2d: cocos2d: cocos2d-1.0.1-x-0.12.0
  2. Cocos2d: cocos2d: GL_VENDOR:     Imagination Technologies
  3. Cocos2d: cocos2d: GL_RENDERER:   PowerVR SGX 543
  4. Cocos2d: cocos2d: GL_VERSION:    OpenGL ES-CM 1.1 IMGSGX543-63.14.2
  5. Cocos2d: cocos2d: GL_MAX_TEXTURE_SIZE: 4096
  6. Cocos2d: cocos2d: GL_MAX_MODELVIEW_STACK_DEPTH: 16
  7. Cocos2d: cocos2d: GL supports PVRTC: YES
  8. Cocos2d: cocos2d: GL supports BGRA8888 textures: NO
  9. Cocos2d: cocos2d: GL supports NPOT textures: YES
  10. Cocos2d: cocos2d: GL supports discard_framebuffer: YES
  11. Cocos2d: cocos2d: compiled with NPOT support: NO
  12. Cocos2d: cocos2d: compiled with VBO support in TextureAtlas : NO
  13. Cocos2d: 此项目已存在保存数据的xml文件
  14. Cocos2d: 存储之前数据 key:index: 0, value: 10000
  15. Cocos2d: 存储编码后的数据 key:index: 0, value: MTAwMDA=
  16. Cocos2d: 解码前的数据: MTAwMDA=
  17. Cocos2d: 解码后的数据: 10000
复制代码

存储的文件内容截图如下:

1232.png 

OK,最后呢,我要说一点,虽然我们使用base64可以对数据进行编码,但是对于不懂程序的用户来说基本无法修改,但是对于稍微有了解 base64编码的童鞋,那么直接可以在线解码你的这个编码,所以呢!最后Himi提醒大家,使用base64当中,大家可以书写一些算法结合 base64来使用!这样即使明文也不怕,至于怎么做,Himi就不再多说了 哈哈!

本篇源码下载: base64SaveDataForCocos2dx.zip  (691 字节)  http://115.com/file/bejbbke3

原文链接: http://blog.163.com/zhoulong19880518@126/blog/static/6070970220129851614575/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值