Beispiel #1
0
        //Сеарелизует тест в 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);
        }
Beispiel #2
0
        /// <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;
             * }*/
        }