Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/64: Рейтинг темы: голосов - 64, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 21.02.2020
Сообщений: 32
.NET 4.x

Как сделать Дешифратор, шифратор текста по базе шифров

21.02.2020, 22:45. Показов 13942. Ответов 45

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Помогите сделать программу. Microsoft Visual studio 2019. Дешифратор, шифратор текста. Есть 2 TextBox (в первый TextBox1, если вводятся цифры идет разделение пробелом каждые 3 символа (231 233 111), если буквы то обычно, и кнопки : Стереть (очистка TextBox), дешифровать, зашифровать. Есть таблица со значениями шифров. К примеру дают шифр 334 222 333. В программе есть возможность в меню выбрать нужную таблицу значений (есть к примеру несколько разных таблиц шифрования, в дальнейшем новые, находятся в папке base : 334 - привет, 222 - пока, 333 - ок) Вводим шифр 334 222 333 в первый TextBox1 и нажимаем дешифровать, Программа берет первые 3 цифры 334 как одно целое (разделение пробелом каждые 3 символа) ищет совпадение в базе, если находит то в ответ подставляет соответствующее слово этой группе цифр - привет в второй TextBox2, переходит к второй группе цифр - 222...и так далее перебирает все введенные значения. Как лучше реализовать саму базу шифров? Чтоб она была доступна для редактирования типо Exel и тд... Дальше шифрование, очищаем поля. и в первый TextBox1 в который вводили цифры для дешифрирования, вводим текст (ответ на шифр)..привет ок. и нажимает кнопку зашифровать. Программа ищет совпадение уже не по цифрам из базы а по словам и соответствующие цифры выдает разделяя по 3 цифры вместе в TextBox2 типо обратная процедура. Помогите решить данную задачу, может у кого то подобный исходник есть? Буду рад если поможете написать с краткими объяснениями. С Ув.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.02.2020, 22:45
Ответы с готовыми решениями:

Шифратор и дешифратор текста в richtextbox
Помогите зашифровать файл, который открыт в richTextBox1, не могу разобраться как

Нужно создать Шифратор\Дешифратор
сам очень мало что понимаю в програмировании!

Ищу готовый шифратор и дешифратор текстового файла
Скиньте плиз кто - нибудь прогу, которая шифрует и дешифрует текстовый файл! Очень нужно

45
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
22.02.2020, 18:30
Создаешь исходный двухмерный массив: <код><слово> из файла,например, созданного в блокноте.
Из него создаешь два HashTable: 1-я - <ключ(это - код)><Значение (это - слово)>
2-я - <ключ(это - слово)><Значение (это - код)>
Далее все просто: Дешифрование - работа с первой HashTable: по коду получаешь слово
Шифрование - работа с второй HashTable: по слову получаешь код
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16130 / 11254 / 2888
Регистрация: 21.04.2018
Сообщений: 33,086
Записей в блоге: 2
24.02.2020, 17:25
Лучший ответ Сообщение было отмечено Adwalker как решение

Решение

Adwalker, тип для шифрования-дешифрования
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
    /// <summary>Шифратор-дешифратор</summary>
    public class CoderDecoder
    {
        /// <summary>Словарь шифрования</summary>
        public ImmutableDictionary<string, string> CodeDictionary { get; }
        /// <summary>Дешифрования</summary>
        public ImmutableDictionary<string, string> DecodeDictionary { get; }
 
        /// <summary>Конструктор шифратора-дешифратора</summary>
        /// <param name="lines">Последовательность строк. В каждой строке код и значение через '|'</param>
        public CoderDecoder(IEnumerable<string> lines)
        {
            Dictionary<string, string> codes = new Dictionary<string, string>();
            Dictionary<string, string> decodes = new Dictionary<string, string>();
 
            foreach (string line in lines)
            {
                string[] values = line.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                codes.Add(values[0], values[1]);
                decodes.Add(values[1], values[0]);
            }
 
            CodeDictionary = codes.ToImmutableDictionary();
            DecodeDictionary = decodes.ToImmutableDictionary();
        }
 
        /// <summary>Дешифрование</summary>
        /// <param name="source">Строка кодов - коды заданы через пробел.</param>
        /// <returns>Дещифрованная строка</returns>
        /// <remarks>Eсли кода в словаре нет - он пропускается</remarks>
        public string Decoding(string source)
        {
            List<string> decodes = new List<string>();
 
            foreach (string code in source.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries))
                if (CodeDictionary.TryGetValue(code, out string decode))
                    decodes.Add(decode);
 
            return string.Concat(decodes);
        }
 
 
        /// <summary>Шифрование</summary>
        /// <param name="source">Строка с исходным текстом</param>
        /// <returns>Строка с кодами через пробел</returns>
        /// <remarks>Ишется самое длинное значение из возможных</remarks>
        public string Coding(string source)
        {
            List<string> codes = new List<string>();
 
            while (!string.IsNullOrEmpty(source))
            {
                /// Находим минимальную длину с начала строки
                /// которая отсутсвует в словаре
                int index = 0;
                string value = "";
                do { value += source[index++]; }
                while (DecodeDictionary.Keys.Any(key => key.StartsWith(value)) && index < source.Length);
                string valueMax = value;
 
                /// Уменьшая отсутвующее значение находим первый имеющийся ключ
                /// Это будет ключ значения наибольшей длины
                string code;
                while (!DecodeDictionary.TryGetValue(value, out code))
                    value = value.Remove(value.Length - 1);
 
                if (string.IsNullOrEmpty(value))
                    throw new ArgumentException(nameof(source), $"Невозможно зашифровать символы {valueMax}");
 
                codes.Add(code);
                source = source.Substring(value.Length);
            }
            return string.Join(" ", codes);
        }
 
    }
