Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 25.01.2013, 20:18   #1
Lestar
Бывалый
 
Аватар для Lestar
 
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений
(для 880 пользователей)
Проверка целостности файла на примере XML.

Иногда при разработке игрового приложения возникает необходимость в проверке целостности файлов. В моем конкретном случае Фиши требовали писать сохраненки в XML и к файлам было полное рукоприкладство со стороны QA. Небольшой класс дает нам возможность проверить ковырялся ли кто в наших файлах или нет. Обошелся без бородатой сериализации. На изменение межстрочного расстояния между дескрипторами логика глаза закрывает(нам оно по сути не важно, это не делает файл непригодным). Реализация удобная для меня. Может где лишнюю бороду и прикрутил, до этого с XML мало сталкивался.
public class Security : MonoBehaviour
{
    public TextAsset XMLSaveData;
    private XmlTextReader readerXML;
    byte[] HashValue;    
    private UnicodeEncoding UE;
    private string newHash;
    private byte[] SentHashValue;

    void Start()
    {
        ResultHashCompare();
    }

    bool ResultHashCompare() // Если хэши не равны, возвращаем false
    {
        if (XMLSaveData == null)
        {
            return false;
        }
        bool result=false;
        newHash = "";

        readerXML = new XmlTextReader(new StringReader(XMLSaveData.text));

        XmlDocument xmlDocument = new XmlDocument();
        xmlDocument.Load(readerXML);

        StringBuilder sb = new StringBuilder();
        sb.Append(xmlDocument.OuterXml);

        UE = new UnicodeEncoding();
        byte[] MessageBytes = UE.GetBytes(sb.ToString());

        SHA1Managed SHhash = new SHA1Managed();
        HashValue = SHhash.ComputeHash(MessageBytes);

        foreach (byte b in HashValue)
        {
            newHash += b + " ";
        }

        string oldHash = PlayerPrefs.GetString("HashSave");      

         result = StringCompare(newHash, oldHash);

        PlayerPrefs.SetString("HashSave", newHash);

        return result;
    }

    bool StringCompare(string newHash, string oldHash)
    {
        int rezult= String.Compare(newHash, oldHash, true);
        bool getBool = (rezult == 0) ? true : false;
        return getBool;
    }
}
__________________
Нам суждено построить мосты и храмы,которых никогда не существовало и не могло существовать в природе.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Andvrok (25.01.2013)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 18:15.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com