Unity筆記 XML讀寫 防篡改MD5簽名

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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章