Пример использования
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        static void Main(string[] args)
        {
 
            CoderDecoder coderDecoder = new CoderDecoder
            (new string[] {
                "000| ",
                "001|к",
                "002|а",
                "003|т",
                "004|ы",
                "005|?",
                "006|как",
                "007|как дела?",
                "008|эльф",
                "009|!",
            });
 
            string code = coderDecoder.Coding("как ты? как дела? ты эльф!");
            Console.WriteLine(code);
            string decode = coderDecoder.Decoding(code);
            Console.WriteLine(decode);
Цитата Сообщение от Adwalker Посмотреть сообщение
Как лучше реализовать саму базу шифров?
Любым удобным вам способом.
Главное - возможность подать список строк в конструктор CoderDecoder.
Можно сделать обычный текстовый файл, и сразу его передавать в конструктор методом File.ReadAllLines()
1
0 / 0 / 0
Регистрация: 21.02.2020
Сообщений: 32
25.02.2020, 03:56  [ТС]
Элд Хасп, Спасибо что нашли возможность мне помочь! Буду разбираться...)

Добавлено через 5 часов 14 минут
Элд Хасп, Вообщем очень потихоньку начинаю понимать... Но вот работает оно в консольном режиме отлично. Мне нужно в winforms чтоб работало, 2 textbox, куда вводить информацию и куда выводится и 2 кнопки кодировать и декодировать пытался и так и сяк не получается...Попрошу еще немного Вашего внимания объяснить как и куда это в winforms все влепить... Код public class CoderDecoder поместил в CoderDecoder.cs
А вот куда это вписать? Если пишу в Program.cs То не как в форму не могу нечего получить
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 CoderDecoder coderDecoder = new CoderDecoder
            (new string[] {
                "000| ",
                "001|к",
                "002|а",
                "003|т",
                "004|ы",
                "005|?",
                "006|как",
                "007|как дела?",
                "008|эльф",
                "009|!",
            });
И как написать в кнопке чтоб оно выполняло код coding/decoding из значений textbox1 и передавало ответ в textbox2??...
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16130 / 11254 / 2888
Регистрация: 21.04.2018
Сообщений: 33,086
Записей в блоге: 2
25.02.2020, 10:25
Цитата Сообщение от Adwalker Посмотреть сообщение
А вот куда это вписать? Если пишу в Program.cs То не как в форму не могу нечего получить
Надо на вход конструктора подать строки словаря кодов.
Откуда вы их берёте? Где они у вас заданы?

