Bundle文件是否需要加密?加密又会带来什么影响?这要看文件的重要程度与安全级别,如果不想它被轻易获取,则我们需要对其进行加密。但是对于加密了的文件,访问时需要先进行解密,这无疑会延缓访问速度,而且不同的加密算法方式,其安全级别和解密效率也是不同的。接下来几篇文章,主要介绍一些常用加密算法。该篇文章主要介绍最原始的加密算,就是直接针对文件二进制数据进行异或编码。Byte(原始) 异或 key(秘钥) = Byte(加密后),Byte(加密后) 异或 key(秘钥) = Byte(原始)。利用该原理进行加密特点是快速高效,但是容易被破解。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/*
* Author:W
* 资源加密工具接口
*/
namespace W.GameFramework.HotUpdate
{
public interface EncryptionHelper
{
/// <summary>
/// 文件加密
/// </summary>
/// <param name="targetFile"></param>
/// <param name="key"></param>
/// <returns></returns>
byte[] EncryptFile(byte[] targetFile, string key);
/// <summary>
/// 文件解密
/// </summary>
/// <param name="encryptedFile"></param>
/// <param name="key"></param>
/// <returns></returns>
byte[] DeEncrypthFile(byte[] encryptedFile, string key);
}
}
二进制加密工具实现
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/*
* Author:W
* 二进制加密(简单地加密方法)
* 使用异或位运算:A 异或 Key = B,B 异或 Key = A
*/
namespace W.GameFramework.HotUpdate
{
public class BinaryEncryptHelper : EncryptionHelper
{
/// <summary>
/// 文件解密
/// </summary>
/// <param name="encryptedFile"></param>
/// <param name="key"></param>
/// <returns></returns>
public byte[] DeEncrypthFile(byte[] encryptedFile, string key)
{
byte[] originalFile = new byte[encryptedFile.Length];
byte keyValue = byte.Parse(key);
for (int i = 0; i < encryptedFile.Length; i++)
{
originalFile[i] = (byte)(encryptedFile[i]^ keyValue);
}
return originalFile;
}
/// <summary>
/// 文件加密
/// </summary>
/// <param name="targetFile"></param>
/// <param name="key"></param>
/// <returns></returns>
public byte[] EncryptFile(byte[] targetFile, string key)
{
byte[] encryptedFile = new byte[targetFile.Length];
byte keyValue = byte.Parse(key);
for (int i = 0; i < targetFile.Length; i++)
{
encryptedFile[i] = (byte)(targetFile[i]^keyValue);
}
return encryptedFile;
}
}
}