Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 16

Доработка шифра Цезаря

10.06.2016, 09:52. Показов 2587. Ответов 13

Студворк — интернет-сервис помощи студентам
помогите разобраться и дописать прогу немного непойму.
1. Как дописать в form1 чтоб было шифрование и дешифрирование текста из стоки texBox1 в texBox2.(Ошибка в коде де шифрования)
2.Как можно дописать чтоб не только английские буквы были и цифры но еще и русские.
Вот код шифрования:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
{
                    n = str1.Length;
                    //textBox1.Text = ""; 
                    textBox2.Text = "";
                    for (int i = 0; i < n; i++)
                    {
                        k = (int)str1[i];
                        k = k + index;
                        if (k > 122) k = k - 26;
                        textBox2.Text = textBox2.Text + ((char)(k)).ToString();
 
                   }
}
Код де шифрования:
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
private void button2_Click(object sender, EventArgs e)
        {
            int k, n, index;
            string str1;
            str1 = textBox1.Text;
            if (textBox3.Text != "")
            {
                index = Convert.ToInt32(textBox3.Text);
                if (index < 26 & index > 0)
                {
 
                    n = str1.Length;
                    //textBox2.Text = ""; 
                    textBox2.Text = "";
                    for (int i = 0; i < n; i++)
                    {
                        k = (int)str1[i];
                        k = k - index;
                        if (k < 97) k = k + 26;
                        textBox2.Text = textBox2.Text + ((char)(k)).ToString();
                     }
               }
         }
    }
Помогите пожалуйста.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.06.2016, 09:52
Ответы с готовыми решениями:

Исправление шифра Цезаря
Привет всем, я написала программу которая шифрует и дешифрует слово по ключу, но у меня не получается сделать шифрование...

