文档章节

quck cocos2dx-lua 3.5 版本对图片进行加密

xf_zhaojun
 xf_zhaojun
发布于 2015/10/04 17:12
字数 1262
阅读 54
收藏 0

quck cocos2dx-lua 3.5 版本对图片进行加密

 

一、图片的加密

使用“pack_list”(这个不知道是出自哪里)进行加密

下载地址 http://pan.baidu.com/s/1gdg2qUf

然后下载“php-5.6.14-nts-Win32-VC11-x86”

打开pack_list,修改pack_files.bat里面的php.exe的目录如下

@echo offset DIR=%~dp0E:\php-5.6.14-nts-Win32-VC11-x86\php.exe "%DIR%lib\pack_files.php" %*

 

按住shift点击右键,选择“在此处打开命令窗口”,执行

pack_files.bat -h

返回信息如下

 options:
    -h show help
    -i source files directory
    -o output filename | output directory
    -p package prefix name
    -x excluded packages
    -m pack mode
    -ek encrypt key
    -es encrypt sign
    -c load options from config file
    -q quiet
pack mode:
    -m zip                  package all files to a ZIP archive file and encrypt.
    -m files (default)  save encrypted files to separate files. -o specifies output dir.
                        * default encrypt sign is "XXTEA"
config file format:
    return array(
        'src'      => source files directory,
        'output'   => output filename or output directory,
        'prefix'   => package prefix name,
        'excludes' => excluded packages,
        'pack'  => pack mode,
        'key'      => encrypt key,
        'sign'     => encrypt sign,
    );
examples:
    # encrypt res/*.* to resnew/, with XXTEA, specifies sign
    pack_files -i res -o resnew -ek XXTEA -es tsts
    # package res/*.* to game.zip
    pack_files -i res -o game.zip -m zip
    # package scripts/*.* to game.zip, encrypt game.zip with XXTEA, specifies sign
    pack_files -i scripts -o game.zip -m zip -ek XXTEA -es tsts
    # load options from config file
    pack_files -c my_config.lua

输入命令

pack_files.bat -i 需要加密的资源目录 -o 加密后文件存放目录 -ek 你的key -es 你的sign

此时加密就完成了

 

这个加密是XXTEA方式的,也可用于加密lua脚本

 

二、图片是加密过的,cocos是不能解析的,需要解密(好像2.x的版本不需要,不知道是不是)

 

1,若是加密lua脚本(别忘了,先备份源码),只需将你的工程Classes目录下的AppDelegate.cpp文件的

找到下面这行(没有就加上,在LuaStack* stack = engine->getLuaStack();这行下面)

stack->setXXTEAKeyAndSign("2dxLua", strlen("2dxLua"), "XXTEA", strlen("XXTEA"));

把sign和key替换上去,如下,保存

stack->setXXTEAKeyAndSign("你的key", strlen("你的key"), "你的sign", strlen("你的sign"));

重新编译(别忘了,先备份源码),就可以运行加密后的lua脚本了

 

2,若是加密的图片(这个修改有点麻烦,不会c++所以,一要改c++代码就头疼)

先找到libcocos2d/platform这个目录

然后将:

