您的位置:首页 > 移动开发 > Unity3D

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

2015-07-23 11:55 721 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: