Шифрование – ci-sharp.ru https://ci-sharp.ru Sat, 18 Nov 2023 23:40:54 +0000 ru-RU hourly 1 https://wordpress.org/?v=6.8.3 https://ci-sharp.ru/wp-content/uploads/2023/10/cropped-ci-sharp-32x32.png Шифрование – ci-sharp.ru https://ci-sharp.ru 32 32 Реализация шифра Атбаш в C#: полное руководство для разработчиков https://ci-sharp.ru/algoritmy-i-struktury-dannyh/shifrovanie/shifr-atbash-v-c/ https://ci-sharp.ru/algoritmy-i-struktury-dannyh/shifrovanie/shifr-atbash-v-c/#respond Tue, 17 Oct 2023 06:44:14 +0000 https://ci-sharp.ru/obuchenie/shifr-atbash-v-c/ Шифр Атбаш – это древняя техника шифрования, в которой первая буква алфавита заменяется последней, вторая – предпоследней и так далее. Этот метод был разработан еще во времена иврита и до сих пор используется как основа для создания различных шифровальных систем. В современном программировании шифр Атбаш можно легко реализовать с помощью различных языков программирования, в том числе и C#. В этой статье мы подробно рассмотрим, как реализовать шифр Атбаш в C#, и приведем реальные примеры кода.

Что такое шифр Атбаш?

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

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

Алгоритм шифра Атбаш

Алгоритм шифрования Атбаш достаточно прост. Для английского алфавита это означает замену буквы ‘A’ на ‘Z’, ‘B’ на ‘Y’, ‘C’ на ‘X’ и так далее до ‘Z’, которая заменяется на ‘A’. Это достигается путем вычисления разности между кодом символа и кодом первой буквы алфавита, затем из кода последней буквы алфавита вычитается полученная разность, и результат преобразуется обратно в символ.

Реализация шифра Атбаш в C#

Реализация шифра Атбаш на C# требует понимания работы с символами и строками в этом языке программирования. Ниже приведен пример функции, которая реализует шифрование и дешифрование текста по алгоритму Атбаш:

public static string AtbashCipher(string input)
{
    char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
    char[] reverseAlphabet = alphabet.Reverse().ToArray();
    Dictionary<char, char> charMap = alphabet.Zip(reverseAlphabet, (orig, rev) => new { orig, rev })
                                              .ToDictionary(pair => pair.orig, pair => pair.rev);

    string output = string.Empty;
    foreach (char c in input.ToUpper())
    {
        if (charMap.ContainsKey(c))
        {
            output += charMap[c];
        }
        else
        {
            output += c;
        }
    }

    return output;
}

В этой функции создается карта соответствия между обычным алфавитом и его “зеркальным” отражением. Затем каждый символ входной строки преобразуется в соответствии с этой картой. Неалфавитные символы остаются без изменений.

Тестирование функции шифра Атбаш

Для проверки работы функции необходимо написать несколько тестов, которые покажут, как функция работает с различными входными данными. Например, можно проверить шифрование и последующее дешифрование текста:

string originalText = "HELLO WORLD";
string encryptedText = AtbashCipher(originalText);
string decryptedText = AtbashCipher(encryptedText);

Console.WriteLine($"Original: {originalText}");
Console.WriteLine($"Encrypted: {encryptedText}");
Console.WriteLine($"Decrypted: {decryptedText}");

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

Вариации и улучшения

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

Заключение

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

]]>
https://ci-sharp.ru/algoritmy-i-struktury-dannyh/shifrovanie/shifr-atbash-v-c/feed/ 0
Реализация шифра Полибия на C#: Полное руководство с примерами кода https://ci-sharp.ru/algoritmy-i-struktury-dannyh/shifrovanie/kvadrat-polibiia-v-c/ https://ci-sharp.ru/algoritmy-i-struktury-dannyh/shifrovanie/kvadrat-polibiia-v-c/#respond Mon, 24 Jul 2023 18:57:14 +0000 https://ci-sharp.ru/obuchenie/kvadrat-polibiia-v-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’. Затем для каждой буквы ищем её координаты и добавляем в зашифрованный текст.

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

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

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#. В этой статье мы рассмотрели подробно, как выполнить шифрование и расшифровку текста, используя эту технику. Несмотря на свою простоту, квадрат Полибия является отличным примером для понимания основ криптографии и может быть применён в различных областях программирования для решения специфических задач.

]]>
https://ci-sharp.ru/algoritmy-i-struktury-dannyh/shifrovanie/kvadrat-polibiia-v-c/feed/ 0
Реализация Шифра Виженера на C#: Подробное руководство https://ci-sharp.ru/algoritmy-i-struktury-dannyh/shifrovanie/shifr-vizhenera-v-c/ https://ci-sharp.ru/algoritmy-i-struktury-dannyh/shifrovanie/shifr-vizhenera-v-c/#respond Sun, 09 Jul 2023 06:21:34 +0000 https://ci-sharp.ru/obuchenie/shifr-vizhenera-v-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. Преобразование полученных чисел обратно в буквы исходного текста.

Пример кода шифрования на 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}");
    }
}

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

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

]]>
https://ci-sharp.ru/algoritmy-i-struktury-dannyh/shifrovanie/shifr-vizhenera-v-c/feed/ 0
Реализация Шифра Цезаря в C#: Полное Руководство с Примерами https://ci-sharp.ru/algoritmy-i-struktury-dannyh/shifrovanie/shifr-tsezaria-v-c/ https://ci-sharp.ru/algoritmy-i-struktury-dannyh/shifrovanie/shifr-tsezaria-v-c/#respond Wed, 05 Apr 2023 19:58:49 +0000 https://ci-sharp.ru/obuchenie/shifr-tsezaria-v-c/ Что такое Шифр Цезаря?

Шифр Цезаря, названный в честь Юлия Цезаря, который, по легенде, использовал его в своей личной переписке, является одним из самых простых и известных методов шифрования. Он представляет собой тип подстановочного шифра, где каждая буква в тексте заменяется буквой, находящейся на некотором фиксированном числе позиций левее или правее её в алфавите.

Представьте себе алфавит, расположенный в кругу так, что после буквы Z снова идет буква A. Шифрование сдвигает этот круг на определенное количество шагов. Например, сдвиг на 3 позиции превратит A в D, B в E и так далее.

Основы шифрования в C#

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

Реализация Шифра Цезаря

Для реализации Шифра Цезаря нам нужно написать функцию, которая будет принимать входную строку и число, на которое нужно сдвинуть алфавит (ключ шифрования). Вот пример такой функции:

public static string CaesarCipher(string text, int shift)
{
    char[] buffer = text.ToCharArray();

    for (int i = 0; i < buffer.Length; i++)
    {
        char letter = buffer[i];

        if (char.IsLetter(letter))
        {
            char letterOffset = char.IsUpper(letter) ? 'A' : 'a';
            letter = (char)((((letter + shift) - letterOffset) % 26) + letterOffset);
        }

        buffer[i] = letter;
    }

    return new string(buffer);
}

Этот метод сначала преобразует входную строку в массив символов. Затем он проходит через каждый символ, проверяя, является ли он буквой. Если это так, код определяет базовую точку для преобразования (‘A’ для заглавных и ‘a’ для строчных букв), применяет сдвиг, обрабатывает перенос через Z обратно к A с помощью операции модуля, и затем сдвигает обратно к правильному диапазону символов ASCII.

Шифрование и Дешифрование

Шифрование текста с помощью Шифра Цезаря требует просто передачи текста и ключа в функцию CaesarCipher. Однако для дешифрования нам нужно сдвинуть в обратную сторону. Это можно сделать, передав отрицательное значение сдвига. Вот как это работает:

string originalText = "Hello World!";
int key = 3;

string encryptedText = CaesarCipher(originalText, key);
Console.WriteLine("Encrypted Text: " + encryptedText);

string decryptedText = CaesarCipher(encryptedText, -key);
Console.WriteLine("Decrypted Text: " + decryptedText);

Безопасность Шифра Цезаря

Важно понимать, что Шифр Цезаря считается очень слабым по современным меркам безопасности. Он легко поддается анализу частоты встречаемости букв и может быть взломан даже без знания ключа. Следовательно, его не следует использовать для защиты конфиденциальной информации.

Вариации и Улучшения

Шифр Цезаря может быть модифицирован и улучшен различными способами. Например, можно использовать разный сдвиг для каждой буквы исходного текста или комбинировать Шифр Цезаря с другими методами шифрования для повышения уровня безопасности. Однако, несмотря на все улучшения, основной принцип остаётся уязвимым к методам криптоанализа.

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

]]>
https://ci-sharp.ru/algoritmy-i-struktury-dannyh/shifrovanie/shifr-tsezaria-v-c/feed/ 0
Полное руководство по использованию шифра XOR в C#: от теории до практики https://ci-sharp.ru/algoritmy-i-struktury-dannyh/shifrovanie/shifr-xor-v-c/ https://ci-sharp.ru/algoritmy-i-struktury-dannyh/shifrovanie/shifr-xor-v-c/#respond Mon, 16 Jan 2023 20:10:55 +0000 https://ci-sharp.ru/obuchenie/shifr-xor-v-c/ Использование шифрования данных для защиты конфиденциальной информации является критически важным аспектом современной разработки программного обеспечения. Один из простых, но эффективных методов шифрования – это шифр XOR. В этой статье мы подробно рассмотрим, как реализовать шифр XOR в языке программирования C#.

Что такое шифр XOR и как он работает?

Шифр XOR (исключающее ИЛИ) – это тип симметричного шифрования, который применяет операцию XOR к каждому биту исходных данных, используя определенный ключ. Операция XOR возвращает истину, если биты сравниваемых значений различны, и ложь, если они одинаковы. В контексте шифрования ключ повторяется, если он короче шифруемых данных.

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

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

Перед тем как погрузиться в кодирование, важно подготовить все необходимое. Вам понадобится среда разработки, например Visual Studio или Visual Studio Code, и установленный .NET SDK. Создайте новый проект C# или откройте существующий, где вы хотите использовать шифрование XOR.

Реализация функции шифрования XOR

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

public static string XorEncrypt(string input, string key)
{
    char[] data = input.ToCharArray();
    char[] keyData = key.ToCharArray();
    char[] result = new char[data.Length];

    for (int i = 0; i < data.Length; i++)
    {
        result[i] = (char)(data[i] ^ keyData[i % keyData.Length]);
    }

    return new String(result);
}

Этот код преобразует входную строку и ключ в массивы символов, затем проходит по каждому символу входных данных и применяет операцию XOR с соответствующим символом ключа. Если ключ короче данных, он повторяется.

Реализация функции дешифрования XOR

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

public static string XorDecrypt(string input, string key)
{
    // Дешифрование очень похоже на шифрование, поскольку XOR - это обратимая операция.
    return XorEncrypt(input, key);
}

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

Пример использования шифра XOR в C#

Теперь давайте посмотрим на пример использования наших функций шифрования и дешифрования в реальной программе на C#:

static void Main(string[] args)
{
    string originalText = "Привет, мир!";
    string key = "mysecretkey";

    string encryptedText = XorEncrypt(originalText, key);
    Console.WriteLine($"Зашифрованный текст: {encryptedText}");

    string decryptedText = XorDecrypt(encryptedText, key);
    Console.WriteLine($"Расшифрованный текст: {decryptedText}");
}

Когда вы запустите этот код, вы увидите, что зашифрованный текст выглядит как набор бессмысленных символов, а расшифрованный текст восстанавливается в исходное сообщение “Привет, мир!”.

Важные моменты и ограничения шифра XOR

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

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

]]>
https://ci-sharp.ru/algoritmy-i-struktury-dannyh/shifrovanie/shifr-xor-v-c/feed/ 0
Реализация Шифра Скитала (Scytale Cipher) на C#: Пошаговое Руководство https://ci-sharp.ru/algoritmy-i-struktury-dannyh/shifrovanie/shifr-skitala-v-c/ https://ci-sharp.ru/algoritmy-i-struktury-dannyh/shifrovanie/shifr-skitala-v-c/#respond Thu, 24 Nov 2022 00:05:33 +0000 https://ci-sharp.ru/obuchenie/shifr-skitala-v-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);
}

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

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

]]>
https://ci-sharp.ru/algoritmy-i-struktury-dannyh/shifrovanie/shifr-skitala-v-c/feed/ 0