cocos2d_lua图片加密及读取

40 篇文章 2 订阅
本文探讨了在Cocos2d-x项目中遇到加密图片时,如何通过检测并使用xxtea库进行解密,以确保图片数据的正常显示。作者详细介绍了如何修改源代码来实现解密过程,并提到了关键的加密解密步骤和工具的使用。
摘要由CSDN通过智能技术生成

读取加密后的图片
暂时没有想到更好的办法,只好修改了CCImage.cpp的源文件去判断图片是否加密,如果加密了,首先对其解密,再生成CCImage对象

// 首先包含xxtea的头文件,xxtea在cocos2dx已包含,无需单独提供,只需要正确引入即可
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "xxtea/xxtea.h"
#else
#include "external/xxtea/xxtea.h"
#endif
bool Image::initWithImageData(const unsigned char * data, ssize_t dataLen)
{
    bool ret = false;
    
    do
    {
        CC_BREAK_IF(! data || dataLen <= 0);
        
        unsigned char* unpackedData = nullptr;
        ssize_t unpackedLen = 0;
        
        //detect and unzip the compress file
        if (ZipUtils::isCCZBuffer(data, dataLen))
        {
            unpackedLen = ZipUtils::inflateCCZBuffer(data, dataLen, &unpackedData);
        }
        else if (ZipUtils::isGZipBuffer(data, dataLen))
        {
            unpackedLen = ZipUtils::inflateMemory(const_cast<unsigned char*>(data), dataLen, &unpackedData);
        }
        else
        {
			// 注释掉这个分支其余代码,如果图片数据data为加密的,必须首先解密才可正常使用
            //unpackedData = const_cast<unsigned char*>(data);
            //unpackedLen = dataLen;

			//TODO:start
			// 加密key
			char* key = "testkey";
			int key_len = strlen(key);
			// 加密sign
			const char* sign = "testsign";
			int sign_len = strlen(sign);
			xxtea_long len = 0;
			// 如果加密的数据最开始几个字节如果与签名相符,则是加密的数据
			int result = strncmp((const char*)data, sign, sign_len) == 0;
			if (result) {
				unpackedData = xxtea_decrypt((unsigned char*)data + sign_len,
					(xxtea_long)dataLen - sign_len,
					(unsigned char*)key,
					(xxtea_long)key_len,
					&len);
				unpackedLen = len;
			}
			else {
				unpackedData = const_cast<unsigned char*>(data);
				unpackedLen = dataLen;
			}
			//TODO: end
        }

在libcocos2d项目external右键新建筛选器命名xxtea然后添加现有项将xxtea.h和.cpp加进来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值