cocos creator加密图片资源方案

cocos create目前不提供加密资源的功能, 只能自己修改引擎来解决
虽说是要改引擎, 其实很简单, 此方案不适用于为web平台

1.首先修改CCImage.h类定义添加

ssize_t mydecode(const unsigned char * data, ssize_t dataLen, unsigned char ** outBuffer);

2.跳到CCImage.cpp
添加函数实现

ssize_t Image::mydecode(const unsigned char * data, ssize_t dataLen, unsigned char ** outBuffer)
{
    if(dataLen<=7 || memcmp(data, "aabbcc", 6) != 0)  //是否加密的标记
    {
        return dataLen;
    }
    ssize_t len = dataLen-7;
    *outBuffer = (unsigned char*)malloc( len );
    unsigned char key = data[6];
    for(ssize_t i=0;i<len;i++)
    {
        (*outBuffer)[i] = data[i+7] ^ key;  //最简单的xor, 自己改算法
    }
    return len;
}

3.修改CCImage.cpp中的initWithImageData函数

unsigned char* unpackedData = nullptr;
ssize_t unpackedLen = 0;

改为

unsigned char* decodeData = nullptr;
unsigned char* unpackedData = nullptr;
ssize_t unpackedLen = 0;

dataLen = mydecode(data, dataLen, &decodeData);
if(decodeData)
{
	data = decodeData;
}

并在后面添加释放

if(decodeData)
{
free(decodeData);
}

最后就是写个小程序来加密图片文件了,
encode.zip (597 字节)

12赞

web平台不使用c++吧?

写错了,不支持web

native的话配合texturepacker,在AppDelegate.cpp中添加ZipUtils::setPvrEncryptionKey(密码);这一句就可以了。

5赞

@langouster 感谢楼主的技术分享,我有个问题 不知道楼主加密小程序(encode.py)如何运行, 能否写个 使用demo或者使用 用例 不胜感激

我用的方法跟你差不多 但我直接修改InitWithImageData()这个方法,不需要修改头文件了。

另外楼主能不能再出个音频加密的教程,感激不尽。

感谢楼主的技术分享

前辈,能否相助,图片加密以及creator的使用加密图片的问题

:eyes::eyes::eyes:

mark

mark

战略插眼

本来准备来移植使用你的加密的,打开引擎代码一看,引擎团队把你的算法集成了

mark

我有个问题,你的加密工具怎么用啊?

mark一下。能用上

mark

mark mark

mark!!

加密png最好做下特殊处理,png前16个字节是固定的,这个要单独提出来不加密,不然容易被破解