Unity制作影视互动游戏视频加密方案分享

前言

随着《完蛋!我被美女包围!》和《美女,别影响我学习》等影视互动游戏的爆火 公司最近也有款影视互动项目 于是乎就接到了对视频加密的任务 毕竟谁也不想直接被拿到几十个G的视频原文件看完直接退款吧 于是乎研究了一下当前的加密方案(仅限用Unity原生 VideoPlayer播放)

 

一、Assetbundle打包

这种方式就不做过多介绍了 接触过热更新的小伙伴们基本手拿把掐 本质就是把视频源文件打成ab包 要播放视频的时候在异步解包播放

优点:操作简单方便 加载也比较快

缺点:有可能会被解包 防君子不防小人

二、字节加密

这种方式本质就是将任意文件转换成字节数组 然后对字节数组进行加密解密操作 这个方式不限于视频文件 任何想要加密的文件都可以

加密方式也有许多 比如 将所有字节取相反的二进制 把所以字节移位、截取数组开头的一段数组放到数组末尾、自定义个字符串转换成数组拼接到数组开头 等等...

然后把加密后的字节数组在通过File.WriteAllBytes方法写成文件 解密的时候在进行加密时候的逆向操作即可

以取相反二进制为例 

//加密资源
public static void BuildVideoByTurnByte()
{
	//要加密的视频资源目录
	string videoPath = Application.streamingAssetsPath + "/Test/";
	//加密后的视频资源目录
    string videoOutPath = Application.streamingAssetsPath + "/Test2/";

	//示例 选取目录下的所有文件
    var files = Directory.GetFiles(videoPath, "*", SearchOption.AllDirectories);
	List<string> list = new List<string>();
	for (int i = 0; i < files.Length; i++)
	{
		//筛选掉.meta文件 不做操作
        string ext = Path.GetExtension(files[i]);
        if (ext == ".meta")
            continue;

		//获取文件名
        string fileName = Path.GetFileNameWithoutExtension(files[i]);
        //将文件转换为字节数组
		byte[] bytes = File.ReadAllBytes(files[i]);
		//加密
		byte[] buffer_ed = TurnByte(bytes);
        //输出加密后的文件 后缀名随你喜欢取  这里以哥哥为例
		File.WriteAllBytes(videoOutPath + fileName + ".cxk", buffer_ed);

    }

    Logger.Log("资源加密成功");
}


public static byte[] TurnByte(byte[] input)
{

    for (int i = 0; i < input.Length; i++)
    {
		//隐式类型转换
        byte currentByte = input[i];
		//去相反的二进制
        byte shiftedValue = (byte)(~currentByte);
        //替换
		input[i] = shiftedValue; 
    }

    return input;
}

以上操作便可把.mp4文件写入成.cxk的文件 此时如果直接把更改后缀回.mp4 播放 会发现无法播放

Unity里播放如下

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值