Реализация Шифра Скитала (Scytale C#ipher) на C#: Пошаговое Руководство

Реализация Шифра Скитала (Scytale Cipher) на C#: Пошаговое Руководство

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

Основы Шифра Скитала

Шифр Скитала (от греческого слова “скиталис” — палочка) основан на использовании специальной палочки или стержня, вокруг которого оборачивалась полоска пергамента с написанным текстом. Когда полоска была обернута вокруг палочки одинакового диаметра, текст можно было прочитать, а когда она была снята — текст превращался в бессмыслицу.

Шаг 1: Понимание Алгоритма Шифрования

Алгоритм шифрования Скитала состоит из написания текста по строкам на полоске бумаги, которая затем оборачивается вокруг стержня. Количество символов в строке определяется диаметром стержня. Важно понимать, что шифрование и дешифрование требуют использования стержня одинакового размера.

Шаг 2: Подготовка Класса Шифра Скитала в C#

Для начала создадим класс ScytaleCipher, который будет содержать методы для шифрования и дешифрования текста.

public class ScytaleCipher
{
    public string Encrypt(string text, int diameter)
    {
        // Шифрование
    }

    public string Decrypt(string cipherText, int diameter)
    {
        // Дешифрование
    }
}

Шаг 3: Реализация Метода Шифрования

Метод шифрования будет принимать исходный текст и диаметр стержня в качестве параметров. Пример кода для метода Encrypt:

public string Encrypt(string text, int diameter)
{
    int textLength = text.Length;
    int rows = (int)Math.Ceiling((double)textLength / diameter);
    char[,] matrix = new char[rows, diameter];
    string cipherText = string.Empty;

    for (int i = 0, k = 0; i < rows; i++)
    {
        for (int j = 0; j < diameter; j++)
        {
            if (k < textLength)
                matrix[i, j] = text[k++];
            else
                matrix[i, j] = ' '; // Добавляем пустые места, если текст закончился
        }
    }

    for (int j = 0; j < diameter; j++)
    {
        for (int i = 0; i < rows; i++)
        {
            cipherText += matrix[i, j];
        }
    }

    return cipherText;
}

Шаг 4: Реализация Метода Дешифрования

Метод Decrypt будет обратным к Encrypt. Он примет зашифрованный текст и диаметр стержня, чтобы восстановить исходное сообщение.

public string Decrypt(string cipherText, int diameter)
{
    int cipherLength = cipherText.Length;
    int rows = (int)Math.Ceiling((double)cipherLength / diameter);
    char[,] matrix = new char[rows, diameter];
    string text = string.Empty;

    for (int j = 0, k = 0; j < diameter; j++)
    {
        for (int i = 0; i < rows; i++)
        {
            if (k < cipherLength)
                matrix[i, j] = cipherText[k++];
        }
    }

    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < diameter; j++)
        {
            if (matrix[i, j] != '\0')
                text += matrix[i, j];
        }
    }

    return text.Trim();
}

Шаг 5: Тестирование Шифра Скитала в C#

После реализации методов шифрования и дешифрования, следует протестировать наш класс ScytaleCipher.

static void Main(string[] args)
{
    ScytaleCipher scytaleCipher = new ScytaleCipher();

    string originalText = "THISISASECRETMESSAGE";
    int diameter = 5;

    string cipherText = scytaleCipher.Encrypt(originalText, diameter);
    Console.WriteLine("Зашифрованный текст: " + cipherText);

    string decryptedText = scytaleCipher.Decrypt(cipherText, diameter);
    Console.WriteLine("Расшифрованный текст: " + decryptedText);
}

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

Читайте так же  Полное руководство по использованию шифра XOR в C#: от теории до практики

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