46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
1
.NET 4.x

Сохранить класс с типами данных в шифрованный файл

14.10.2017, 09:25. Показов 1199. Ответов 28
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Как сохранить и загружать класс с разными типами данных в файл используя метод шифрования чтобы прочесть данные через блокнот или любой другой редактор было нельзя.
В типах данных будут динамические массивы. А типы данных такие как string int bool и т.п.

Добавлено через 1 час 59 минут
Пожалуйста не игнорируйте.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2017, 09:25
Ответы с готовыми решениями:

Шаблонный класс для работы с разными типами данных и объявление методов в main
есть класс шаблонный, но не могу объявить методы в main и сделать длядругих типов :(когда делала...

Сохранить класс в файл
Сохранение и загрузку делаю так: TFisherMan = class// Класс Рыбак NameMan:string;//Имя ...

Осуществление сохранения пройденного времени, в память программы или в шифрованный файл
Товарищи помогите осуществить "лицензию" программы, что бы при использовании/ не использовании...

Объявить класс с массивом структур. Получить к ним доступ. Сохранить в бинарный файл и загрузиться
Есть желающие сломать голову об мою задачу=)? Кода нет... программа на нуле. Суть задачи такая....

28
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,293
Записей в блоге: 1
14.10.2017, 12:58 2
Alexandr_7, любой симметричный алгоритм шифрования подойдет. Например, Rijndael. Примеры можно найти на форуме.
0
138 / 138 / 53
Регистрация: 14.06.2016
Сообщений: 467
14.10.2017, 14:40 3
например

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System.Text;
using Newtonsoft.Json;
using System.Security.Cryptography;
using System.IO;
 
class MyClass {
    public int[] Ints { get; set; }
    public int Int { get; set; }
    public bool Bool { get; set; }
}
 
var key = new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
var iv = new byte[16];
 
//сохранение
{
    var inst = new MyClass() {
        Bool = false,
        Int = 1337,
        Ints = new[] { 123, 321 }
    };
 
    var json = JsonConvert.SerializeObject(inst);
    using (var aes = new AesCryptoServiceProvider().CreateEncryptor(key, iv)) {
        var bt = Encoding.Unicode.GetBytes(json);
        var enc = aes.TransformFinalBlock(bt, 0, bt.Length);
        File.WriteAllBytes("C:\\myfile", enc);
    }
}
 
//загрузка
{
    var bt = File.ReadAllBytes("C:\\myfile");
    using (var aes = new AesCryptoServiceProvider().CreateDecryptor(key, iv)) {
        var dec = aes.TransformFinalBlock(bt, 0, bt.Length);
        var json = Encoding.Unicode.GetString(dec);
        var inst = JsonConvert.DeserializeObject<MyClass>(json);
    }
}
0
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
15.10.2017, 12:23  [ТС] 4
А если в класса существует тип данных другого класса
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class TOtvet
    {
        string text;
        public string Text
        {
            get { return Text; }
            set { text = value; }
        }
    }
public class TVopros
    {
        string text;
        int idPravOtvet = 0;
        int plusBalls = 100;
        public TOtvet[] Otvets = new TOtvet[0];
 
        public int LengthOtvets
        {
            set { Array.Resize(ref Otvets, value); }
        }
 
        public string Text
        {
            get { return text; }
            set { text = value; }
        }
 
        public int IDPravOtvet
        {
            get { return idPravOtvet; }
            set { idPravOtvet = value; }
        }
 
        public int PlusBalls
        {
            get { return plusBalls; }
            set { plusBalls = value; }
        }
    }
public class TVO
    {
        public byte TypeGame;
        public int MaxBals;
        public TVopros[] Vopross;
    }
0
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,293
Записей в блоге: 1
15.10.2017, 14:02 5
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
А если в класса существует тип данных другого класса
Это не помеха
0
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
15.10.2017, 23:17  [ТС] 6
Цитата Сообщение от jr_ Посмотреть сообщение
C#
1
2
3
4
5
class MyClass {
    public int[] Ints { get; set; }
    public int Int { get; set; }
    public bool Bool { get; set; }
}
Я так полагаю get; set; ставятся только на те типы данных которые необходимо записать?

