Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
2 / 1 / 1
Регистрация: 16.09.2021
Сообщений: 109

Создать форму с методом шифрования Трисемуса

20.06.2023, 13:01. Показов 1253. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем, надо сделать форму в которой будет запрос у пользователя:
1. Количество колонок в таблице
2. Ключевое слово
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
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            char[] alphabet = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ ,.".ToCharArray();
 
            // Пытаемся вычислить размерность таблицы
            Console.WriteLine("Символов в алфавите: " + alphabet.Length);
            int rows = 0, columns;
            bool isValidTable;
            do
            {
                Console.Write("Количество колонок в таблице: ");
                isValidTable = int.TryParse(Console.ReadLine(), out columns) && columns > 1;
                if (!isValidTable)
                {
                    Console.WriteLine("Необходимо ввести число больше 1");
                }
                else
                {
                    rows = alphabet.Length / columns;
                    isValidTable &= rows > 1 && rows * columns == alphabet.Length;
                    if (!isValidTable)
                    {
                        Console.WriteLine("Необходимо ввести число колонок таким образом, чтобы число строк таблицы было больше 1 и таблица могла вмещать в себе все символы алфавита");
                    }
                }
            }
            while (!isValidTable);
 
            // Пытаемся получить ключевое слово
            char[] keyWord;
            bool isValidKeyWord;
            do
            {
                Console.Write("Введите ключевое слово: ");
                keyWord = Console.ReadLine().ToUpper().Distinct().ToArray();
                isValidKeyWord = keyWord.Length > 0 && keyWord.Length <= alphabet.Length;
                if (!isValidKeyWord)
                {
                    Console.WriteLine("Ключевое слово не может быть пустой строкой или содержать число уникальных символов больше размера алфавита");
                }
                else
                {
                    isValidKeyWord &= !keyWord.Except(alphabet).Any();
                    if (!isValidKeyWord)
                    {
                        Console.WriteLine("Ключевое слово не может содержать символы, которых нет в алфавите");
                    }
                }
            }
            while (!isValidKeyWord);
 
            // Создаем таблицу
            var table = new char[rows, columns];
 
            // Вписываем в нее ключевое слово
            for (var i = 0; i < keyWord.Length; i++)
            {
                table[i / columns, i % columns] = keyWord[i];
            }
 
            // Исключаем уникальные символы ключевого слова из алфавита
            alphabet = alphabet.Except(keyWord).ToArray();
 
            // Вписываем алфавит
            for (var i = 0; i < alphabet.Length; i++)
            {
                int position = i + keyWord.Length;
                table[position / columns, position % columns] = alphabet[i];
            }
 
            // Получаем сообщение, которое необходимо зашифровать
            string message;
            bool isValidMessage;
            do
            {
                Console.Write("Введите сообщение: ");
                message = Console.ReadLine().ToUpper();
                isValidMessage = !string.IsNullOrEmpty(message);
                if (!isValidMessage)
                {
                    Console.WriteLine("Сообщение не может быть пустой строкой");
                }
            }
            while (!isValidMessage);
 
            // Создаем место для будущего зашифрованного сообщения
            var result = new char[message.Length];
 
            // Шифруем сообщение
            for (var k = 0; k < message.Length; k++)
            {
                char symbol = message[k];
                // Пытаемся найти символ в таблице
                for (var i = 0; i < rows; i++)
                {
                    for (var j = 0; j < columns; j++)
                    {
                        if (symbol == table[i, j])
                        {
                            symbol = table[(i + 1) % rows, j]; // Смещаемся циклически на следующую строку таблицы и запоминаем новый символ
                            i = rows; // Завершаем цикл по строкам
                            break; // Завершаем цикл по колонкам
                        }
                    }
                }
                // Записываем найденный символ
                result[k] = symbol;
            }
 
            // Выводим зашифрованное сообщение
            Console.WriteLine("Зашифрованное сообщение: " + new string(result));
        }
    }
}
не нужен какой-то красивый дизайн, можно просто в дефолтных настройках все это вывести, главное что бы работало
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.06.2023, 13:01
Ответы с готовыми решениями:

