Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/55: Рейтинг темы: голосов - 55, средняя оценка - 4.55
7 / 7 / 4
Регистрация: 01.10.2015
Сообщений: 327
1

Шифрование методом Трисемуса

16.11.2016, 23:01. Показов 11371. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Напишу здесь алгоритм шифрования, чтобы было понятней: Выбирается размерность таблицы. В таблицу вписывается ключевое слово, удаляя повторяющиеся буквы(оставляя первые). Затем таблица дополняется буквами алфавита по порядку исключая буквы из ключевого слова. Для шифрования фразы буква открытого текста заменяется буквой, находящейся ниже нее в том же столбце.
Так вот. Таблицу с алфавитом я сделал, повторяющиеся буквы из ключа удалил. Не знаю как в таблицу сначала вписать ключ, а затем алфавит. Нужен хелп).

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string s ; 
            string result; 
            string key ;
            int n, m;
           
 
            Console.WriteLine("Введите размерность таблицы");
            n = Convert.ToInt32(Console.ReadLine());
            m = Convert.ToInt32(Console.ReadLine());
 
            char[,] mas = new char[n, m];
            
            //Заполняем таблицу алфавитом
            for (char i = 'А'; i <= 'Я'; i++)
                mas[(i - 'А') / m, (i - 'А') % m] = i;
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                    Console.Write(mas[i, j] + " ");
                Console.WriteLine();
            }
 
 
            Console.WriteLine("Введите сообщение");
            s = Console.ReadLine();
 
            Console.WriteLine("Введите ключ");
            key = Console.ReadLine();
 
 
          key = new string(key.Distinct().ToArray()); //Удаляем повторения в ключе.
            Console.WriteLine("Ключ без повторяющихся смиволов: "+key);
 
            Console.ReadKey();
 
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.11.2016, 23:01
Ответы с готовыми решениями:

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

Шифрование методом замены
Задание 1 Решить задачу, используя один из классов строк: String или StringBuilder. Дизайн формы...

Шифрование методом Плейфера
Кто знает алгоритм Плейфера???

Шифрование методом перестановки
Нужно очень сильно программа для шифрование и дешифрирование данных которая шифрует текст от 2000 -...

2
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
17.11.2016, 00:20 2
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
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));
1
7 / 7 / 4
Регистрация: 01.10.2015
Сообщений: 327
17.11.2016, 10:29  [ТС] 3
Спасибо большое)
0
17.11.2016, 10:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2016, 10:29
Помогаю со студенческими работами здесь

Шифрование методом Атбаш
Здравствуйте, уважаемые программисты всея форума! Доброго вам времени суток! У меня возник вопрос....

Шифрование методом Виженера
Пожалуйста может у кого то есть исходник шифрования методом Виженера В КОНСОЛИ срочно надо до...

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru