cocos creator 图片加密
cocos create目前不提供加密资源的功能, 只能自己修改引擎来解决
虽说是要改引擎, 其实很简单, 此方案不适用于为web平台
1.首先修改CCImage.h类定义添加
ssize_t mydecode(const unsigned char * data, ssize_t dataLen, unsigned char ** outBuffer);
2.跳到CCImage.cpp
添加函数实现
ssize_t Image::mydecode(const unsigned char * data, ssize_t dataLen, unsigned char ** outBuffer)
{
if(dataLen<=7 || memcmp(data, "aabbcc", 6) != 0) //是否加密的标记
{
return dataLen;
}
ssize_t len = dataLen-7;
*outBuffer = (unsigned char*)malloc( len );
unsigned char key = data[6];
for(ssize_t i=0;i<len;i++)
{
(*outBuffer)[i] = data[i+7] ^ key; //最简单的xor, 自己改算法
}
return len;
}
3.修改CCImage.cpp中的initWithImageData函数
将
unsigned char* unpackedData = nullptr;
ssize_t unpackedLen = 0;
改为
unsigned char* decodeData = nullptr;
unsigned char* unpackedData = nullptr;
ssize_t unpackedLen = 0;
dataLen = mydecode(data, dataLen, &decodeData);
if(decodeData)
{
data = decodeData;
}
并在后面添加释放
if(decodeData)
{
free(decodeData);
}


加密脚本
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os,sys
import os.path
import filetype
import shutil
def encodeFile(infile, outfile):
fr = open(infile, 'rb')
key = 0x73
inBuffer = fr.read()
outBuffer = "880730"+chr(key)
for b in inBuffer:
outBuffer = outBuffer + chr(ord(b) ^ key)
#print outBuffer
open(outfile,'wb').write(outBuffer)
fr.close();
def encodeDir(rootdir):
encryptRootDir = "encrypt_" + rootdir
if os.path.exists(encryptRootDir):
shutil.rmtree(encryptRootDir)
# os.mkdir(encryptRootDir)
shutil.copytree(rootdir, encryptRootDir)
for parent,dirnames,filenames in os.walk(encryptRootDir):
for filename in filenames:
kind = filetype.guess(os.path.join(parent,filename))
if kind is not None:
if kind.extension is "png" or kind.extension is "jpg":
#print('File extension: %s' % kind.extension)
# print(os.path.join(encryptDir,filename))
# encryptDir = "encrypt_" + parent
# pathIn=os.path.join(parent,filename)
pathEncrypt=os.path.join(parent,filename)
# print("rootdir: %s" % rootdir)
# print("parent: %s" % parent)
# print("encryptDir: %s" % encryptDir)
# print("filename: %s" % filename)
print("file: %s" % parent + "/" + filename)
encodeFile(pathEncrypt, pathEncrypt)
print "--- Encoding END ---"
print "--- Encoding Begin ---"
# print len(sys.argv)
if len(sys.argv) !=2:
print "参数错误"
else:
encodeDir(sys.argv[1])