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

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

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

История и принцип работы шифра Виженера

Шифр Виженера был изобретен в 1553 году Блезом де Виженером и считался “неразрешимым” на протяжении многих веков из-за его использования нескольких различных алфавитов для шифрования. Основная идея заключается в использовании ключевого слова, длина которого может быть меньше длины шифруемого сообщения. Ключ повторяется до тех пор, пока его длина не сравняется с длиной сообщения, а затем каждая буква исходного текста смещается на количество позиций, соответствующее букве ключевого слова.

Подготовка к реализации на C#

Перед тем как приступить к написанию кода, нужно создать новый проект в среде разработки Visual Studio или в любом другом редакторе кода, поддерживающем C#. Убедитесь, что у вас установлена последняя версия .NET SDK для корректной компиляции и выполнения программы.

Алгоритм шифрования

Шифрование с помощью шифра Виженера состоит из следующих шагов:

  1. Приведение исходного текста и ключа к одной длине.
  2. Преобразование каждой буквы текста в соответствующее числовое значение (например, ‘A’ = 0, ‘B’ = 1, …, ‘Z’ = 25).
  3. Сложение значений букв текста и ключа с последующим модульным сложением по длине алфавита (обычно 26 для латинского алфавита).
  4. Преобразование полученных чисел обратно в буквы.

Алгоритм дешифрования

Дешифрование происходит в обратном порядке:

  1. Приведение зашифрованного текста и ключа к одной длине.
  2. Преобразование каждой буквы текста и ключа в числовое значение.
  3. Вычитание из значений букв зашифрованного текста значений соответствующих букв ключа с последующим модульным вычитанием.
  4. Преобразование полученных чисел обратно в буквы исходного текста.
Читайте так же  Полное руководство по использованию шифра XOR в C#: от теории до практики

Пример кода шифрования на C#

Вот пример функции шифрования текста с использованием шифра Виженера:

public static string VigenereEncrypt(string text, string key)
{
    string result = "";
    text = text.ToUpper();
    key = key.ToUpper();

    for (int i = 0, j = 0; i < text.Length; i++)
    {
        char c = text[i];
        if (c < 'A' || c > 'Z') continue;
        result += (char)((c + key[j] - 2 * 'A') % 26 + 'A');
        j = ++j % key.Length;
    }
    return result;
}

Пример кода дешифрования на C#

Аналогично примеру выше, вот функция дешифрования текста:

public static string VigenereDecrypt(string text, string key)
{
    string result = "";
    text = text.ToUpper();
    key = key.ToUpper();

    for (int i = 0, j = 0; i < text.Length; i++)
    {
        char c = text[i];
        if (c < 'A' || c > 'Z') continue;
        result += (char)((c - key[j] + 26) % 26 + 'A');
        j = ++j % key.Length;
    }
    return result;
}

Тестирование и использование кода

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

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Enter the text to encrypt:");
        string userText = Console.ReadLine();
        Console.WriteLine("Enter the key:");
        string userKey = Console.ReadLine();

        string encryptedText = VigenereEncrypt(userText, userKey);
        Console.WriteLine($"Encrypted text: {encryptedText}");

        string decryptedText = VigenereDecrypt(encryptedText, userKey);
        Console.WriteLine($"Decrypted text: {decryptedText}");
    }
}

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

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