Добавлено через 13 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Vopros_Otvets
{
    public class TVopros
    {
        string text { get; set; }
        int idPravOtvet { get; set; }
        int plusBalls { get; set; }
        public TOtvet[] Otvets { get; set; }
 
        public int LengthOtvets
        {
            get { return Otvets.Length; }
            set { Array.Resize(ref Otvets, value); }
        }
 
        public string Text
        {
            get { return text; }
            set { text = value; }
        }
 
        public int IDPravOtvet
        {
            get { return idPravOtvet; }
            set { idPravOtvet = value; }
        }
 
        public int PlusBalls
        {
            get { return plusBalls; }
            set { plusBalls = value; }
        }
    }
}
Возникла проблема а именно
set { Array.Resize(ref Otvets, value); }
Да и что то мне показывает что я делаю что то не так
К слову выделенную строчку я использую как действующий аналог делфийскому SetLength ведь мне нужно изменять размера массива но так чтобы данные не удалялись если использовать new то он затерет все данные.
0
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,293
Записей в блоге: 1
16.10.2017, 21:12 7
Alexandr_7, переносить привычки с других ЯП и технологий нужно осмотрительно. Вместо массива и Array.Resize лучше использовать List<TOtvet>
0
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
17.10.2017, 11:53  [ТС] 8
А как изменять размер тогда у List<TOtvet> он должен зависеть от количества вопросов
0
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,293
Записей в блоге: 1
17.10.2017, 12:24 9
Alexandr_7, тип List<T> сам меняет свой размер по мере добавления данных.
C#
1
2
3
4
5
6
var list = new List<int>();
for (int i=0; i<42; i++)
{
    // Метод Add увеличивает размер списка по мере необходимости
    list.Add(i);
}
0
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
17.10.2017, 18:23  [ТС] 10
А удалять тогда как?
0
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,293
Записей в блоге: 1
17.10.2017, 19:33 11
Alexandr_7, Remove - удаление элемента, RemoveAt - удаление по индексу. А также RemoveAll - удаление по условию - и RemoveRange - удаление диапазона.
0
Эксперт .NET
12087 / 8365 / 1279
Регистрация: 21.01.2016
Сообщений: 31,542
18.10.2017, 10:39 12
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
А как изменять размер тогда у List<TOtvet> он должен зависеть от количества вопросов
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
А удалять тогда как?
Вы принципиально не хотите смотреть документацию по используемым классам? Или, на крайний случай, хотя бы посмотреть какие методы и свойства реализует данный класс (F12)?
0
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
29.10.2017, 13:04  [ТС] 13
Так возвращаюсь к вопросу. Вот как у меня это сделано сейчас
C#
1
2
3
4
5
6
7
8
9
10
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            VO.LengthVopross = Decimal.ToInt32(numericUpDown1.Value);
            CheckVopross(listVopross.SelectedIndex >= 0);
            listVopross.Items.Clear();
            if (VO.LengthVopross > 0)
            {
                ReSizeVopross();
            }
        }
Точнее сейчас это значит у меня небыо времени отредактироваь а написал я это еще 17 октября
Как это переделать под list<TOtvet>
Тонее как мне вот это свойство переделать
C#
1
2
3
4
5
public int LengthOtvets
        {
            get { return Otvets.Length; }
            set { Array.Resize(ref Otvets, value); }
        }
Но так чтобы потом данные класса можно было сохранить в шифрованный файл
Пожалуйста помогите с вопросом
0
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,293
Записей в блоге: 1
29.10.2017, 18:32 14
Alexandr_7, свойство можно переделать так
C#
1
2
3
4
5
List<TOtvet> answers;
public int AnswerCount
{
    get { return answers.Count; }
}
(поменял название на AnswerCount потому что LengthOtvets - длина ответов - это неудачное и неграмотное название).

Метод numericUpDown1_ValueChanged в моем понимании вообще не нужен.
0
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
29.10.2017, 19:28  [ТС] 15
Цитата Сообщение от OwenGlendower Посмотреть сообщение
(поменял название на AnswerCount потому что LengthOtvets - длина ответов - это неудачное и неграмотное название).
Спасибо.
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Метод numericUpDown1_ValueChanged в моем понимании вообще не нужен.
А как тогда без него. Я пока делаю редактор чтобы создавать сценарии для игры Вопрос - ОтветФишка игры это неограниченное число вопросов и ответов. Так вот и нужно сделать класс с данными и свойствами так чтобы данные можно было сохранить в шифрованный файл с помощью своего ключа.
Данные это не только данные класса но и данные другого класса в классе и т. д.
Если взять только данные классов без свойств то вот
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Класс ответов
 public class TAnswer
    {
        string text = "";
    }
//Класс вопросов
public class TQuestion
    {
        string text = "";
        bool[] idCorrectAnswer = new bool[0];
        int plusPoints = 100;
        List<TAnswer> Answers;
    }
