Unity笔记 XML读写 防篡改MD5签名

这篇博客介绍了如何在Unity中进行XML文件的读取和写入操作,详细阐述了读取XML文件内容并生成MD5签名的过程,以确保数据的安全性。同时,还展示了如何修改XML文件的节点名称,例如将(ROOT)更改为(root),以满足不同的存储需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XML读写
读取一个xml文件(/Scripts/enemy.xml),得到xml内容+anykey的MD5签名。
写一个xml(/Scripts/enemy_bkp.xml),改ROOT为root。

using UnityEngine;
using System.Collections;
using System.Xml;

public class xml_md5 : MonoBehaviour {

    public ArrayList m_enemylist;

    public class SpawnData
    {
        public int wave = 1;
        public string enemyname = "";
        public int level = 1;
        public float wait = 1.0f;
    }

    string GetMD5(string sDataIn)
    {
        System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();

        byte[] bytValue, bytHash;
        bytValue = System.Text.Encoding.UTF8.GetBytes(sDataIn);
        bytHash = md5.ComputeHash(bytValue);
        md5.Clear();

        string sTemp = "";
        for (int i = 0; i < bytHash.Length; i++)
        {
            sTemp += bytHash[i].ToString("X").PadLeft(2, '0');
        }
        return sTemp.ToLower();
    }

    // Use this for initialization
    void Start () {

        m_enemylist = new ArrayList();

        // 读取 xml
        string filepath = Application.dataPath + @"/Scripts/enemy.xml";
        if ( System.IO.File.Exists( filepath ) )
        {
            XmlDocument xmlDoc = new XmlDocument();  
            xmlDoc.Load(filepath);

            // 得到MD5,但是没干鸟用
            string key = "anykey";
            string innerstr = xmlDoc.InnerXml + key;
            string md5hash = GetMD5( innerstr );

            XmlNodeList nodes = xmlDoc.SelectSingleNode("ROOT").ChildNodes;  
            foreach ( XmlElement e in nodes )
            {
                SpawnData sd = new SpawnData();
                sd.wave = int.Parse( e.Attributes["wave"].Value );
                sd.enemyname = e.Attributes["enemyname"].Value;
                sd.level = int.Parse( e.Attributes["level"].Value );
                sd.wait = float.Parse( e.Attributes["wait"].Value );

                m_enemylist.Add(sd);
            }
        }

        // 写入 xml
        string backuppath = Application.dataPath + @"/Scripts/enemy_bkp.xml";
        {
            XmlDocument xmlDoc = new XmlDocument();
            XmlDeclaration decl = xmlDoc.CreateXmlDeclaration("1.0","UTF-8","yes");
            xmlDoc.AppendChild(decl);

            XmlElement root = xmlDoc.CreateElement( "root" );
            xmlDoc.AppendChild(root);

            for ( int i = 0; i < m_enemylist.Count; i ++ )
            {
                SpawnData sd = (SpawnData)m_enemylist[i];
                XmlElement t = xmlDoc.CreateElement( "table" );
                t.SetAttribute( "wave", sd.wave.ToString() );
                t.SetAttribute( "enemyname", sd.enemyname );
                t.SetAttribute( "level", sd.level.ToString() );
                t.SetAttribute( "wait", sd.wait.ToString() );
                root.AppendChild(t);
            }

            xmlDoc.Save(backuppath);
        }
    }
}

xml文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ROOT>
    <table wave="1" enemyname="boar" level="1" wait="3.1"/>
    <table wave="1" enemyname="boar" level="1" wait="3"/>
    <table wave="2" enemyname="boar" level="2" wait="4"/>
    <table wave="2" enemyname="bird" level="2" wait="4"/>
    <table wave="3" enemyname="boar" level="2" wait="3"/>
</ROOT>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好热哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值