admin管理员组

文章数量:1576003

如果cocos项目没有对资源进行加密处理,发布出来的APK一旦被人解包,则所有图片资源都会暴露出来,为了避免图片资源被人恶意使用,所以我准备给自己项目中使用到的图片进行简单加密,这样可以防住一部分解包伸手党。

我们这里采用最常见的异或加密,异或加密性质:一个数异或同一个数两次,得到的是本身。根据这个性质,我们可以采用把图片的字节流进行异或加密,只需要设置一个Key,在本地客户端使用Key进行一次异或,然后在cocos导入文件的函数中再使用Key进行一次异或,即可还原。

同时为了兼容没有加密的图片,我们需要再加密过后的文件头上添加一下标识,比如文件头部添加N个自定字节流来表示该图片别加密过,同时除了添加的头标识外的其他字节流全部或者部分进行异或加密。

Python进行图片文件加密

根据上面的思路,首先我们需要把项目中使用到的图片进行字节流加密,这里我为了方便就采用python来做,比较简单快捷。你也用C++,java等等你擅长的语言进行文件操作。

#!/usr/bin/env python
#coding=utf-8
# 2019-12-28 by LeiTao
#
import sys
import os

FileEncrpyEnum = {
   ".png"}  #这里填入你需要加密图片的后缀名,这里我只加密png
EncrpyKey = 58   #异或加密秘钥
HeadSize = 8	 #添加8个byte在文件头
EncrySize = 100  #为了更快的解密,只加密文件的100个字节流
def MakeEncrpy(pahtName,FileName):
	oldfile = open(os.path.join(pahtName, FileName),'rb')
	oldConten = oldfile.read()
	oldfile.close()

	li_out=[]
	#添加加密标识
	for index in range(HeadSize):
		li_out.append(chr(0x01))

	for i in range(len(oldConten)):
		if i < EncrySize:
			li_out.append(chr(ord(oldConten[i])^EncrpyKey)) #异或Key进行加密
		else:
			li_out.append(chr(ord(oldConten[i])))
	newfile = open(os.path.join(pahtName, FileName), 'wb')
	newfile.truncate(

本文标签: 图片Cocos