1.对cocos2d-x引擎进行修改和恢复的工具,使其具备解密功能。如下:
2.对磁盘文件进行加密解密的工具,方便打包时的批量筛选操作。如下:
加密解密的额外开销
做了资源加密会降低程序的性能,原因很简单,需要对文件数据进行额外的处理。稍微复杂一点的加密算法,可能要申请内存空间来保存解密数据。delete , new 都是耗时操作。
资源的加密也可能会使得apk包体体积增大。这是为什么呢?
原因是,用Cocos2d-x 开发,资源会有很多 *.plist *.ExportJson *.tmx 等文件。
plist 可能是配置,也可能是粒子。
*.ExportJson 等文件是 Cocostudio1.6 做出的动画、UI 导出文件。
*.tmx 是Tilemap输出的地图格式。
以上说的这些文件,都是用文本存储数据的,可以用Windows记事本打开查看内容。
apk包实际上是一个压缩包,压缩算法对于有大量冗余数据的文件压缩率是很高的。我之前写过一篇关于压缩算法的文章《文件压缩与解压:哈夫曼编码》有兴趣的同学可以看看。
我做过一个试验,600多KB的 UI *.plist *.ExportJson 文件,打成apk包后,实际上只占60多KB。这是因为压缩算法能对这些配置的文本文件有很高的压缩率。如果我们的加密算法会降低冗余数据。比如:一个文件的内容是“111111....",10万个1。我们的加密算法为了增加安全性,会把这些内容加密成为:"sfsadfsa...."。解密者很难从无规律的不重复的数据推出原先的”111111....“的内容,但同时对这样的数据,压缩率也会很低。
我之前设计了一个使用密钥加密的算法,会消除冗余数据,对于都是同样的一个字符的内容,可以加密成一个看似无规律的乱七八糟的内容,其实还是有规律可言,只是无规律循环节很大而已。然后,这些加密后的数据,几乎就不能压缩了。加密资源之后输出的apk包相比没加密资源的包,体积增加不少。对于这种情况,可以仅对图片等关键资源加密,而不对非关键性的文本文件加密。或者降低算法的加密强度,保留数据冗余性。