美文网首页
Cocos2d-x客户端资源加密

Cocos2d-x客户端资源加密

作者: 程序猿TODO | 来源:发表于2021-07-20 09:42 被阅读0次

安卓打包的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方法中调用。


至此资源加密完成。

相关文章

  • cocos资料

    Cocos 资料大全 Cocos2d-x Lua运行流程 加密 cocos2dx资源和脚本加密quick-lua3...

  • Cocos2d-x客户端资源加密

    安卓[http://lib.csdn.net/base/15]打包的apk文件只是做了简单的压缩,通过解压缩可以获...

  • Cocos2d-x 2.X iOS lua代码XXTEA 加密后

    Cocos2d-x 2.2.6 iOS 版,直接跳过了XXTEA 解密,导致XXTEA加密的代码无法运行,以下是改...

  • RSA 加密解密

    https 私钥 -》 服务端。 私钥加密 -签名 公钥 -〉 客户端 公钥加密 -加密 下面是用公钥 加密,...

  • Https 原理

    客户端发请求服务端返回证书客户端信任证书,拿到非对称加密公钥,加密发送’对称加密的‘的密钥,服务端用非对称的私钥解...

  • COCOS2DX 模拟器 simulator 资源 Resour

    不想使用COOCS2DX 默认资源路径 改了下。frameworks\cocos2d-x\cocos\platfo...

  • Unity3D代码加密

    Virbox提供Unity加密代码及资源的产品,保护代码防止反编译,保护资源被提取提供Unity加密代码及资源的产...

  • 如何加密邮件

    这里说的加密是加密邮件内容,端到端加密,而不是指传输加密。传输加密只保证你的邮件客户端到邮件服务器之间是加密的,而...

  • openwrt

    所有 pppoe 类型客户端的本质都是对 pppoe 的握手过程进行加密 因为客户端会创建一个 加密的账号密码的宽...

  • SSL握手原理

    目的就是生成对称加密密钥 客户端向服务端发送信息,包含客户端随机数,支持的加密算法版本 服务端向客户端发送服务端随...

网友评论

      本文标题:Cocos2d-x客户端资源加密

      本文链接:https://www.haomeiwen.com/subject/oeslmltx.html