Шифр Виженера является одним из классических методов шифрования текста, который был разработан в XVI веке и использует принцип полиалфавитной замены. В этой статье мы подробно рассмотрим, как реализовать шифрование и дешифрование текста с помощью шифра Виженера на языке программирования C#.
История и принцип работы шифра Виженера
Шифр Виженера был изобретен в 1553 году Блезом де Виженером и считался “неразрешимым” на протяжении многих веков из-за его использования нескольких различных алфавитов для шифрования. Основная идея заключается в использовании ключевого слова, длина которого может быть меньше длины шифруемого сообщения. Ключ повторяется до тех пор, пока его длина не сравняется с длиной сообщения, а затем каждая буква исходного текста смещается на количество позиций, соответствующее букве ключевого слова.
Подготовка к реализации на C#
Перед тем как приступить к написанию кода, нужно создать новый проект в среде разработки Visual Studio или в любом другом редакторе кода, поддерживающем C#. Убедитесь, что у вас установлена последняя версия .NET SDK для корректной компиляции и выполнения программы.
Алгоритм шифрования
Шифрование с помощью шифра Виженера состоит из следующих шагов:
- Приведение исходного текста и ключа к одной длине.
- Преобразование каждой буквы текста в соответствующее числовое значение (например, ‘A’ = 0, ‘B’ = 1, …, ‘Z’ = 25).
- Сложение значений букв текста и ключа с последующим модульным сложением по длине алфавита (обычно 26 для латинского алфавита).
- Преобразование полученных чисел обратно в буквы.
Алгоритм дешифрования
Дешифрование происходит в обратном порядке:
- Приведение зашифрованного текста и ключа к одной длине.
- Преобразование каждой буквы текста и ключа в числовое значение.
- Вычитание из значений букв зашифрованного текста значений соответствующих букв ключа с последующим модульным вычитанием.
- Преобразование полученных чисел обратно в буквы исходного текста.
Пример кода шифрования на 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}");
}
}
Запустите приложение и проверьте, что зашифрованный текст можно успешно расшифровать обратно в исходный текст с тем же ключом.
Используя данное руководство, вы сможете реализовать шифр Виженера для защиты своих текстовых данных. Этот метод шифрования является отличным примером для изучения основ криптографии и понимания работы полиалфавитных шифров.