Программа шифрования, дешифрования файлов кодом Цезаря.
Определение ключа (взлом).

Прежде чем знакомиться с шифром Виженера, студентам предлагают поиграть с шифром (кодом) Цезаря.

  1. Задание создать приложение с алгоритмом Шифр Цезаря
  2. Возможности и ограничения по взлому ключа
  3. Работа с файлами (внимание на кодировку)
  4. Скачивайте и тестируйте ехе-файл бесплатно (кодирование, декодирование и взлом Шифра Цезаря)
  5. От Цезаря к шифру Виженера

О "серьезности" и устойчивости к взлому данного шифра говорить не будем...


Задание создать приложение с алгоритмом Шифр Цезаря

Разработать программу "Шифр Цезаря" (исходный код C++ VS2012-2015). Шифрованию (кодировке) и расшифровке по Цезарю подлежат только буквы русского алфавита. Остальные символы, пробелы, цифры, знаки препинания передаются без изменения (как есть). Обеспечить декодирование (расшифровку), как с ключом так и декодирование без ключа (даже если ключ неизвестен). Т.е. обеспечить "взлом". Программа должна поддерживать ввод однобайтовых символов (ANSI).

Интерфейс программы согласно Задания
Рис.1        Интерфейс программы согласно Заданию




Возможности и ограничения по взлому ключа

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

По минимальному отклонению "частот в коде" от "обычных частот" можно определить ключ, но... это будет далеко не всегда. И программа далеко не всегда будет выдавать верный ответ (декодированный текст). Программа не сможет определить ключ, если текст маленький и специфичный (т.е. частоты символов будут очень отличаться от общей статистики).


Работа с файлами (внимание на кодировку)

По условию, кодировка в файлах должна быть ANSI (однобайтовые символы). И за этим нужно следить, так как если файлы будут содержать двубайтовые (широкие) символы UNICODE, то программа работать откажется.

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

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


Скачивайте и тестируйте ехе-файл бесплатно
(кодирование, декодирование и взлом Шифра Цезаря)

В комплект архива приложены файлы длинных текстов, код-текстов. Можно прямо в них вносить изменения и смотреть, как реагирует на это программа…

Зашифровать первичный, открытый текст с помощью кода Цезаря - это значит заменить каждый симовл другим, находящимся в алфавите справа от исходного на величину ключа. Алфавит как бы закольцован... т.е. после 33-го символа снова идет первый.
Расшифровка - обратный процесс. Символ код-текста заменяется символом, находящимся в алфавите слева на величину ключа, а после первого символа, снова идет 33-ий...

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

Void CezarForm::Decode() { //Декодировать по ключу
    System::String^ templat1="АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
    System::String^ templat2="абвгдеёжзийклмнопрстуфхцчшщъыьэюя";

    int le = textBox2->Text->Length; //длина текста
    if(le==0) { MessageBox::Show( "Отсутствует текст для декодирования...","Сообщение об ошибке" );    return;}
    if(textBox1->Text==""){ MessageBox::Show( "Отсутствует значение ключа...","Сообщение об ошибке" );    return;}
    int kl = System::Convert::ToUInt32(textBox1->Text) % 33;
    textBox3->Text = "";
    for(int i=0;i<le;i++) {
        int s = templat1->IndexOf(textBox2->Text[i]); //номер символа в алфавите
        if(s==-1) s = templat2->IndexOf(textBox2->Text[i]);
        if(s==-1) textBox3->Text += textBox2->Text[i]; //символ без изменений
        else textBox3->Text += templat1[(s-kl+33)%33];       
    }
}

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

Тестирование - это наиболее важный этап в жизненном цикле программного продукта. Поэтому не верьте картинкам, фильмам и сказкам…

Только личное тестирование во всех наиболее сложных сочетаниях данных - должно убедить Вас в доброкачественности алгоритма и исходного кода!

скачать ехе-файл для тестирования

для Windows 10 скачать exe-файл для тестирования



Другие примеры на языках «C»,«C++»

Другие примеры на тему «Шифрование, Кодирование и/или Сжатие Информации»



От Цезаря к шифру Виженера

Ключ Шифра Виженера - это комбинация ключей Цезаря, а сам сдвиг символа ничем не отличается от алгоритма Цезаря.  Можно ключ Виженера представлять последовательностью чисел, но чаще его представляют в виде слова (ведь порядковый номер символа в алфавите - это число… так что никакой разницы).

Поскольку каждый ключ Цезаря (величина сдвига) применяется с определенной цикличностью, то определив длину ключа Виженера (в общем случае перебором) уже известным частотным анализом находим каждый из "ключей Цезаря".

Видимо, во времена Цезаря и Виженера такое усложнение значительно повышало стойкость шифра, но во временя компьютеров (с возрастающей мощью) сложно назвать длину ключа Виженера, которая бы обеспечила стойкость шифрования. Разве что больше, чем половина текста сообщения…

Кому нужна программа по взлому Виженера - пишите… Как только количество пожеланий превысит "критическую массу", то выкрою и посвящу этому вопросу время.





Если у Вас остались вопросы, то задать их Вы можете, нажав на эту кнопочку ...




Если на этой странице не нашлось того, что Вы так искали...

         Не расстраивайтесь, не все потеряно... Смело щелкайте...
исходный код на заказ. orenstudent.ru Автоматизация документов MS Office. orenstudent.ru Skype-консультирование по программированию
Скайп-консультации

Акция !!!
исходный код комментарии цена минимальная


Не попадайтесь на удочку мошенников-кидал... Помогите найти и устранить ошибку в исходном коде программы. orenstudent.ru 2D 3D графика. исходный код на заказ. orenstudent.ru исходный код на заказ. orenstudent.ru
Сайт помощи студентам по программированию и информатике

Program code