cocos creator 资源加密解密 实践

看看引擎是在哪里载入文件数据的。

图片加密

经过调试跟踪,Sprite::create的调用堆栈如下:

Image::initWithImageFile

TextureCache::addImage

Sprite::initWithFile

Sprite::create

bool Image::initWithImageFile(const std::string& path)
{
     bool ret = false;
    //NOTE: fullPathForFilename isn't threadsafe. we should make sure the parameter is a full path.
//    _filePath = FileUtils::getInstance()->fullPathForFilename(path);
    _filePath = path;

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

    if (!data.isNull())
    {
        ret = initWithImageData(data.getBytes(), data.getSize());
    }

    return ret;
}

这个方法是读取图片文件,然后获取byte数据流,并用这些数据初始化形成图片,现在我们要做的就是在获取到这些二进制数据之后,进行解密。
文件加密

文件数据的读取在不同平台上有不同的实现,

如果要在目标平台上做资源加密,就需要修改目标平台上的读取实现。

FileUtils是一个文件读取基类,提供有默认的实现,一些平台会提供特定的实现。

通过多态,FileUtils让我们的游戏客户端代码不需要对特定平台做特定处理,

也不需要关心FileUtils子类的类型。

读取方法在CCFileUtils.cpp getDataFromFile 和 getStringFromFile这两个方法。

 

 

加密部分 

XOR加密是一种简单高效、非常安全的加密方法

逻辑运算之中,除了 AND 和 OR,还有一种 XOR 运算,中文称为"异或运算"。

它的定义是:两个值相同时,返回false,否则返回true。也就是说,XOR可以用来判断两个值是否不同。

JavaScript 语言的二进制运算,有一个专门的 XOR 运算符,写作^。

1 ^ 1 // 0
0 ^ 0 // 0
1 ^ 0 // 1
0 ^ 1 // 1

XOR 运算有一个很奇妙的特点:如果对一个值连续做两次 XOR,会返回这个值本身。

 

未完待续

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mrwql

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值