cocos creator资源加密解密插件----支持web和native

cocos creator2.4.5有效
支持对web平台和native平台进行加密,支持对文件名进行混淆。
如图
在这里插入图片描述

代码列表 :
在这里插入图片描述

web端
加密思路:不破坏原有工程,构建后修改导出的cocos2d-js.js文件,主要是修改有三点,解密代码放在downloadArrayBuffer,修改downloadText和downloadImage,改为通过downloadArrayBuffer先下载二进制流再解密解码为文本或图片。

var downloadArrayBuffer = function downloadArrayBuffer(url, options, onComplete) {
    options.responseType = "arraybuffer";
    url = _getRealPath(url)
    downloadFile(url, options, options.onFileProgress, function (err,data) {
        if(!err){
            ///解密
            data = MainEnc._decriptTool.decodeArrayBuffer(data);
        }
        onComplete&&onComplete(err,data)
    });
}

如上,主要是downloadArrayBuffer进行解密,另一个要注意的就是下载图片要手动转化一下。

加密解密使用的xxtea,代码如下:

encodeArrayBuffer(arrbuf, sign = this.encriptSign, key = this.encriptKey) {
		Editor.log("11");
		Editor.log(arrbuf);
		Editor.log("22");
		if (this.checkIsEncripted(arrbuf, sign)) {
			return
		}

		let buffer = new Uint8Array(arrbuf);
		let bufferStr = this.Uint8ArrayToString(buffer);
		let enbufferStr = XXTEA.encryptToBase64(bufferStr, sign);
		let enBuffer = this.stringToUint8Array(enbufferStr);
		
		let signBuf = new Uint8Array(this.strToBytes(sign));
		Editor.log("11");
		Editor.log(signBuf);
		Editor.log("12");
		let _outBuffer = new ArrayBuffer(signBuf.length + enBuffer.length);
		let outBuffer = new Uint8Array(_outBuffer);

		for (let i = 0; i < signBuf.length; i++) {
			outBuffer[i] = signBuf[i]
		}

		for (let i = 0; i < enBuffer.length; i++) {
			outBuffer[signBuf.length + i] = enBuffer[i]
		}
		Editor.log(outBuffer);
		return outBuffer;
	}

	decodeArrayBuffer(arrbuf, sign = this.encriptSign, key = this.encriptKey) {
		if (!this.checkIsEncripted(arrbuf, sign)) {
			return arrbuf;
		}
		let signBuf = new Uint8Array(this.strToBytes(sign));
		let buffer = new Uint8Array(arrbuf);
		
		let size = buffer.length - signBuf.length;
		let _outArrBuf = new ArrayBuffer(size)
		let outBuffer = new Uint8Array(_outArrBuf)
		for (let i = 0; i < size; i++) {
			outBuffer[i] = buffer[signBuf.length + i];
		}
		
		let enArrBufStr = this.Uint8ArrayToString(outBuffer);
		let deArrBufStr=XXTEA.decryptFromBase64(enArrBufStr,sign);
		let outBuffer2=this.stringToUint8Array(deArrBufStr);

		return outBuffer2;
	}

至于文件名混淆,就是对源uuid格式的文件名和一个混淆签名再次进行md5,得到新文件名。
如aaaa-bbbb-cccc-dddd.png变为1111-2222-3333-4444.png
关键是工程中如何识别新文件名。项目运行时,查找文件是根据文件路径查到uuid再组装成url的,我们只需要在url组装后,再按照我们的混淆规则,再算一次就好了,保险起见,只混淆uuid格式的文件名。native模式下,修改jsb-engine.js的transformUrl,对本地url进行再次转换;web模式下,downloadArrayBuffer里直接在下载之前将url转换成混淆后的文件名。

需要的可以加群聊一起讨论:
在这里插入图片描述

参考链接:https://www.jianshu.com/p/43ad9b4a4eb5

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值