//Сеарелизует тест в XML документ private bool SerializeInDocument() { int point5, point4, point3; if (!MarkBox.Mark(_question.Count, _pointMax, out point5, out point4, out point3)) { return(false); } var xmlTest = new XML_TEST(_pointMax, point3, point4, point5, (int)AllTime.Value, _question); xmlTest.Serialize(SubjectCB.Text, TestNameTB.Text); return(true); }
/// <summary> /// Десериализует объект типа XML находящегося в указанной папке с указанным именем /// </summary> /// <param name="NameFolder">Имя папки</param> /// <param name="NameFile">Имя файла</param> public void DeSerialize(string NameFolder, string NameFile) { string file = "TEST\\" + NameFolder + "\\" + NameFile + ".xml"; using (var f = new FileStream(file, FileMode.Open)){ #region Получение соли и вектора инициализации из файла // Выделяем память под ключ и IV byte[] salt = new byte[salt_length]; byte[] iv = new byte[key_length]; // Длина IV равна размеру блока и равна длине ключа f.Read(salt, 0, salt.Length); f.Read(iv, 0, iv.Length); #endregion #region Получение ключа // Получим ключ из пароля byte[] key; // Байты ключа var keygenerator = new Rfc2898DeriveBytes(password, salt); key = keygenerator.GetBytes(key_length); #endregion #region Подготовка алгоритма // Создаём объект, который будет заниматься дешифровкой. Aes aes = Aes.Create(); aes.Key = key; // Задаём ключ aes.IV = iv; // Задаём вектор инициализации #endregion #region Дешифровка // Создаём дешифровшик var decryptor = aes.CreateDecryptor(); // Переменная для дешифрованных данных byte[] data; // Поместим дешифрованный текст в переменную text string text; // Создаём шифрованный поток поверх нашего файла и читаем данные // Заранее размер неизместен, поэтму сперва копируем в MemoryStream // Копирование выполняется побайтово, но лучше блоками using (var ms = new MemoryStream()) using (var cs = new CryptoStream(f, decryptor, CryptoStreamMode.Read)) { int b; while (true) { b = cs.ReadByte(); if (b == -1) { break; // Если достигнут конец потока } ms.WriteByte((byte)b); } // Если мы сохраняли текст в UTF-8, то декодируем // data = ms.ToArray(); // text = Encoding.UTF8.GetString(data); // Если мы использовали сериализацию, то десериализуем ms.Seek(0, SeekOrigin.Begin); // Перематываем поток на начало XML_TEST Test = (XML_TEST)formatter.Deserialize(ms); MaxPoint = Test.MaxPoint; Point5 = Test.Point5; Point4 = Test.Point4; Point3 = Test.Point3; Time = Test.Time; Questions = Test.Questions; Science = Test.Science; Theme = Test.Theme; } #endregion } /* * using (FileStream fs = new FileStream(file, FileMode.OpenOrCreate)){ * XML_TEST Test = (XML_TEST)formatter.Deserialize(fs); * MaxPoint = Test.MaxPoint; * Point5 = Test.Point5; * Point4 = Test.Point4; * Point3 = Test.Point3; * Time = Test.Time; * Questions = Test.Questions; * Science = Test.Science; * Theme = Test.Theme; * }*/ }