• 微端热更新


    热更新一般需要包含以下东西:

    1.URL1:游戏版本配置文件地址

    2.URL2:所有资源的MD5配置文件地址

    问题

    如果将热更新分为强更和弱更(静默更新),以上的更新策略将会不支持静默更新。

    新策略

    在下载资源到缓冲区后添加一步是否同步文件。如果直接同步文件则为强更,如果不直接同步文件则为静默更新。在下一次进入游戏的时候判断是否有文件未同步–先同步再检查热更新。

     ++++++++++++++============================================================+++++++++++++++++++

    MD5值 

          Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)。

    MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。

    MD5的md5典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在Unix下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:

    MD5 (tanajiya.tar.gz) = 38b8c2c1093dd0fec383a9d9ac940515

    这就是tanajiya.tar.gz文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。为了让读者朋友对MD5的应用有个直观的认识,笔者以一个比方和一个实例来简要描述一下其工作过程:

    大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为司法机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的md5"数字指纹",如果任何人对文件做了任何改动,其MD5值也就是对应的"数字指纹"都会发生变化。

     // MD5加密
        public static string Encrypt(string txt)
        {
            // Create a new instance of the MD5CryptoServiceProvider object.
            MD5 md5Hasher = MD5.Create();
    
            // Convert the input string to a byte array and compute the hash.
            byte[] data = md5Hasher.ComputeHash(Encoding.UTF8.GetBytes(txt));
    
            // Create a new Stringbuilder to collect the bytes
            // and create a string.
            StringBuilder sBuilder = new StringBuilder();
    
            // Loop through each byte of the hashed data 
            // and format each one as a hexadecimal string.
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }
    
            // Return the hexadecimal string.
            return sBuilder.ToString();
        }
    
        /**
         * 解密
         * 
         * @param txt
         * @return
         */
        public static string Decrypt (byte[] bs, string key) {
            byte[] keys = Encoding.UTF8.GetBytes (key); // 密钥转换成字节数组
            int iRandom = bs [bs.Length - 1] & 0xff;
            byte KRandom = bs [iRandom];
            byte[] rb = new byte[bs.Length - 2];
            // 异或
            for (int i = 0; i < rb.Length; i++) {
                if (i < iRandom) {
                    bs [i] = (byte)(bs [i] ^ KRandom);
                    rb [i] = (byte)(bs [i] ^ keys [i % keys.Length]);
                } else {
                    bs [i + 1] = (byte)(bs [i + 1] ^ KRandom);
                    rb [i] = (byte)(bs [i + 1] ^ keys [i % keys.Length]);
                }
            }
            // byte数组还原成字符串
            return Encoding.UTF8.GetString (rb);
        }
  • 相关阅读:
    程序员最好也要懂的一些沟通说服技巧
    MapFields和并行计算(OpenFOAM)
    Python 调用自己编写的Class
    Ubuntu 图形桌面死机重启(机器不重启)
    Ubuntu 安装 Visual Studio Code
    Ubuntu图形界面和终端界面切换快捷键
    Linux直接在通过终端打开图片文件
    Linux新建环境变量快速切换到文件夹(export)
    Python文件读写(一)
    Dictonary(Python)(一)
  • 原文地址:https://www.cnblogs.com/cyct/p/10868144.html
Copyright © 2020-2023  润新知