Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/12: Рейтинг темы: голосов - 12, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 14.01.2012
Сообщений: 11
1

Система шифрования Вижинера: есть понимание сути, нет понимания кода

18.02.2012, 00:03. Просмотров 2436. Ответов 6
Метки нет (Все метки)

В системе шифрования Вижинера я вроде как разобралась, но как показала практика, правильно получается только на листе бумаги.Вот что у меня получилось - Сообщение: Хочу лето. Ключ: СТОЛСТОЛ. Шифр: ЖАЕЮ ЬЧАЩ. А мне необходимо написать программу на языке C# в консольном приложении. Помогите пожалуйста решить проблему. За ранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2012, 00:03
Ответы с готовыми решениями:

Система шифрования Вижинера
Система шифрования Вижинера Здравствуйте, помогите плиз написать код дешифратора на основе кода...

Система шифрования Вижинера
Система шифрования Вижинера. За ключ возьмите свое имя. Имя - Виталий.

Литература для лучшего понимания сути программирования
Привет! Подскажите литературу, которая поможет разобраться в сути самого процесса программирования,...

Составить программу, реализующую механизм шифрования текста шифром Вижинера
Доброго времени суток! Передо мной стоит несколько задач: 1) Составить программу, реализующую...

6
117 / 51 / 9
Регистрация: 23.12.2011
Сообщений: 120
18.02.2012, 10:53 2
Квадрат Виженера есть? По нему хорошо видно, что каждая буква ключа дает сдвиг по алфавиту в зависимости от своего индекса (A - 0, B - 1, C - 2 и т.д., не зависит от самого алфавита).
Алгоритм прост (под индексом подразумевается индекс в алфавите):
1. Взять индекс исходной буквы
2. Прибавить или отнять сдвиг в зависимости от индекса соответствующей буквы ключа
3. Проверить на выход за рамки (меньше нуля или больше общего количества букв)
4. Взять из алфавита букву с полученным индексом
5. Профит
В качестве алфавита для простоты и наглядности можно взять строку со всеми буквами и искать по IndexOf (индексация с нуля).
0
0 / 0 / 0
Регистрация: 14.01.2012
Сообщений: 11
24.02.2012, 21:44  [ТС] 3
Задали написать программу на языке С#,которая шифрует и дешифрует текст с помощью таблицы Вижинера. Помогите пожалуйста с написанием кода
 Комментарий модератора 
