欢迎光临散文网 会员登陆 & 注册

cocos creator 图片加密

2022-05-21 12:17 作者:Nimanggi  | 我要投稿

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])


cocos creator 图片加密的评论 (共 条)

分享到微博请遵守国家法律