Задание 2 Лаб работа вариант 5. Вариант 5 Задание
Скачать 21.49 Kb.
|
Вариант 5 Задание: Написать программу шифрования и дешифрования сообщения, используя древнеспартанский шифр "скитала". Спартанцы заметили, что если полоску пергамента намотать спирально на палочку и написать на нем вдоль палочки текст сообщения, то после снятия полоски буквы в ней расположатся хаотично. Этот эффект можно получить, если записывать буквы не подряд, а через условленное число по кольцу до тех пор, пока весь текст не будет исчерпан. Сообщение ВЫСТУПАЙТЕ при окружности палочки в 3 буквы даст шифровку ВУТЫПЕСАТЙ. Решение: Слово «скитала», используемое для названия шифра, произошло от древнегреческого сцитала, что переводится, как жезл. Такое шифрование относится к типу перестановочных. Авторство изобретения этого способа кодирования текста криптография отдаёт Древней Спарте. Способ кодировки Идея шифрования текста заключается в том, что сообщение писалось на узкой полоске пергамента. А та в свою очередь наматывалась на палочку (жезл) определённой длины и диаметра. Для прочтения полоска античной бумаги наматывалась на жезл плотно, виток к витку. Намотка должна была осуществляться так, чтобы между соседними витками не оставалось никакого промежутка. В то же время витки не должны были накладываться друг на друга. Только в этом случае достигалась полная идентичность написанного и читаемого текстов. Далее читалась строка вдоль длины получившегося цилиндра. Затем палочка поворачивалась на определённый угол и читалась следующая строка. Полностью сообщение считывалось при полном обороте жезла, являвшегося частью шифра «скитала». Чтобы передаваемое сообщение без искажений уяснялось принимающей стороной. Адресант и адресат должны были иметь жезл одинаковой длины и диаметра. Кроме «стандартизованных» размеров скиталы постоянную величину должен был иметь шрифт и ширина пергаментной полоски. Только в этом случае написанный текст одинаково изображался и читался на любом стандартном жезле. Процесс шифрования заключался в перемене мест исходного текста в соответствии с буквенной ёмкостью диаметра дешифровального приспособления. Ограниченные размеры жезла предъявляли определённые требования к длине сообщения. Оно не могло превосходить максимально возможной длины, равной произведению количества букв вдоль окружности скиталы на число витков, укладывающихся в её длине. Например, если окружность вмещает 5 символов, а длина 9 витков, максимальная длина текста составит 45 символов. Если требуется передать больше информации, нужно намотать следующий участок полоски или использовать ещё одну. #include #include #include #include using namespace std; int main() { char *source_text; char *ciphertext; // "матрица" Сциталла int symbol_amount; // кол-во символов в сообщении int string_amount; // кол-во строк int colum_amount; // кол-во столбцов int index; // индекс буквы зашифрованного сообщения int file_length; // сколько символов считать из файла ifstream fin("message.txt"); if (!fin.is_open()) // если файл не открыт cout << "Файл не может быть открыт!\n"; // сообщить об этом else { cout << "Сколько символов считать из файла? " << endl; cin >> file_length; source_text = new char[file_length]; fin.getline(source_text, file_length); // считали строку из файла cout << endl << "Сообщение: " << endl; for (int i = 0; i < file_length; i++) { cout << source_text[i]; } cout << endl; fin.close(); // закрываем файл } symbol_amount = file_length; ciphertext = new char[symbol_amount]; cout << endl; cout << "Введите ключ Скиталла: "; cin >> string_amount; colum_amount = ((symbol_amount - 1) / string_amount) + 1; // вычислили кол-во столбцов cout << "Кол-во символов в сообщении: " << symbol_amount << endl; cout << "Кол-во строк: " << string_amount << endl; cout << "Кол-во столбцов: " << colum_amount << endl; for (int i = 0; i < symbol_amount; i++) { index = string_amount*(i%colum_amount) + (i / colum_amount); ciphertext[index] = source_text[i]; } for (int i = 0; i < symbol_amount; i++) cout << ciphertext[i]; cout << endl; delete []ciphertext; delete []source_text; } «Сатнызмтл, чоел оок егмнанмтт прлн аплчуинпст анмвоьплчитктсощня опсесяи оок ув е аплжтяхоин.Эо фетмжоплчт,ел аиыаьбкын орд ее солно ил оклц отхпр оавс ес ебдтичра.СощнеВСУАТ р кунсиплчив3бкыдс ирвуВТПСТ.прац аеии т сиплсупрает аоаьсиаьон аок аиаьн е дл аок ес обеи,т ол нтяплсибкывнйрсооас атчо ттэфк он оуиь сизпсвт ув епдя,ачрзулвенечсоп оьуд е о,пк еьтктн уе сепн обеи ЫТПЙЕпиоржот аок ув атшфок УЫЕАЙ» |