cocos creator 圖片加密
cocos create目前不提供加密資源的功能, 只能自己修改引擎來解決
雖說是要改引擎, 其實(shí)很簡單, 此方案不適用于為web平臺
1.首先修改CCImage.h類定義添加
ssize_t mydecode(const unsigned char * data, ssize_t dataLen, unsigned char ** outBuffer);
2.跳到CCImage.cpp
添加函數(shù)實(shí)現(xiàn)
ssize_t Image::mydecode(const unsigned char * data, ssize_t dataLen, unsigned char ** outBuffer)
{
? ? if(dataLen<=7 || memcmp(data, "aabbcc", 6) != 0) ?//是否加密的標(biāo)記
? ? {
? ? ? ? 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函數(shù)
將
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 "參數(shù)錯(cuò)誤"
else:
? ?encodeDir(sys.argv[1])
標(biāo)簽: