图片资源的加密和cocos2d-x中的解密

发布时间:2016-12-31 7:26:30编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"图片资源的加密和cocos2d-x中的解密 ",主要涉及到图片资源的加密和cocos2d-x中的解密 方面的内容,对于图片资源的加密和cocos2d-x中的解密 感兴趣的同学可以参考一下。

图片资源的加密和cocos2d-x中的解密

主要处理png图片,其他格式图片也是一样的原理。阅读前可以简略了解一下png格式图片的Data trunck。

     首先使用python脚本去掉png的PNG SIG(8 bytes) 以及末尾的PNGIEND(12 bytes)。然后图片剩余数据的每一个字节和秘钥字符串的每一个字符做不进位加(按位异或,解密的原理就是 a ^ b ^ b = a)。通过改写cpp工程里的 Image::initWithImageData(const unsigned char * data, ssize_t dataLen),来进行还原图片数据,也就是解密,过程就是对每一位加密后的数据按秘钥做异或运算还原数据,然后加上PNGSIG和PNGIEND。

加密脚本:(这个脚本会生成加密后的图片替换原始图片)

  1 # -*- coding:UTF-8 -*-  2 #该脚本用于加密png图片  3 __author__ = "ChenGuanzhou"  4   5 import os  6 import time  7 CUR_DIR = os.getcwd();  8 print("cur_dir:",CUR_DIR)  9 #CUR_DIR = 'C:\\Users\\chenguanzhou\\Desktop' 10 _KEY = 'jiaozi2013' #指定加密秘钥,英文 11 _ENCRYSIG = 'jiaozhi' 12 _PNGSIG = bytes([0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a]) 13 _PNGIEND = bytes([0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82]) 14 #获取filesig是否是png 15 def isPNGSig(bytes_8): 16     return bytes_8 == _PNGSIG 17  18 def isPNG(absPath):#判断是否是PNG图片 19     """ 20     :param absPath: 文件的绝对路径 21     :return: {Bool} 22     """ 23     isFile = os.path.isfile(absPath) 24     hasPNGSig = False 25     fileExt = os.path.splitext(absPath)[1] 26     isPngExt = (fileExt == ".png" or fileExt == ".PNG") 27     if isFile and isPngExt: 28         with open(absPath,"rb") as file: 29             hasPNGSig = isPNGSig(file.read(8)[:8]) 30     return isFile and isPngExt and hasPNGSig 31  32 def preProcessPng(pngData):#预处理图片数据 33     """ 34     剪掉png的signature(8bytes),IEND(12Bytes) 35     :param pngData: 36     :return: 37     """ 38     assert type(pngData) == bytes 39     lostHeadData = pngData[8:] 40     iendData = lostHeadData[-12:] 41     if iendData == _PNGIEND:#防止Png已经进行过外部软件的压缩,丢掉了IEND