HelperFunc.cppHelperFunc.h (frameworks\cocos2d-x\cocos\quick_libs\src\extra\apptools目录下

xxtea.cppxxtea.h(目录忘了在哪了),

这四个文件都拷贝到platform这个目录下(首先要在资源管理器中复制到platform,然后将platform目录下的这四个文件拖到visual studio中视图中的platform目录)

HelperFunc.cpp修改如下(主要是去掉了LuaEngine相关的代码,实在不会c++,报错了完全看不懂,所以就直接干掉了)

 #include "cocos2d.h"
extern "C" {
}
#include "xxtea/xxtea.h"
#include "HelperFunc.h"
USING_NS_CC;
unsigned char* HelperFunc::getFileData(const char* pszFileName, const char* pszMode, unsigned long * pSize)
{
    ssize_t size;
    unsigned char* buf = FileUtils::getInstance()->getFileData(pszFileName, pszMode, &size);
    if (NULL == buf || size<1) return NULL;
    printf("FFF---------------HelperFunc");
    //LuaStack* stack = LuaEngine::getInstance()->getLuaStack();
    //if (NULL==stack) {
    //    return NULL;
    //}
    int xxteaKeyLen = 7;
    const char *xxteaKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    int xxteaSignLen = 3;
    const char *xxteaSign = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy";
    unsigned char* buffer = NULL;
    if (xxteaKey && xxteaSign) {
        bool isXXTEA = true;
        for (int i = 0; isXXTEA && i<xxteaSignLen && i<size; ++i) {
            isXXTEA = buf[i] == xxteaSign[i];
        }
        if (isXXTEA) { // decrypt XXTEA
            xxtea_long len = 0;
            buffer = xxtea_decrypt(
                buf + xxteaSignLen,
                (xxtea_long)size - (xxtea_long)xxteaSignLen,
                (unsigned char*)xxteaKey,
                (xxtea_long)xxteaKeyLen,
                &len);
            delete[]buf;
            buf = NULL;
            size = len;
        }
        else {
            buffer = buf;
        }
    }
    else {
        buffer = buf;
    }
    if (pSize) *pSize = size;
    return buffer;
}
int HelperFunc::getFileData(const char *pPathFile)
{
unsigned long size;
unsigned char* buf = HelperFunc::getFileData(pPathFile, "rb", &size);
delete buf;
/*
LuaStack* stack = LuaEngine::getInstance()->getLuaStack();
stack->clean();
if (buf) {
stack->pushString((const char*)(buf), (int)size);
delete buf;
} else {
stack->pushNil();
}
*/
return 1;
}
Data HelperFunc::getData(const std::string &filename)
{
    unsigned long sz;
    unsigned char * buf  = HelperFunc::getFileData(filename.c_str(), "rb", &sz);
    if (!buf) {
    return Data::Null;
    }
    Data data;
    data.fastSet(buf, sz);
    return data;
    /*
    return Data::Null;*/
}

 

打开platform下的CCImage.cpp,按

将有FileUtils::getInstance()->getDataFromFile的方法都修改如下

//Data data = FileUtils::getInstance()->getDataFromFile(_filePath);	
Data data = HelperFunc::getData(_filePath);

并在CCImage.cpp文件头部引入HelperFunc.h

#include "HelperFunc.h"

重新编译,就可以加载加密后的文件了(也可以只加密部分文件,部分不加密都行,cocos会自动识别)

 

三、加密后到android上运行

经过上面两步操作结果发现,虽然在win32下可以运行,但是一到android就黑屏,显示不了图片,说图片格式不支持

弄这个图片加密整整整了两天,终于弄好了,下面是步骤(但具体是那些步骤是必须的还不知道)

 

复制frameworks\cocos2d-x\cocos\quick_libs\src\extra\apptools

到frameworks\cocos2d-x\extensions\目录,那个xxtea也找到,然后复制到这里

 

下面是我工程里面现存的有多个叫HelperFunc.cpp的文件,我试着删了一个,但编译就过不了了(所以还是不管了,都留着吧),

但是经过测试发现最终起作用的是

frameworks\cocos2d-x\cocos\quick_libs\src\extra\apptools这个目录里面的

下面是我的工程里的所有的HelperFunc.cpp

frameworks\cocos2d-x\cocos\quick_libs\src\extra\apptoolsframeworks\cocos2d-x\extensions\apptoolsframeworks\cocos2d-x\cocos\platform

 

使用以下命令将工程编译到android版

cocos compile -p android

若是报HelperFunc或该文件引用的文件缺失,则

修改frameworks\cocos2d-x\cocos\Android.mk,然后重新编译,

由于修改次数过多,我也不知道那些有用,那些没用了

好了,修改完成

 

 

 

 

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

xf_zhaojun
粉丝 0
博文 1
码字总数 1262
作品 0
广州
私信 提问
Quick-Cocos2d-x 3.3 使用WebView

1、编写ini文件。进入frameworks/cocos2d-x/tools/tolua文件夹,可以根据cocos2dxexperimentalvideo.ini编写生产cocos2dxexperimentalwebview.ini,也可以在github(https://github.com/coco......

小房小田
2015/06/11
0
0
VS Code 的 Quick-Cocos2dx 开发插件 - vscode-QuickXDev

vscode-QuickXDev,强大的 Quick-Cocos2dx 开发工具,目前适配 Quick-Cocos2dx-Community 3.7.2 版。 针对 VS Code 的 Quick-Cocos2dx 开发插件,具有诸多特性,方便进行 Quick-Cocos2dx 游戏...

lonewolf
2018/09/03
0
0
quick-cocos2d-x图片资源加密(续)

前篇: quick-cocos2d-x图片资源加密 让quick-cocos2d-x支持加密的plist文件 通过前篇的修改,我们已经能够在Windows平台的player,以及Android上使用加密的常见格式(png、jpg等)的图片资源了...

SunLightJuly
2014/01/03
0
4
如何在quick-cocos2dx v3.2中加密图片资源,然后使用加密后的图片资源呢

@SunLightJuly 你好,想跟你请教个问题:你好,我看到你的的quick cocos2dx 加密图片文件,这篇文章写的非常好。我第一次用quick cocos2dx,版本是3.2。图片我都按照你的博文里面的方法加密完...

水若
2015/04/16
296
1
VisualUIEditor 游戏 UI 编辑器 1.0.0 全新发布

基于项目 基本electron跨平台,editor-framework的dock组件,及cocos-html5的渲染层 实现功能 控件拖拽使用 控件的快速移动,缩放,属性更改 图片的快速预览 坐标尺,快速的定位当前鼠标对应...

tickbh
2016/08/29
3.2K
20

没有更多内容

加载失败,请刷新页面

加载更多

研究下这代码,用到了guava和线程池

import com.google.common.util.concurrent.FutureCallback;import com.google.common.util.concurrent.Futures;import com.google.common.util.concurrent.ListenableFuture;import c......

暗中观察
20分钟前
2
0
《css 揭秘》 之垂直居中的实现

最近看了 Lea Verou 的 《css揭秘》一书,让我对自己的 css学习产生了深深的怀疑。这本书真是太棒了,里面涉及到很多优雅又有趣的效果实现,真的是非常棒。如果你有时间,十分建议你去看看。...

IrisHuang
26分钟前
1
0
java 抽象类(2)

/*需求: 描述一个图形、圆形、 矩形三个类。不管哪种图形都会具备计算面积与周长的行为,但是每种图形计算的方式不一致而已。常量的命名规范:全部字母大写,单词与单词 之间 使用下...

hellation_
28分钟前
2
0
总结:堆和栈

堆 堆比较好理解,即存放对象的地方。这里的对象由GC管理 1、类变量(static修饰的变量):在程序加载时系统就为它在堆中开辟了内存,堆中的内存地址存放于栈以便于高速访问。静态变量的生命...

浮躁的码农
34分钟前
1
0
JavaScript 新语法详解:Class 的私有属性与私有方法

译者按: 为什么偏要用**#**符号? 原文:JavaScript's new #private class fields 译者:Fundebug 本文采用意译,版权归原作者所有 proposal-class-fields与proposal-private-methods定义了 ...

Fundebug
36分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部