Реализовать программу шифрования/дешифрования по алгоритму Трисемуса
Пожалуйста помогите написать программу срочно!!! Заранее спасибо!!!

Создать приложение для шифрования/дешифрования файла ASCII методом
Необходимо создать приложение для шифрования/дешифрования файла ASCII методом в Delphi. Так же должен присутствовать исходный код...

Создать приложение для шифрования/дешифрования текста ASCII методом
Необходимо создать приложение для шифрования/дешифрования текста ASCII методом. Так же должен присутствовать исходный код программы. ...

23
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,564
20.06.2023, 13:22
Цитата Сообщение от Cufee Посмотреть сообщение
надо сделать форму
И в чём сложность возникла?
0
2 / 1 / 1
Регистрация: 16.09.2021
Сообщений: 109
20.06.2023, 13:24  [ТС]
John Prick, сложность в том, что у меня есть этот алгоритм, но он работает и выводит все перечисленное только в консоль, надо сделать пользовательский интерфейс, что бы он мог работать с алгоритмом через форму
0
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,564
20.06.2023, 13:30
Цитата Сообщение от Cufee Посмотреть сообщение
надо сделать пользовательский интерфейс, что бы он мог работать с алгоритмом через форму
Ну проект с формой вы можете создать?
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3415 / 2736 / 575
Регистрация: 04.09.2018
Сообщений: 8,588
Записей в блоге: 3
20.06.2023, 13:31
Цитата Сообщение от Cufee Посмотреть сообщение
что бы он мог работать с алгоритмом через форму
Это мы поняли, вопрос трактуется так: "в чем сложность создания формы и переноса этого алгоритма туда?".
0
2 / 1 / 1
Регистрация: 16.09.2021
Сообщений: 109
20.06.2023, 13:31  [ТС]
John Prick, да, могу, но перенести алгоритм шифрования на саму форму я не смогу, так как не знаком с win form
https://ibb.co/zFSMH63
0
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,564
20.06.2023, 13:38
Цитата Сообщение от Cufee Посмотреть сообщение
так как не знаком с win form
Ну так начинайте знакомиться. Закиньте для начала на форму поля для ввода исходных данных.
0
2 / 1 / 1
Регистрация: 16.09.2021
Сообщений: 109
20.06.2023, 13:41  [ТС]
John Prick,
Цитата Сообщение от John Prick Посмотреть сообщение
Ну так начинайте знакомиться.
я для того что бы не делать это и создал тут тему с просьбой о помощи.
0
 Аватар для Andrey-MSK
3346 / 2233 / 387
Регистрация: 14.08.2018
Сообщений: 7,537
Записей в блоге: 4
20.06.2023, 13:49
Цитата Сообщение от Cufee Посмотреть сообщение
я для того что бы не делать это
Другими словами - сделайте за меня?
0
2 / 1 / 1
Регистрация: 16.09.2021
Сообщений: 109
20.06.2023, 13:51  [ТС]
Andrey-MSK, ну, не совсем, я бы занялся этим если бы не сдача этого задания на днях, плюсом две других курсовых по другим языкам
0
Эксперт .NET
 Аватар для Usaga
14299 / 9384 / 1353
Регистрация: 21.01.2016
Сообщений: 35,380
20.06.2023, 13:53
Цитата Сообщение от Cufee Посмотреть сообщение
я бы занялся этим если бы не сдача этого задания на днях
А до этого ты чем занимался? WinForms весьма прост в обращении, мог по видосам на ютюбе надрессироваться за пару дней до вменяемого состояния.
0
3257 / 3275 / 556
Регистрация: 17.02.2019
Сообщений: 5,184
20.06.2023, 14:01
Цитата Сообщение от Cufee Посмотреть сообщение
я бы занялся этим
дерзайте Создание приложения Windows Forms на C# в Visual Studio
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3415 / 2736 / 575
Регистрация: 04.09.2018
Сообщений: 8,588
Записей в блоге: 3
20.06.2023, 16:38
Цитата Сообщение от Cufee Посмотреть сообщение
В общем, надо сделать форму в которой будет запрос у пользователя:
1. Количество колонок в таблице
2. Ключевое слово
3. Сообщение которое требуется зашифровать
и вывод зашифрованного сообщения
Вот тебе заготовка:

Во вложении проект. Дерзай.
Вложения
Тип файла: 7z Trisemus Tables Demo.7z (4.3 Кб, 5 просмотров)
1
 Аватар для Andrey-MSK
3346 / 2233 / 387
Регистрация: 14.08.2018
Сообщений: 7,537
Записей в блоге: 4
20.06.2023, 17:25
wizard41, Вот такую настройку поставьте, и все обработчики будут с заглавной буквы
2
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3415 / 2736 / 575
Регистрация: 04.09.2018
Сообщений: 8,588
Записей в блоге: 3
20.06.2023, 17:28
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
и все обработчики будут с заглавной буквы
Да меня не смущает и такое поведение (с маленькой буквы). JAVA-привычка... Но в VS поставлю, ладно.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3415 / 2736 / 575
Регистрация: 04.09.2018
Сообщений: 8,588
Записей в блоге: 3
22.06.2023, 23:01
Cufee, есть успехи?
Немного продолжил...
class CharTable
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
    internal class CharTable
    {
        private char[,]? @char;
 
        public int R => @char.GetLength( 0 );
        public int C => @char.GetLength( 1 );
 
        public char[,]? Chars 
        {
            get => @char;
            set => @char = value;
        }
 
        public CharTable( int r, int c )
        {
            @char = new char[ r, c ];
        }
 
        public CharTable(char[,] mtx ) =>
            this.@char = mtx;
 
        public void Reset() => @char = null;
 
        public void ProcessFunctionOverData( Action<int, int> func )
        {
            for ( var i = 0; i < R; i++ )
                for ( var j = 0; j < C; j++ )
                    func( i, j );
        }
    }

class Form1
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
    public partial class Form1 : Form
    {
        readonly char[] alphabet = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ ,.".ToCharArray();
        CharTable table;
 
        public Form1()
        {
            InitializeComponent();
            btTableSizeAccept.Select();
            tbKeyword.CharacterCasing = CharacterCasing.Upper;
        }
 
        private void btTableSizeAccept_Click(object sender, EventArgs e)
        {
            if ((int) nudRcount.Value * (int) nudCcount.Value < 36)
            {
                MessageBox.Show("В таблицу не влезут все символы!", "Ошибка размера таблицы", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
 
            // Формируем таблицу символов...
            table = new((int) nudRcount.Value, (int) nudCcount.Value);
            for (int i = 0, k = 0; i < table.R; i++)
                for (int j = 0; j < table.C; j++)
                    table.Chars[i, j] = alphabet[k++];
            GridUpdate();
        }
 
        private void btKeywordAccept_Click(object sender, EventArgs e)
        {
            if (tbKeyword.Text.Length < 3)
            {
                MessageBox.Show("Ключевое слово слишком короткое!", "Ошибка ключевого слова", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
 
            if (table == null) return;
 
            // Удаляем из слова повторы букв...
            tbKeyword.Text = new string(tbKeyword.Text.Distinct().ToArray());
            // Разбиваем строку на символы...
            char[] key = tbKeyword.Text.ToCharArray();
 
            // Формируем новый массив символов, включающий в себя символы ключевого слова...
            // Записываем ключевое слово в таблицу...
            char[] newtable = new char[alphabet.Length];
            for (int i = 0; i < key.Length; i++)
                newtable[i] = key[i];
 
            // Удаляем из алфавита буквы ключевого слова...
            char[] newalphabet = alphabet.Except(key).ToArray();
 
            // Сдвигаем оставшийся алфавит...
            for (int i = key.Length, j = 0; i < newtable.Length; i++)
                newtable[i] = newalphabet[j++];
 
            // Обновляем матрицу символов...
            for (int i = 0, k = 0; i < table.R; i++)
                for (int j = 0; j < table.C; j++)
                    table.Chars[i, j] = newtable[k++];
            GridUpdate();
        }
 
        private void btEncrypt_Click(object sender, EventArgs e)
        {
 
        }
 
        void GridUpdate()
        {
            dataGridView1.DataSource = new ArrayDataView(array: table.Chars);
            dataGridView1.ClearSelection();
        }
    }

Осталось сделать само шифрование.
Миниатюры
Создать форму с методом шифрования Трисемуса  
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3415 / 2736 / 575
Регистрация: 04.09.2018
Сообщений: 8,588
Записей в блоге: 3
30.06.2023, 18:19
Доделал задачу.
Недостающий обработчик кнопки btEncrypt_Click:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    private void btEncrypt_Click(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(tbTextForEncrypt.Text))
        {
            MessageBox.Show("Нет текста для шифрования!", "Ошибка исходного текста", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }
 
        char[] origin = tbTextForEncrypt.Text.ToCharArray();
        string result = "";
 
        foreach (char c in origin)
            result += GetNextEncryptCharInMatrix(table, c);
        tbEcryptResult.Text = result;
    }
Метод, "достающий" из массива очередной "шифрованный" символ:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    char GetNextEncryptCharInMatrix(CharTable ct, char ch)
    {
        for (int i = 0; i < ct.R; i++)
        {
            for (int j = 0; j < ct.C; j++)
            {
                if (char.ToUpper(ch) == ct.Chars[i, j])
                {
                    if (i < ct.R - 1) return ct.Chars[++i, j];
                    else return ct.Chars[0, j];
                }
            }
        }
        return '\0';
    }
Результат:
Кликните здесь для просмотра всего текста

Сравнивал вот с этим:
Кликните здесь для просмотра всего текста
0
30.06.2023, 21:12

Не по теме:

Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Вот такую настройку поставьте, и все обработчики будут с заглавной буквы
один фиг по хорошему переименовывать.

0
 Аватар для Andrey-MSK
3346 / 2233 / 387
Регистрация: 14.08.2018
Сообщений: 7,537
Записей в блоге: 4
30.06.2023, 21:37
Цитата Сообщение от Wolfdp Посмотреть сообщение
один фиг по хорошему переименовывать.

Не по теме:

Ну эта настройка ставит первую букву заглавной. Типа так принято в NET для описания методов. А так да, не всегда красиво выглядит, в зависимости от названия контрола.

0
30.06.2023, 22:15

Не по теме:

Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Ну эта настройка ставит первую букву заглавной.
Лучше наверное не менять первую букву на заглавную, а найти где отключить фыркание студии на это. Отключить по умолчанию, чтобы в новых проектах уже была выключена. А не pragma...-ировать в каждом проекте по новой.
Имена самих контролов тоже с маленькой буквы студия генерирует.

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

Создать программу для шифрования текста методом перестановки в Excel
Помогите пожалуйста, нужно создать в excel vba программу для шифрования текста методом перестановки. Должно появиться окно, где можно будет...

Шифрование методом Трисемуса
Добрый день, господа программисты. Нужно написать код для шифрования методом Трисемуса, чтобы вставить его в wpf. Чтение сообщения...

Дешифрование методом Трисемуса
Помогите написать дешифрование методом Трисемуса, внизу код есть с шифрованием: char alphabet = &quot;АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ...

Шифрование методом Трисемуса
Доброго времени суток. Не могу написать часть кода для шифрования методом Трисемуса на WPF. Есть Text Box (TB_Massage), откуда...

Шифрование методом Трисемуса
Здравствуйте. Напишу здесь алгоритм шифрования, чтобы было понятней: Выбирается размерность таблицы. В таблицу вписывается ключевое...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru