Cocos2d-x客户端资源加密
来源:互联网 发布:prim算法和迪杰斯特拉 编辑:程序博客网 时间:2024/06/06 05:58
安卓打包的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.batset DSRC=E:\Cocos2d\Cocos2d-x\Projects\Game_Lua\resset ESRC=E:\Cocos2d\Cocos2d-x\Projects\Game_Lua\assetscd binpack_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);}
至此资源加密完成。
0 0
- Cocos2d-x客户端资源加密
- Cocos2d-x客户端资源加密
- Cocos2d-x客户端代码加密
- 【加密】Cocos2d-x PNG图片资源加密
- quick-cocos2d-x图片资源加密(续)
- Cocos2d-x 资源加密解密实践总结
- Cocos2d-x 资源加密解密实践总结
- Cocos2d-x PNG图片资源加密
- quick-cocos2d-x 脚本和资源加密
- quick-cocos2d-x 图片资源加密
- quick-cocos2d-x图片资源加密(续)
- Cocos2d-x 资源加密解密实践总结
- quick-cocos2d-x 脚本和资源加密
- 【加密】Cocos2d-x PNG图片资源加密(修改版)
- Cocos2d-x 图片资源加密,Lua文件加密
- 【转】【加密】Cocos2d-x PNG图片资源加密
- 【加密】Cocos2d-x PNG图片资源加密(修改版)
- 【Cococs2d-x】通过TexturePacker加密图片资源(Cocos2d-x方式)
- 剑指offer-复杂链表的复制
- Android Studio如何使用Git提交代码到GitHub和OsChina并解决冲突
- Django实战(20):分页(Pagination)
- Array--List--ArrayList 三者的区别(一)——引言篇
- 多线程 : ThreadLocal 实现线程间共享变量隔离例子
- Cocos2d-x客户端资源加密
- 310. Minimum Height Trees
- django-pagination---七步教你实现Django网站列表自动分页
- [LeetCode]101. Symmetric Tree
- Python中os.path的妙用
- 如何部署Python Web应用:记录一次Heroku部署完整过程
- Python+Apache+CGI完全配置
- android 6.0 SystemUI源码分析(6)-StorageNotification介绍
- Django分页的基本实现办法