Не надо плодить дубли тем!
0
104 / 105 / 18
Регистрация: 18.08.2012
Сообщений: 308
24.02.2012, 21:48 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
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace Вижинер_шифрование
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            richTextBox2.Text = "";
 
            string[] alphabet = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
 
            string input = "", key = "", key_temp = "", input_tolower = "", key_temp_tolower = "";
 
            int mod = 0, number_of_letter;
 
            input_tolower = richTextBox1.Text;
 
            input = input_tolower.ToLower();
 
            key_temp_tolower = textBox1.Text;
 
            key_temp = key_temp_tolower.ToLower();
 
            if (richTextBox1.Text != "" && textBox1.Text != "")
            {
                mod = input.Length % key_temp.Length;
 
                for (int i = 0; i < (input.Length - mod) / key_temp.Length; i++)
                {
                    key += key_temp;
                }
 
                for (int i = 0; i < mod; i++)
                {
                    key += key_temp[i];
                }
 
                string[] input_mas = new string[input.Length];
                int[] input_index = new int[input.Length];
 
                string[] key_mas = new string[input.Length];
                int[] key_index = new int[input.Length];
 
                string[] encrypted_word = new string[input.Length];
 
 
                for (int i = 0; i < input.Length; i++)
                {
                    input_mas[i] = Convert.ToString(input[i]);
                }
 
                for (int i = 0; i < key.Length; i++)
                {
                    key_mas[i] = Convert.ToString(key[i]);
                }
 
 
 
                for (int i = 0; i < input.Length; i++)
                {
                    for (int j = 0; j < alphabet.Length; j++)
                    {
                        if (input_mas[i] == alphabet[j])
                        {
                            input_index[i] = j;
                        }
 
                        if (key_mas[i] == alphabet[j])
                        {
                            key_index[i] = j;
                        }
                    }
                }
 
 
                for (int i = 0; i < input_mas.Length; i++)
                {
                    number_of_letter = (input_index[i] + key_index[i]) % 26;
                    encrypted_word[i] = alphabet[number_of_letter];
                    number_of_letter = 0;
                }
 
                for (int i = 0; i < input_index.Length; i++)
                {
                    richTextBox2.Text += encrypted_word[i];
                }
            }
 
            else
            {
                MessageBox.Show("Вы не ввели значение в одно из обязательных полей");
            }
 
            
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            richTextBox2.Text = "";
 
            string[] alphabet = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
 
            string input = "", key = "", key_temp = "", input_tolower = "", key_temp_tolower = "";
 
            int mod = 0, number_of_letter;
 
            input_tolower = richTextBox1.Text;
 
            input = input_tolower.ToLower();
 
            key_temp_tolower = textBox1.Text;
 
            key_temp = key_temp_tolower.ToLower();
 
            if (richTextBox1.Text != "" && textBox1.Text != "")
            {
                mod = input.Length % key_temp.Length;
 
                for (int i = 0; i < (input.Length - mod) / key_temp.Length; i++)
                {
                    key += key_temp;
                }
 
                for (int i = 0; i < mod; i++)
                {
                    key += key_temp[i];
                }
 
                string[] input_mas = new string[input.Length];
                int[] input_index = new int[input.Length];
 
                string[] key_mas = new string[input.Length];
                int[] key_index = new int[input.Length];
 
                string[] encrypted_word = new string[input.Length];
 
 
                for (int i = 0; i < input.Length; i++)
                {
                    input_mas[i] = Convert.ToString(input[i]);
                }
 
                for (int i = 0; i < key.Length; i++)
                {
                    key_mas[i] = Convert.ToString(key[i]);
                }
 
 
 
                for (int i = 0; i < input.Length; i++)
                {
                    for (int j = 0; j < alphabet.Length; j++)
                    {
                        if (input_mas[i] == alphabet[j])
                        {
                            input_index[i] = j;
                        }
 
                        if (key_mas[i] == alphabet[j])
                        {
                            key_index[i] = j;
                        }
                    }
                }
 
 
                for (int i = 0; i < input_mas.Length; i++)
                {
                    number_of_letter = (input_index[i] - key_index[i]+26) % 26;
                    encrypted_word[i] = alphabet[number_of_letter];
                    number_of_letter = 0;
                }
 
                for (int i = 0; i < input_index.Length; i++)
                {
                    richTextBox2.Text += encrypted_word[i];
                }
            }
 
            else
            {
                MessageBox.Show("Вы не ввели значение в одно из обязательных полей");
            }
        }
 
        private void richTextBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar != 8 && (e.KeyChar < 97 || e.KeyChar > 122) && (e.KeyChar < 65 || e.KeyChar > 90))
                e.Handled = true;  
        }
 
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar != 8 && (e.KeyChar < 97 || e.KeyChar > 122) && (e.KeyChar < 65 || e.KeyChar > 90))
                e.Handled = true;  
        }
    }
}
0
0 / 0 / 0
Регистрация: 14.01.2012
Сообщений: 11
24.02.2012, 21:52  [ТС] 5
Щас посмотрим, спасибо
0
104 / 105 / 18
Регистрация: 18.08.2012
Сообщений: 308
24.02.2012, 21:54 6
Цитата Сообщение от _Win32_ Посмотреть сообщение
С таким выражением сложно поспорить, только вот как мне это поможет
В смысле?
0
0 / 0 / 0
Регистрация: 14.01.2012
Сообщений: 11
24.02.2012, 21:55  [ТС] 7
я смотрю это на форме, а если тоже самое, но в консольном приложении?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.02.2012, 21:55

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Нет понимания языка
Вот после с++ начал писать на obj-c и немного не понимаю языка, тоесть все хорошо, программы...

Реферальная система есть или нет
В описалове прочел про Реферальную кнопку - но кода ее нигде не нашел - есть ли система рефералов в...

Рефакторинг кода(упрощение для понимания)
Есть работающая лабораторная работа, я ее сделал, не показывал преподавателю и не буду, не хочу...

Система winserv2003 пинги есть, интернета и исходящей локалки нет
Всем, привет! Система windows server 2003, восстановлена после системного сбоя (после отключения...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.