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

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

  1. Задание
  2. Возможности и ограничения
  3. Работа с файлами
  4. Решение

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


Задание


Разработать программу "Шифр Цезаря" (исходный код 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];       
    }
}

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

Скачать ехе-файл (программу) для тестирования


Условия получения кода?    Показать?


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

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




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




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

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

Акция !!!
Весь код по 49 руб


Не попадайтесь на удочку мошенников-кидал...
Сайт помощи студентам по программированию и информатике

Program code