美文网首页
游戏开发—文件校验

游戏开发—文件校验

作者: Webber_ | 来源:发表于2018-12-15 20:45 被阅读0次

    游戏开发中,有很多文件校验需求。如:安装包、更新包、代码、配置文件、资源包等,都可能需要在安装或者下载更新后,甚至每次启动游戏,对相关文件进行完整及正确性校验,确保与最新版本一致。

    校验常常使用诸如CRC32、MD5、SHA1等在内一种或多种校验码,检验本地文件和正确文件是否一致。

    下面列出这3种实现方式(C#版):

CRC32(全称循环冗余校验)
    CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列。附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系,即CRC多项式。如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。因此,通过检查这一关系,就可以实现对数据正确性的检验。

CRC32多项式
    private static ulong[] Crc32Table;
    //计算CRC32码表,也可以直接定义
    public static void CalculateCRC32Table()
    {
        ulong value;
        Crc32Table = new ulong[256];
        int i, j;
        for (i = 0; i < 256; i++)
        {
            value = (ulong)i;
            for (j = 8; j > 0; j--)
            {
                if ((value & 1) == 1)
                    value = (value >> 1) ^ 0xEDB88320;
                else
                    value >>= 1;
            }
            Crc32Table[i] = value;
        }
    }

    //获取文件CRC32校验值
    public static string GetCRC32FromFile(string fileName)
    {
        FileStream file = new FileStream(fileName, FileMode.Open);
        byte[] buffer = new byte[file.Length];

        file.Read(buffer, 0, buffer.Length);
        file.Close();
        file.Dispose();

        //计算CRC32码表
        CalculateCRC32Table();
        ulong value = 0xffffffff;

        for (int i = 0; i < buffer.Length; i++)
        {
            value = (value >> 8) ^ Crc32Table[(value & 0xFF) ^ buffer[i]];
        }
        return String.Format("{0:x8}", value ^ 0xffffffff);
    }

MD5(Message-Digest Algorithm)
    MD5消息摘要算法以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。(百度百科说明)

    public static string GetMD5HashFromFile(string fileName)
    {
        try
        {
            FileStream file = new FileStream(fileName, FileMode.Open);
            MD5 md5 = new MD5CryptoServiceProvider();

            byte[] buffer = md5.ComputeHash(file);
            file.Close();
            file.Dispose();

            StringBuilder strBuilder = new StringBuilder();
            for (int i = 0; i < buffer.Length; i++)
            {
                strBuilder.Append(buffer[i].ToString("x2"));
            }
            return strBuilder.ToString();
        }
        catch (Exception ex)
        {
            throw new Exception("GetMD5 fail,error:" + ex.Message);
        }
    }

SHA1(Secure Hash Algorithm)
    SHA1对任意长度明文的预处理和MD5的过程是一样的,即预处理完后的明文长度是512位的整数倍,但是有一点不同,那就是SHA1的原始报文长度不能超过2的64次方,然后SHA1生成160位的报文摘要。SHA1算法简单而且紧凑,容易在计算机上实现。

    public static string GetSHA1FromFile(string fileName)
    {
        try
        {
            FileStream file = new FileStream(fileName, FileMode.Open);
            SHA1 sha1 = new SHA1CryptoServiceProvider();

            byte[] buffer = sha1.ComputeHash(file);

            file.Close();
            file.Dispose();

            StringBuilder strBuilder = new StringBuilder();
            for (int i = 0; i < buffer.Length; i++)
            {
                strBuilder.Append(buffer[i].ToString("x2"));
            }
            return strBuilder.ToString();
        }
        catch (Exception ex)
        {
            throw new Exception("GetSHA1 fail,error:" + ex.Message);
        }
    }

参考:
https://blog.csdn.net/android_mnbvcxz/article/details/78902737
https://www.cnblogs.com/scu-cjx/p/6878853.html

相关文章

  • 游戏开发—文件校验

        游戏开发中,有很多文件校验需求。如:安装包、更新包、代码、配置文件、资源包等,都可能需要在安装或者下载更新...

  • 如何获取apk的签名信息?

    在网站需要管理apk的功能时,经常需要校验上传者提供的apk文件,校验开发者签名,包名和版本等。如何获取apk文件...

  • struts-5:校验(validate)

    1、校验的方式 a、自动校验:通过xml文件进行校验:xml文件的命名是"要校验的action+-validati...

  • 文件上传之绕过

    文件上传校验方式 客户端JavaScript校验服务端校验①请求头中content-type字段校验②文件内容头校...

  • django-用户认证系统(注册,登录,校验,celery发送邮

    项目开发中视图处理一般流程:1.接收参数2.参数校验(后端校验)3.处理业务逻辑4.返回应答 为了将项目里面的文件...

  • spring的后台数据校验

    数据校验对于开发项目来说是必须的。校验一般分为前台校验和后台校验,前台校验是必须要做的,后台校验是可选的。后台校验...

  • Mac 小技巧

    MD5校验 终端输入md5加空格加需要校验的文件路径(也可以直接将需要校验的文件拖入终端窗口,相当于输入文件的目录...

  • 01 漏洞利用:文件包含漏洞

    包含文件漏洞的出现,是由于开发者生成文件路径时没有进行充分的校验,并且还使用这些路径包含源码文件。高级点儿的服务端...

  • RPM校验和文件提取

    RPM包校验 rpm -V 已安装的报名 -V(verify)校验指定RPM包中的文件 RPM包文件提取

  • 两个文件校验实用小工具介绍

    下载大文件的时候,我们常常需要校验文件,以免发生文件下载错误的事情的情况。网络上有很多文件校验工具,它们都大同小异...

网友评论

      本文标题:游戏开发—文件校验

      本文链接:https://www.haomeiwen.com/subject/tifzhqtx.html