//Класс квестов которые собственно и нужно сохранять в шифрованный файл
public class TQA
    {
        byte TypeGame = 0;
        int MaxCountPoints = 1000;
        List<TQuestion> Questions;
    }
На счет свойств я даже не знаю нужны ли они ну узнвать размер List точно нужно будет впрочем для этого можно сделать и отдельный метод
Также в этих классах будут методы для проверки на правильность ответов.
А задавать или получать значения строковых или числовых значений свойства необязательны если эти поля сделать публичными.
Скажите как правильно.
0
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
15.11.2017, 12:53  [ТС] 16
Так. Пожалуйста не игнорируйте вопрос. Как такой класс сделать для 2х проектов в 1 решение?
0
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
18.11.2017, 19:36  [ТС] 17
Просишь людей не игнорировать он именно это и делают. Короче 2 класса
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class TQA
    {
        //public byte TypeGame;
        public string NameQA { get; set; }
        public int MaxCountPoints { get; set; }
        public List<TQuestion> Questions { get; set; }
 
    }
public class TQuestion
    {
        public string Caption { get; set; }
        public string Text { get; set; }
        
        public int plusPoints { get; set; }
        public List<string> Answers { get; set; }
        public List<bool> CorrectAnswer { get; set; }
    }
Как их сделать доступными для обоих проектов но так чтобы их можно было сохранить в файл предложенным способом в ранних сообщениях. Не объявлять же мне их в обоих проектах 1 и теже классы
0
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,993
Записей в блоге: 1
19.11.2017, 01:20 18
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
чтобы прочесть данные через блокнот или любой другой редактор было нельзя
Сериализовать в бинарник
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/// <summary>
/// Writes the given object instance to a binary file.
/// <para>Object type (and all child types) must be decorated with the [Serializable] attribute.</para>
/// <para>To prevent a variable from being serialized, decorate it with the [NonSerialized] attribute; cannot be applied to properties.</para>
/// </summary>
/// <typeparam name="T">The type of object being written to the XML file.</typeparam>
/// <param name="filePath">The file path to write the object instance to.</param>
/// <param name="objectToWrite">The object instance to write to the XML file.</param>
/// <param name="append">If false the file will be overwritten if it already exists. If true the contents will be appended to the file.</param>
public static void WriteToBinaryFile<T>(string filePath, T objectToWrite, bool append = false)
{
    using (Stream stream = File.Open(filePath, append ? FileMode.Append : FileMode.Create))
    {
        var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
        binaryFormatter.Serialize(stream, objectToWrite);
    }
}
 
/// <summary>
/// Reads an object instance from a binary file.
/// </summary>
/// <typeparam name="T">The type of object to read from the XML.</typeparam>
/// <param name="filePath">The file path to read the object instance from.</param>
/// <returns>Returns a new instance of the object read from the binary file.</returns>
public static T ReadFromBinaryFile<T>(string filePath)
{
    using (Stream stream = File.Open(filePath, FileMode.Open))
    {
        var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
        return (T)binaryFormatter.Deserialize(stream);
    }
0
Usaga
19.11.2017, 09:36
  #19

Не по теме:

Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Просишь людей не игнорировать он именно это и делают.
Это не техподдержка. Если не отвечают, значит не интересно.

0
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
19.11.2017, 10:47  [ТС] 20
Цитата Сообщение от skilllab Посмотреть сообщение
Сериализовать в бинарник
Да я в курсе уже как сохранять. Я спрашиваю как сделать эти оба класса доступным в обоих проектах объедененные в одно решение. Я не смог найти отвта в гугле. На сколько знаю можно создать библиотеку dll но тогда смогу ли я сохранить классы в библиотеке.
0
19.11.2017, 10:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2017, 10:47
Помогаю со студенческими работами здесь

Сохранить массив данных в файл
Здравствуйте! Подскажите пожалуйста как можно записать массив данных в файл. У меня есть какой-то...

Как в базе данных mysql сохранить файл?!
Подскажите как в базе данных mysql сохранить графический файл например 1.gif чтобы потом его можно...

InterBase 7.5. Как сохранить базу данных в gdb файл?
Ситуация такая. Я создал LocalServer в InterBase. Создал базу данних. В Delphi 7 я пытаюсь...

структуры данных запись и сохранить ответ в файл типа .txt
Нужно выполнить задачу с использованием структуры данных запись и сохранить ответ в файл типа .txt....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru