概述:

  1. 功能
  2. 演示效果
  3. 工具使用
  4. 应用到cocos2d-x项目
  5. 下载
  6. 总结
  7. 参考资料

功能:

功能:使用AES CBC 模式对文件及目录加解密,可以应用各个跨平台,目前已经在cocos2d-x win32平台和安卓平台通过测试:

关于AES CBC
优点:
1.隐藏了明文模式;
2.分组密码转化为流模式;
3.可以及时加密传送小于分组的数据;
缺点:
1.不利于并行计算;
2.误差传送:一个明文单元损坏影响多个单元;
3.唯一的IV;

演示效果:

《Cocos2d-x游戏资源加密解决方案》

工具使用:

运行于win7系统 ,输出文件及目录,是工具确定的,不可指定。工具会判断是否已经存在文件或目录,如果存在就会删除

  1. 输入需要加密文件,如:D:SDKpng.png  输出D:SDKpng-enc.png
  2. 输入需要解密文件,如:D:SDKpng.png 输出D:SDKpng-dec.png
  3. 输入需要加密目录,如:D:SDKpng 输出D:SDKpng-enc
  4. 输入需要解密目录,如:D:SDKpng 输出D:SDKpng-dec

应用到cocos2d-x项目

cocos2d-x 是通过getData来读取文件内容的,只是加密plist png jpg 等。
UserDefault这个是读取xml的要小心,本次的应用跳过这个,因为涉及到xml的文件的解析问题,
所以解密的时候判断是不是if (!forString)

  • Win32
    把aes.c aes.h拷贝进到该目录cocos2dcocosplatformwin32
    同时在工程增加两个文件
    CCFileUtilsWin32.cpp插入代码 密码是:123456 自己可以修改

#include “aes.h”

if (!forString)
{
     aes_context aes_ctx;
     unsigned char IV[16];
     unsigned char key[32];
     memset(IV, 0, sizeof(IV));
     memset(key, 0, sizeof(key));
     char password[32] = "123456";
     memcpy(key, password, strlen(password));
     aes_setkey_dec(&aes_ctx, key, 256);
     //CCLOG("buffer :%s", buffer);
     aes_crypt_cbc(&aes_ctx, AES_DECRYPT, size, IV, (unsigned char*)buffer, (unsigned char*)buffer);
     //CCLOG("buffer dec:%s", buffer);
}
  • android
    同样把aes.c aes.h 两文件拷贝进去到cocos2dcocosplatformandroid
    在CCFileUtilsAndroid.cpp插入代码 密码是:123456 自己可以修改

#include “aes.h”

if (!forString)
{
    aes_context aes_ctx;
    unsigned char IV[16];
    unsigned char key[32];
    memset(IV, 0, sizeof(IV));
     memset(key, 0, sizeof(key));
    char password[32] = "123456";
     memcpy(key, password, strlen(password));
    aes_setkey_dec(&aes_ctx, key, 256);
    //LOGD("data :%s", data);
    aes_crypt_cbc(&aes_ctx, AES_DECRYPT, size, IV, (unsigned char*)data, (unsigned char*)data);
    //LOGD("data dec:%s", data);
}

打开目录下 Android.mk 增加
aes.c

  • Mac||Ios
    参考上面的吧笔者没有Xcode

下载

aec.c aec.h 已包含在工具压缩包里面
下载地址:http://pan.baidu.com/s/1dDnb33r

总结:

这个aes算法是可以应用于任何数据加密的,,aes是16位块加密。所以工具加密后,文件大小是会增加一点,因为是得补齐16位,这不足16为的,补’/0’
已经单独放出AES数据加解密:http://www.freeyun.com/aes.html

参考资料:

aes cbc几种模式:http://www.cnblogs.com/happyhippy/archive/2006/12/23/601353.html
aes 开源项目代码,这次是用的源代码是从那抽出来的:https://www.openhub.net/p/xyssl
aes加解密http://www.freeyun.com/aes.html