文件加密原理
有个概念需要理解,就是我们电脑中的文件都可以用二进制来表示里面的内容(字节数组)
加密原理:
1、加密一个文件就是把这个文件的内容(字节数组)按加密的规则去修改它的字节数组(内容)
2、加密后这个文件就不是原来的文件了,因为字节数组(内容)被更改了,所以如果不解密的话这个文件是不能用的
解密原理:
1、解密就是把加密的文件字节数组按加密的规则去解密它,把字节数组(内容)恢复成原来的样子
2、解密后这个文件就是没加密之前的文件了,可以正常使用了
在游戏项目中经常会对AssetBundle包就行加密(资源包、代码包…)
方式一:
通过 FileStream + 密钥 按自己的规则去加密(对字节进行加减乘除异或取反等操作) AssetBundle
string key = "a1b2c3d5448we54asd21zcs"; // 自定义密钥(我乱打的。。。)
byte[] keyByte = System.Text.Encoding.ASCII.GetBytes(key);
然后解密的时候先使用WWW通过路径加载这个AssetBundle
WWW www = new WWW("path")); //path-文件路径 www.bytes-文件字节数组
yield return www;
再通过密钥 + www.bytes(加密后的字节数组) + a1b2c3d5448we54asd21zcs 和自己定的规则去解密
最后通过 AssetBundle.LoadFromMemory()去加载解密后的AssetBundle
使用FileStream加密一个文件总结:
加密:
- 通过FileStream打开这个文件
- 通过FileStream加自定义的规则去修改这个文件的字节数组
解密:
- 通过WWW加载这个文件
- 按自定义的规则去解密这个文件
- 通过AssetBundle.LoadFromMemory加载