Если у вас есть текстовый файл с кодами, то можно так
C#
1
CoderDecoder coderDecoder = new CoderDecoder(File.ReadAllLines("codes.txt"));
Добавлено через 45 секунд
Каждая строка в файле должна быть в формате "006|как"
1
0 / 0 / 0
Регистрация: 21.02.2020
Сообщений: 32
25.02.2020, 11:45  [ТС]
Элд Хасп,
C#
1
2
3
4
5
6
7
8
9
10
11
12
/// <summary>Конструктор шифратора-дешифратора</summary>
        /// <param name="lines">Последовательность строк. В каждой строке код и значение через '|'</param>
 
        public CoderDecoder(IEnumerable<string> lines)
 
 
        {
            CoderDecoder coderDecoder = new CoderDecoder(File.ReadAllLines("Codes.txt"));
            Dictionary<string, string> codes = new Dictionary<string, string>();
            Dictionary<string, string> decodes = new Dictionary<string, string>();
 
            foreach (string line in lines)
Правильно вписал ? Я чет вообще уже запутался от кусочков не пойму что и куда .....как прописать в button1 чтоб брало значения с textbox1 обрабатывало их и выводило в textbox2 ? Я правильно понимаю данные из txt заносятся в эту локальную переменную coderDecoder? Обобщите пожалуйста мне двоечнику что и куда вписать нужно..по полной программе мне будет проще разобраться поэтапно..спасибо большое что помогаете!
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16130 / 11254 / 2888
Регистрация: 21.04.2018
Сообщений: 33,086
Записей в блоге: 2
25.02.2020, 16:24
Цитата Сообщение от Adwalker Посмотреть сообщение
Правильно вписал ?
Нет!
Класс CoderDecoder не трогайте.

В форме создайте поле private CoderDecoder coderDecoder;

В конструкторе формы инициализируйте это поле coderDecoder = new CoderDecoder(File.ReadAllLines("Codes.txt"));

А в "кликах" кнопок обращайтесь к методам coderDecoder для шифрования/дешифрования текста.
1
0 / 0 / 0
Регистрация: 21.02.2020
Сообщений: 32
26.02.2020, 17:05  [ТС]
Элд Хасп, Доброго времени суток. Вообщем разобрался как в кнопках обращаться к методам coderDecoder, понемногу уже накидал расположение на форме элементов. И вот тут опять приплыл с следующим вопросом...В bottom формы
в statustoolstrip поместил label в который по нажатию кнопки в toolstrip (Открыть базу) передается значение пути и имени базы.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 private CoderDecoder coderDecoder;
 
        bool f_open, f_save; 
        private void toolStripButton3_Click(object sender, EventArgs e)
        {
             
 
            string basetext = ("Base: ");
            var openbase = openFileDialog1;
            if (openbase.ShowDialog() == DialogResult.OK)
            {
                label3.Text = basetext + openbase.FileName;
                f_open = true;
                f_save = false;
                textBox1.Clear();
                textBox2.Clear();
                StreamReader basestrim = File.OpenText(openbase.FileName);
                linebase = basestrim.ReadLine();
                basestrim.Close(); 
            }
        }
Так вот выходит что по нажатию на кнопку открыть базу вызывается openFileDialog1 мы выбираем файл (к примеру code.txt, в котором есть строка в формате "006|как" ) basestrim устанавливает связь с нашим code.txt а linebase считывает строку из этого файла, дальше думал будет цикл считывать все строки..как теперь передать эту строку в coderDecoder тут вот я уже не смог разобраться??
Миниатюры
Как сделать Дешифратор, шифратор текста по базе шифров  
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16130 / 11254 / 2888
Регистрация: 21.04.2018
Сообщений: 33,086
Записей в блоге: 2
26.02.2020, 17:17
Цитата Сообщение от Adwalker Посмотреть сообщение
как теперь передать эту строку в coderDecoder тут вот я уже не смог разобраться??
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 private CoderDecoder coderDecoder;
 
        bool f_open, f_save; 
        private void toolStripButton3_Click(object sender, EventArgs e)
        {
             
 
            string basetext = ("Base: ");
            var openbase = openFileDialog1;
            if (openbase.ShowDialog() == DialogResult.OK)
            {
                label3.Text = basetext + openbase.FileName;
                f_open = true;
                f_save = false;
                textBox1.Clear();
                textBox2.Clear();
              //  StreamReader basestrim = File.OpenText(openbase.FileName);
               // linebase = basestrim.ReadLine();
              //  basestrim.Close(); 
 
               coderDecoder = new CoderDecoder(File.ReadLines(openbase.FileName)); 
            }
        }
Добавлено через 4 минуты
Adwalker, передать ОДНУ пару Код+Значение нельзя.
Я не делал такого способа.
Можно передать только целиком весь массив пар достаточный для формирования словарей.
1
0 / 0 / 0
Регистрация: 21.02.2020
Сообщений: 32
26.02.2020, 17:43  [ТС]
Элд Хасп, Теперь При открытии базы выкидывает в классе CoderDecoder ругается :
C#
1
2
3
4
5
6
foreach (string line in lines)
            {
                string[] values = line.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
           codes.Add(values[0], values[1]); // Исключение не обработано - System.IndexOutOfRangeException: "Индекс находился вне границ массива."
                decodes.Add(values[1], values[0]);
            }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16130 / 11254 / 2888
Регистрация: 21.04.2018
Сообщений: 33,086
Записей в блоге: 2
26.02.2020, 17:51
Цитата Сообщение от Adwalker Посмотреть сообщение
Теперь При открытии базы выкидывает в классе CoderDecoder ругается :
Значит какая-то строка не соответствует формату "006|как".
Поставьте точку останова на строке с исключением и проверяйте какие значения у line и элементов массива values
1
0 / 0 / 0
Регистрация: 21.02.2020
Сообщений: 32
26.02.2020, 18:36  [ТС]
Элд Хасп, Вот что отладчик показывает, я не очень понимаю как им пользоваться...
Миниатюры
Как сделать Дешифратор, шифратор текста по базе шифров   Как сделать Дешифратор, шифратор текста по базе шифров  
0
0 / 0 / 0
Регистрация: 21.02.2020
Сообщений: 32
26.02.2020, 18:37  [ТС]
Элд Хасп, Строк в code.txt 10 а тут я так понял оно видит 11 которая " " пустая
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16130 / 11254 / 2888
Регистрация: 21.04.2018
Сообщений: 33,086
Записей в блоге: 2
26.02.2020, 18:48
Цитата Сообщение от Adwalker Посмотреть сообщение
Строк в code.txt 10 а тут я так понял оно видит 11 которая " " пустая
Да, у вас в после последнего ключа стоит перевод строки.
Тем самым вы в конце файла добавили пустую строку на которой и происходит вылет.

Во избежания подобных ошибок можно добавить пропуск пустых строк.
Измените объявление цикла в конструкторе кодера
C#
11
12
13
14
15
16
        public CoderDecoder(IEnumerable<string> lines)
        {
            Dictionary<string, string> codes = new Dictionary<string, string>();
            Dictionary<string, string> decodes = new Dictionary<string, string>();
 
            foreach (string line in lines.Where(ln => ! string.IsNullOrWhiteSpace(ln)))
Добавлено через 3 минуты
Adwalker,
также советую во избежании случайных багов начинать файл с односимвольных значений: цифры, буквы, сепараторы и остальное по надобности.
1
0 / 0 / 0
Регистрация: 21.02.2020
Сообщений: 32
26.02.2020, 19:04  [ТС]
Элд Хасп, Изменил. Теперь база открывается не вылетает, но и не работает code decode...Например пишу 100 из файла это ф. Нажимаю на кнопку нечего не происходит а если пишу ф и нажимаю кодировать вылетает ошибка - System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."
Миниатюры
Как сделать Дешифратор, шифратор текста по базе шифров  
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16130 / 11254 / 2888
Регистрация: 21.04.2018
Сообщений: 33,086
Записей в блоге: 2
26.02.2020, 19:21
Adwalker, архив решения выложите

Добавлено через 1 минуту
Adwalker, файл с кодами не забудьте вложить
0
0 / 0 / 0
Регистрация: 21.02.2020
Сообщений: 32
26.02.2020, 19:28  [ТС]
Элд Хасп, Пустая строка вроде как все равно осталась. И codedictionary, values = null ...
Миниатюры
Как сделать Дешифратор, шифратор текста по базе шифров  
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16130 / 11254 / 2888
Регистрация: 21.04.2018
Сообщений: 33,086
Записей в блоге: 2
26.02.2020, 20:00
Цитата Сообщение от Adwalker Посмотреть сообщение
Пустая строка вроде как все равно осталась.
Строка должна остаться, а вот цикл её пропускать должен.

Архив решения выложите, я не хочу в угадайку играть.
0
0 / 0 / 0
Регистрация: 21.02.2020
Сообщений: 32
26.02.2020, 20:14  [ТС]
Элд Хасп, Архив
Вложения
Тип файла: rar CoDecWord.rar (2.13 Мб, 40 просмотров)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16130 / 11254 / 2888
Регистрация: 21.04.2018
Сообщений: 33,086
Записей в блоге: 2
26.02.2020, 20:32
Adwalker, на Диске архив не запустился.
Скачался, но решение не собирается.

Этот архив вроде нормально собрался.
Посмотрю - отвечу.

Добавлено через 5 минут
Adwalker, файл с образцами кодов не приложили?

Добавлено через 5 минут
Цитата Сообщение от Элд Хасп Посмотреть сообщение
файл с образцами кодов не приложили?
Нашёл
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.02.2020, 20:32
Помогаю со студенческими работами здесь

Сделать шифратор/дешифратор текста
Требуется сделать шифратор-дешифратор текста. Не просто заменять буквы, а нечто более сложное. Пока-что дошел до такого: ...

Шифратор и дешифратор текста не работает
Здравствуйте уважаемые форумчане, подскажите мне, не изучал С++ совсем, однако попросили написать программу. На этом форуме вроде нашёл...

Написать шифратор/дешифратор текста
Написать программу &quot;Шифратор/Дешифратор текста&quot;. Программа должна каждый символ входной строки заменить на другой и вывести на экран...

Не получается создать шифратор-дешифратор текста
Новичок в c# но уже изучил массивы, но не могу осмыслить как сдвинуть элементы на определённое кол-во символов, на форме создал 4...

Шифратор и Дешифратор
помогите сделать так чтоб не вводить предложение с клавиатуры а чтоб при запуске оно сразу выводилось program shifr; uses crt; var...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru