Реализация шифра Полибия на C#: Полное руководство с примерами кода

Реализация шифра Полибия на C#: Полное руководство с примерами кода

Шифрование информации является одной из ключевых задач в современном программировании. Среди классических методов шифрования особое место занимает квадрат Полибия – древнегреческий способ кодирования символов, который до сих пор находит своё применение. В этой статье мы рассмотрим, как можно реализовать квадрат Полибия в языке программирования C#, предоставим подробные примеры кода и обсудим потенциальные сферы применения этого алгоритма.

Что такое квадрат Полибия?

Квадрат Полибия – это метод шифрования, который использует таблицу с символами для преобразования текста в набор чисел. В классической форме квадрат состоит из 5×5 клеток, каждая из которых содержит одну букву алфавита. Для адаптации под алфавиты с более чем 25 буквами, некоторые символы могут быть объединены или добавлены дополнительные строки и столбцы.

Инициализация квадрата Полибия в C#

Для начала нам необходимо создать структуру квадрата Полибия в C#. Мы можем представить квадрат в виде двумерного массива символов:

char[,] polybiusSquare = new char[5, 5] {
    {'A', 'B', 'C', 'D', 'E'},
    {'F', 'G', 'H', 'I', 'K'},
    {'L', 'M', 'N', 'O', 'P'},
    {'Q', 'R', 'S', 'T', 'U'},
    {'V', 'W', 'X', 'Y', 'Z'}
};

Обратите внимание, что буква ‘J’ отсутствует. В классическом квадрате Полибия ‘I’ и ‘J’ часто объединяются в одну ячейку, поскольку алфавит содержит 26 букв, а в квадрате только 25 ячеек.

Шифрование текста с использованием квадрата Полибия

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

public string Encrypt(string input, char[,] square)
{
    input = input.ToUpper().Replace("J", "I");
    StringBuilder encryptedText = new StringBuilder();

    foreach (char c in input)
    {
        if (char.IsLetter(c))
        {
            for (int i = 0; i < square.GetLength(0); i++)
            {
                for (int j = 0; j < square.GetLength(1); j++)
                {
                    if (square[i, j] == c)
                    {
                        encryptedText.Append($"{i + 1}{j + 1} ");
                        break;
                    }
                }
            }
        }
    }
    return encryptedText.ToString().Trim();
}

В этом коде мы преобразуем весь текст в верхний регистр, чтобы соответствовать квадрату Полибия, и заменяем все ‘J’ на ‘I’. Затем для каждой буквы ищем её координаты и добавляем в зашифрованный текст.

Читайте так же  Реализация Шифра Цезаря в C#: Полное Руководство с Примерами

Расшифровка текста с использованием квадрата Полибия

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

public string Decrypt(string input, char[,] square)
{
    string[] splitInput = input.Split(' ');
    StringBuilder decryptedText = new StringBuilder();

    foreach (string pair in splitInput)
    {
        int row = int.Parse(pair[0].ToString()) - 1;
        int col = int.Parse(pair[1].ToString()) - 1;
        decryptedText.Append(square[row, col]);
    }

    return decryptedText.ToString();
}

В этом коде мы разделяем зашифрованный текст на пары координат, преобразуем их в числа и используем для получения соответствующих символов из квадрата.

Применение квадрата Полибия в современном программировании

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

Заключение

Квадрат Полибия представляет собой интересный исторический метод шифрования, который можно эффективно реализовать на языке C#. В этой статье мы рассмотрели подробно, как выполнить шифрование и расшифровку текста, используя эту технику. Несмотря на свою простоту, квадрат Полибия является отличным примером для понимания основ криптографии и может быть применён в различных областях программирования для решения специфических задач.