Криптоанализ шифра Цезаря
Вообщем суть заключается в том,что у нас есть зашифрованный текст Цезарем с любым шагом.Нужно сделать частотный анализ текста (найти самые...

Дешифрация шифра цезаря
Пытаюсь реализовать дешифрацию шифра Цезаря private static void DeCrypto() { StreamReader sr1 = new...

13
215 / 211 / 146
Регистрация: 20.11.2014
Сообщений: 1,184
10.06.2016, 12:03
Лучший ответ Сообщение было отмечено FREDINGO как решение

Решение

Цитата Сообщение от FREDINGO Посмотреть сообщение
Как дописать в form1 чтоб было шифрование и дешифрирование текста из стоки texBox1 в texBox2.
У вас это и так сделано
Цитата Сообщение от FREDINGO Посмотреть сообщение
str1 = textBox1.Text;
Цитата Сообщение от FREDINGO Посмотреть сообщение
textBox2.Text = textBox2.Text + ((char)(k)).ToString();
И не дешифровать, а расшифровать
0
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 16
10.06.2016, 12:52  [ТС]
но у меня расшифровывает но немного не так какие цифры или буквы были заданы? И по русски как дописать шифрование и расшифровку а то только английские?

Добавлено через 5 минут
например шифрую 111 сдвиг на 1 выдает 222 а обратно 222 выдает ||| палочки а не 111?
0
964 / 485 / 241
Регистрация: 02.06.2016
Сообщений: 760
10.06.2016, 13:45
Лучший ответ Сообщение было отмечено FREDINGO как решение

Решение

FREDINGO, Нужно задать набор символов (алфавит). Либо несколько (чтобы потом расшифровывать было проще):
Кликните здесь для просмотра всего текста
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
const string en = "abcdefghijklmnopqrstuvwxyz";
const string ru = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
 
List<string> Charsets = new List<string>()
    { en, ru, en.ToUpper(), ru.ToUpper() };
 
 
private int Mod(int a, int b)
{
    return (Math.Abs(a * b) + a) % b;
}
 
private char ShiftChar(char Char, int Size )
{
    foreach (string charset in Charsets)
    {
        int index = charset.IndexOf(Char);
        if (index != -1)
            return charset[Mod(index + Size, charset.Length)];
    }
 
    return Char;
}
 
private string ShiftString(string Text, int Size = 1)
{
    var sb = new StringBuilder();
    foreach (char c in Text)
        sb.Append(ShiftChar(c, Size));
 
    return sb.ToString();
}
 
private void button1_Click(object sender, EventArgs e)
{
    // Шифровка
    int key = int.Parse(textBox3.Text);
    textBox2.Text = ShiftString(textBox1.Text, key);
}
 
private void button2_Click(object sender, EventArgs e)
{
    // Дешифровка
    int key = int.Parse(textBox3.Text);
    textBox1.Text = ShiftString(textBox2.Text, -key);
}

Либо один большой:
Кликните здесь для просмотра всего текста
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
string Charset =
    "abcdefghijklmnopqrstuvwxyz" +
    "abcdefghijklmnopqrstuvwxyz".ToUpper() +
    "абвгдеёжзийклмнопрстуфхцчшщъыьэюя" +
    "абвгдеёжзийклмнопрстуфхцчшщъыьэюя".ToUpper() +
    "0123456789" +
    " ,.;:"'()+_=|\\#№$^&*[]{}!";
 
private int Mod(int a, int b)
{
    return (Math.Abs(a * b) + a) % b;
}
 
private string ShiftString(string Text, int Size = 1)
{
    var sb = new StringBuilder();
    foreach (char c in Text)
    {
        int index = Charset.IndexOf(c);
        sb.Append(index == -1 ? c :
            Charset[Mod(index + Size, Charset.Length)]);
    }
    return sb.ToString();
}
 
private void button1_Click(object sender, EventArgs e)
{
    // Шифровка
    int key = int.Parse(textBox3.Text);
    textBox2.Text = ShiftString(textBox1.Text, key);
}
 
private void button2_Click(object sender, EventArgs e)
{
    // Дешифровка
    int key = int.Parse(textBox3.Text);
    textBox1.Text = ShiftString(textBox2.Text, -key);
}
1
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 16
10.06.2016, 16:47  [ТС]
return (Math.Abs(a * b) + a) % b;
}

private string ShiftString(string Text, int Size = 1)
{
var sb = new StringBuilder();
foreach (char c in Text)
{
int index = Charset.IndexOf(c);
sb.Append(index == -1 ? c :
Charset[Mod(index + Size, Charset.Length)]);
}
return sb.ToString();


Поясните немного плиз что к чему чтоб я понел
0
964 / 485 / 241
Регистрация: 02.06.2016
Сообщений: 760
10.06.2016, 17:04
Лучший ответ Сообщение было отмечено FREDINGO как решение

Решение

FREDINGO,
Кликните здесь для просмотра всего текста
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
// Функция возвращает A по модулю B
// например:
// Mod(3,5) = 3
// Mod(5,5) = 0
// Mod(6,5) = 1
// Mod (-1, 5) = 4   <- Обычная конструкция a%b не работает с отрицательными числами
// 
// Нужна чтобы циклично сдвигать массив при шифровании
private int Mod(int a, int b)
{
    return (Math.Abs(a * b) + a) % b;
}
 
private string ShiftString(string Text, int Size = 1)
{
    var sb = new StringBuilder(); // StringBuilder это почти обычный string, только быстрее
    foreach (char c in Text) // перебираем все символы в строке Text
    {
        int index = Charset.IndexOf(c); // Находим порядковый номер этого символа в алфавите (нашем)
        sb.Append(index == -1 ? // Если -1 значит символа нет в алфавите
            c : // тогда мы его просто в строку копируем не изменяя
            Charset[Mod(index + Size, Charset.Length)]); // а если нашли, то добавим к номеру смещение Size
                                                        // Возьмем по модулю "Длина_алфавита" ('Я'+1 -> 'A')
                                                        // и поместим в новую строку символ алфавита по этому новому номеру (индексу)
    }
    return sb.ToString(); // ну и вернем обычную строку из "быстрой строки" (StringBuilder)
}
1
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 16
10.06.2016, 19:31  [ТС]
еще вопрос можно маленький?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void button3_Click(object sender, EventArgs e)
        {
 
            if ((textBox1.Text == "") && (textBox2.Text == "") && (textBox3.Text == "") && (textBox4.Text == ""))
                    MessageBox.Show("Точно очистить все данные?", "Предупреждение", MessageBoxButtons.OKCancel, MessageBoxIcon.Stop) == DialogResult.OK;
            
            {
                textBox1.Text = "";
                textBox1.Clear();
                textBox2.Text = "";
                textBox2.Clear();
                textBox3.Text = "";
                textBox3.Clear();
                textBox4.Text = "";
                textBox4.Clear();
ошибка
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка CS0201 В качестве оператора могут использоваться только выражения присваивания, вызова, инкремента, декремента и создания нового объекта cezar F:\cezar\Form1.cs 93 Активно
как запрос сделать верным?

Добавлено через 6 минут
и очищать если даже не все textBox заполнены?
0
964 / 485 / 241
Регистрация: 02.06.2016
Сообщений: 760
10.06.2016, 19:34
FREDINGO, что-то со скобками:
C#
1
2
3
4
5
6
7
8
if ((textBox1.Text != "" || textBox2.Text != "" || textBox3.Text != "" || textBox4.Text != "")
    && MessageBox.Show("Точно очистить все данные?", "Предупреждение", MessageBoxButtons.OKCancel, MessageBoxIcon.Stop) == DialogResult.OK)
{
    textBox1.Text = "";
    textBox2.Text = "";
    textBox3.Text = "";
    textBox4.Text = "";
}
Цитата Сообщение от FREDINGO Посмотреть сообщение
и очищать если даже не все textBox заполнены?
Судя по всему нужна кнопка "Отменить" вместо запросов "Уверены ли вы?"
1
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 16
10.06.2016, 19:42  [ТС]
Большое человеческое вам спасибо.Я просто тока учусь программировать поэтому и обратился.
0
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 16
12.06.2016, 13:03  [ТС]
еще 1 вопрос назрел а можно ли при таком коде посчитать textBox3 в обратном на правлении т.е -1 ..... -100 например или больше я просто еще прописал такой код на стирание буквенных символов:

C#
1
2
3
4
5
6
7
private void textBox3_TextChanged(object sender, EventArgs e)
        {
            {
                Regex rx = new Regex(@"\D", RegexOptions.IgnoreCase);
 
 
                textBox3.Text = rx.Replace(textBox3.Text, ""); }
или мб какой то другой мб стоит?

Добавлено через 4 часа 6 минут
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
string Charset =
    "abcdefghijklmnopqrstuvwxyz" +
    "abcdefghijklmnopqrstuvwxyz".ToUpper() +
    "абвгдеёжзийклмнопрстуфхцчшщъыьэюя" +
    "абвгдеёжзийклмнопрстуфхцчшщъыьэюя".ToUpper() +
    "0123456789" +
    " ,.;:'()+_=|\\#№$^&*[]{}!";
 
private int Mod(int a, int b)
{
    return (Math.Abs(a * b) + a) % b;
}
 
private string ShiftString(string Text, int Size = 1)
{
    var sb = new StringBuilder();
    foreach (char c in Text)
    {
        int index = Charset.IndexOf(c);
        sb.Append(index == -1 ? c :
            Charset[Mod(index + Size, Charset.Length)]);
    }
    return sb.ToString();
}
 
private void button1_Click(object sender, EventArgs e)
{
    // Шифровка
    int key = int.Parse(textBox3.Text);
    textBox2.Text = ShiftString(textBox1.Text, key);
}
 
private void button2_Click(object sender, EventArgs e)
{
    // Дешифровка
    int key = int.Parse(textBox3.Text);
    textBox1.Text = ShiftString(textBox2.Text, -key);
вот по этому варианту
0
964 / 485 / 241
Регистрация: 02.06.2016
Сообщений: 760
12.06.2016, 13:30
Цитата Сообщение от FREDINGO Посмотреть сообщение
можно ли при таком коде посчитать textBox3 в обратном на правлении т.е -1 ..... -100 например или больше я просто еще прописал такой код на стирание буквенных символов:
Ничего не понял. Строку можно так перевернуть:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private static string Reverse(string Text)
{
    var chars = Text.ToCharArray();
    Array.Reverse(chars);
    return new string(chars);
}
 
private void button1_Click(object sender, EventArgs e)
{
    // Шифровка
    int key = int.Parse(Reverse(textBox3.Text));
    textBox2.Text = ShiftString(textBox1.Text, key);
}
0
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 16
12.06.2016, 13:36  [ТС]
ну в любом направлении чтоб шифровал и расшифровал например шифруем а получаем б, а другую сторону шифруем а и получаем я так можно?

Добавлено через 3 минуты
вот так примерно т.е в textBox3 вводим 1 это(а шифруем б), а textBox3 вводим -1 (а шифруем в я). Так можно?

Но при этом уменя код textBox3 не дает вводить (-)символ.
0
964 / 485 / 241
Регистрация: 02.06.2016
Сообщений: 760
12.06.2016, 14:35
FREDINGO, ну, может как-то так?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private int PrepareKey(string Key)
{
    var m = Regex.Match(Key, @"(?<sign>-?)(?<nums>([^\d-]?\d)+)");
    return !m.Success ? 0 : int.Parse(
        m.Groups["sign"].Value +
        Regex.Replace(m.Groups["nums"].Value, @"\D", ""));
}
 
private void button1_Click(object sender, EventArgs e)
{
    // Шифровка
    int key = PrepareKey(textBox3.Text);
    textBox3.Text = key.ToString();
    textBox2.Text = ShiftString(textBox1.Text, key);
}
Добавлено через 7 минут
вот эту еще можно попробовать. Все зависит от того как знак минус воспринимать
C#
1
var m = Regex.Match(Key, @"(?<sign>-?)(?<nums>(\D*\d)+)\D*$");
1
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 16
12.06.2016, 14:50  [ТС]
норм все переводит я тока вместо 0 прописал 3 но жаль сообщение не выдает тип не верно ввели букву а не цифру (немного не подберу код)
MessageBox.Show("неверные данные буква а не цифра замените цифру 3 своим"); такой пробнул недопустимый
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.06.2016, 14:50
Помогаю со студенческими работами здесь

Частотный анализ шифра Цезаря
У меня есть программа шифрования методом Цезаря. Нужно доделать, добавив частотный анализ введенного текста, т.е. сколько раз встречаются в...

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

Зашифровать-расшифровать текст с помощью шифра Цезаря
Задание такое - текст из файла Прізвище1.txt зашифровать в Прізвище2.txt, а потом дешифровать из Прізвище2.txt в Прізвище3.txt. Люди,...

Криптоанализ шифра Цезаря
Доброго времени суток всем! Дали мне задание: зашифровать, расшифровать текст в таком то алфавите шифром Цезаря и произвести...

Реализация шифра Цезаря
Напишите функцию encryptCaesar(msg, shift), которая кодирует сообщение шифром Цезаря. Шифр Цезаря заменяет каждую букву в тексте на букву,...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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