Cocos2d-x客户端资源加密
安卓打包的apk文件只是做了简单的压缩,通过解压缩可以获取资源文件,如果不想图片资源被别人看到,那么可以对图片进行加密。
cocos2d-x提供了xxtea加密和解密算法,先将图片进行加密,这样就打不开图片了,然后在CCImage解析图片的时候进行解密即可。
一、下载quick-cocos2d-x
quick-cocos2d-x封装了一套加密的工具,先下载quick-cocos2d-x,git地址https://github.com/dualface/v3quick。
解压之后把bin目录拷贝到我们的cocos2d-x工程根目录。
二、加密
quick-cocos2d-x提供了pack_files命令,可以将图片进行加密,加密算法用的是xxtea,你可以到cocos2d-x\external\xxtea目录下查看。
到bin目录打开命令行窗口,执行pack_files.bat -h 可以查看pack_files的使用方法。
编写打包资源脚本
- ::res_pack.bat
- set DSRC=E:\Cocos2d\Cocos2d-x\Projects\Game_Lua\res
- set ESRC=E:\Cocos2d\Cocos2d-x\Projects\Game_Lua\assets
- cd bin
- pack_files.bat -i %DSRC% -o %ESRC% -ek 123456 -es test
加密后的图片文件:
打开游戏则会报错,unsupport image format,因为每种图片的前面一些字节是这种图片类型的标记,比如png的前面8个字节固定是0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a。因为已经被加密了,所以识别不了图片格式。
二、解密
所有图片的加载都封装在CCImage类的initWithImageFile和initWithImageFileThreadSafe方法。
- // initWithImageFile
- Data data = FileUtils::getInstance()->getDataFromFile(_filePath);
- if (!data.isNull())
- {
- ret = initWithImageData(data.getBytes(), data.getSize());
- }
封装一个解密方法,参数是Data类型的,然后再用解密后的数据去加载图片。
- void Image::image_decrypt(Data *data)
- {
- const char* key = "123456";
- const char* sign = "test";
- unsigned char* dataBytes = data->getBytes();
- ssize_t dataLen = data->getSize();
- ssize_t signLen = strlen(sign);
- ssize_t keyLen = strlen(key);
- if (strncmp(sign, (const char*)dataBytes, signLen) != 0)
- {
- return;
- }
- xxtea_long retLen = 0;
- unsigned char* retData = xxtea_decrypt(dataBytes+signLen, dataLen-signLen, (unsigned char*)key, keyLen, &retLen);
- data->fastSet(retData, retLen);
- }
分别在initWithImageFile和initWithImageFileThreadSafe方法中调用。
至此资源加密完成。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)