Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 1
Регистрация: 23.09.2015
Сообщений: 106

Программа шифрования/дешифрования символов кирилицы шифром Виженера (перевод с C#)

24.10.2016, 10:03. Показов 1432. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
//Программа шифрования/дешифрования символов кирилицы шифром Виженера
//Подключение библиотек
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace Shifrovanie_Vizhener
{
    class Program
    {
        static void Main()
        {
            //Цикл для повтора задачи
            do
            {
                //Путь к файлу
                string enpath = @"C:\Encrypt.txt";
                string depath = @"C:\Decrypt.txt";
                string repath = @"C:\Result.txt";
                uint k = 0; //Переменная выбора шифрования/дешифрования
                string s = ""; //Строка, к которой применяется шифрованияе/дешифрование
                string result = ""; //Строка - результат шифрования/дешифрования
                string key = ""; //Строка - ключ шифра
                string key_on_s = ""; //Ключ длиной строки
                int x = 0,y = 0; //Координаты нового символа из таблицы Виженера
                int registr = 0; //Регистр символа
                char dublicat; //Дубликат прописной буквы
 
                //Формирование таблицы Виженера на алфавите кирилицы
                int shift=0;
                char[,] tabula_recta = new char[32, 32]; //Таблица Виженера
                string alfabet = "абвгдежзийклмнопрстуфхцчшщьыъэюя";
                //Формирование таблицы
                for (int i = 0; i < 32; i++)
                    for (int j = 0; j < 32; j++)
                    {
                        shift = j + i;
                        if (shift >= 32) shift = shift % 32;
                        tabula_recta[i, j] = alfabet[shift];
                    }
                //Вывод сообщения на экран
                Console.WriteLine("Введите 1 для шифрования или 2 для дешифрования");
                //Считывание переменной выбора, пока она не станет равной 1 или 2
                while ((k != 1) && (k != 2))
                {
                    //Считывание переменной k, если введенные данные имеют тип uint
                    uint.TryParse(Console.ReadLine(), out k);
                    //Вывод сообщения об ошибке, если k != 1 или k != 2
                    if ((k != 1) && (k != 2))
                        Console.WriteLine("Ошибка ввода, повторите попытку");
                }
                //Запрос ключа 
                Console.WriteLine("Введите ключ шифра");
                //Считывание ключа
                //Объявление флага, для считывания ключа
                bool flag = false;
                //Пока не будет введен ключ из разрешенных символов (прописные и строчные буквы кирилицы)
                while (flag != true)
                {
                    flag = true;
                    //Считывание строки
                    key = Console.ReadLine();
                    //Цикл по каждому элементу ключа
                    for (int i = 0; i < key.Length; i++)
                    {
                        //Если элемент ключа не принадлежит алфавиту кирилицы, изменить флаг
                        if ((Convert.ToInt16(key[i]) < 1072) || (Convert.ToInt16(key[i]) > 1103))
                                flag = false;
                    }
                    //Если ключ имеет запрещенные символы, то сообщение об ошибке
                    if (flag == false)
                        Console.WriteLine("Ключ имеет запрещенные символы, повторите ввод");
                }
                //Если выбрано шифрование
                if (k == 1)
                {
                    //Вывод сообщения на экран
                    Console.WriteLine("Строка считывается из файла!");
                    //Считывание строки
                    s = File.ReadAllText(enpath, Encoding.Default);
                    //Выполение шифрования
                    //Формирование строки, длиной шифруемой, состоящей из повторений ключа
                    for (int i = 0; i < s.Length; i++)
                    {
                            key_on_s += key[i % key.Length];
                    }
                    //Шифрование при помощи таблицы
                    for (int i = 0; i < s.Length; i++)
                    {
                        //Если не кириллица
                        if (((int)(s[i]) < 1040) || ((int)(s[i]) > 1103))
                            result += s[i];
                        else
                        {
                            //Поиск в первом столбце строки, начинающейся с символа ключа
                            int l = 0;
                            flag = false;
                            //Пока не найден символ
                            while ((l < 32) && (flag == false))
                            {
                                //Если символ найден
                                if (key_on_s[i] == tabula_recta[l, 0])
                                {
                                    //Запоминаем в х номер строки
                                    x = l;
                                    flag = true;
                                }
                                l++;
                            }
                            //Уменьшаем временно регистр прописной буквы
                            if ((Convert.ToInt16(s[i]) < 1072) && (Convert.ToInt16(s[i]) >= 1040))
                            {
                                dublicat = Convert.ToChar(Convert.ToInt16(s[i]) + 32);
                                registr = 1;
                            }
                            else
                            {
                                registr = 0;
                                dublicat = s[i];
                            }
                            l = 0;
                            flag = false;
                            //Пока не найден столбец в первой строке с символом строки
                            while ((l < 32) && (flag == false))
                            {
                                //Проверка совпадения
                                if (dublicat == tabula_recta[0, l])
                                {
                                    //Запоминаем номер столбца
                                    y = l;
                                    flag = true;
                                }
                                l++;
                            }
                            //Увеличиваем регистр буквы до прописной
                            if (registr == 1)
                            {
                                //Изменяем символ на первоначальный регистр
                                dublicat = Convert.ToChar(Convert.ToInt16(tabula_recta[x, y]) - 32);
                                result += dublicat;
                            }
                            else
                                result += tabula_recta[x, y];
                        }
                    }
                    //Вывод на экран зашифрованной строки
                    Console.WriteLine("Строка успешно зашифрована!");
                    File.WriteAllText(repath, result); //Вывод результата в файл
                }
                //Если было выбрано дешифрование
                if (k == 2)
                {
                    //Вывод сообщения на экран
                    Console.WriteLine("Строка считывается из файла!");
                    //Считывание строки
                    s = File.ReadAllText(depath, Encoding.Default);
                    //Выполение дешифрования
                    //Формирование строки, длиной шифруемой, состоящей из повторений ключа
                    for (int i = 0; i < s.Length; i++)
                    {
                        key_on_s += key[i % key.Length];
                    }
                    //Дешифрование при помощи таблицы
                    for (int i = 0; i < s.Length; i++)
                    {
                        //Если не кириллица
                        if (((int)(s[i]) < 1040) || ((int)(s[i]) > 1103))
                            result += s[i];
                        else
                        {
                            //Поиск в первом столбце строки, начинающейся с символа ключа
                            int l = 0;
                            flag = false;
                            //Пока не найден символ
                            while ((l < 32) && (flag == false))
                            {
                                //Если символ найден
                                if (key_on_s[i] == tabula_recta[l, 0])
                                {
                                    //Запоминаем в х номер строки
                                    x = l;
                                    flag = true;
                                }
                                l++;
                            }
                            //Уменьшаем временно регистр прописной буквы
                            if ((Convert.ToInt16(s[i]) < 1072) && (Convert.ToInt16(s[i]) >= 1040))
                            {
                                dublicat = Convert.ToChar(Convert.ToInt16(s[i]) + 32);
                                registr = 1;
                            }
                            else
                            {
                                registr = 0;
                                dublicat = s[i];
                            }
                            l = 0;
                            flag = false;
                            //Пока не найден столбец в первой строке с символом строки
                            while ((l < 32) && (flag == false))
                            {
                                //Проверка совпадения
                                if (dublicat == tabula_recta[x, l])
                                {
                                    //Запоминаем номер столбца
                                    y = l;
                                    flag = true;
                                }
                                l++;
                            }
                            //Увеличиваем регистр буквы до прописной
                            if (registr == 1)
                            {
                                //Изменяем символ на первоначальный регистр
                                dublicat = Convert.ToChar(Convert.ToInt16(tabula_recta[0, y]) - 32);
                                result += dublicat;
                            }
                            else
                                result += tabula_recta[0, y];
                        }
                    }
                    //Вывод на экран дешифрованной строки
                    Console.WriteLine("Строка успешно дешифрована!");
                    File.WriteAllText(repath, result);
                }
                Console.WriteLine("Для выхода из программы нажмите Escape");
            } while (Console.ReadKey(true).Key != ConsoleKey.Escape);
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.10.2016, 10:03
Ответы с готовыми решениями:

Шифрование/дешифрование символов кирилицы шифром Виженера
Помогите исправить ошибки шифрование/дешифрование символов кирилицы шифром Виженера program Shifr_Vizhenera; uses crt; ...

Создать приложение шифрования и дешифрования текста шифром Цезаря
Сделать приложение шифрования и дешифрования текста. Пользователь вводит фразу, выводится в зашифрованном виде. Метод цезаря

Написание программы шифрования и дешифрования данных шифром Цезаря
Написать код Цезаря для шифрования и дешифрования данных.(В коде Цезаря задан цифровой ключ и этот ключ задает смещение для алфавита)....

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.10.2016, 10:03
Помогаю со студенческими работами здесь

Программа для шифрования и дешифрования путем замены символов
Доброго времени суток, хочу попросить помочь написать код для программы. Суть программы в том, чтобы я допустим писал в строчку слово или...

Организовать процессы шифрования текста шифром Виженера и дешифровки
Я знаю что эта тема обсуждалась, но мне нужно сделать немного подругому &quot;Шифрование сводится к последовательной замене очередного символа...

Организовать процессы шифрования текста шифром Виженера и дешифровки
Организовать процессы шифрования текста шифром Виженера и дешифровки. Шифрование сводится к последовательной замене ...

Написать скрипт для шифрования/дешифрования строк алгоритмом Виженера
Привет нужно написать скрипт для шифрования/дешифрования строк алгоритмом Виженера (русские буквы) нашел один ,но как бы на русские...

Программа шифрования и дешифрования
Программа должна обеспечивать: • шифрование информации, находящейся в текстовом файле, с записью результата в другой текстовый файл,, а...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru