Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Шифрование ключом

1. Необходимо считать из файла текст (для облегчения задания текст состоит только из строчных букв, без пробелов и знаков препинания). (Определите, используя таблицу ASCII https://www.industrialnets.ru/files/misc/ascii.pdf, интервал в котором находятся строчные буквы). Сохранить в одномерном массиве mas типа char. (Данный пункт Вы уже неоднократно выполняли в предыдущих заданиях).

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

3. Теперь необходимо продублировать ключ несколько раз, чтобы длина «расширенного» ключа равнялась длине введённого текста, см. рисунок выше. Для этого создайте новый массив, например key_big, и в цикле, например по переменной i, выполните следующую операцию: key_big[i] = key[i % 5]. Математическая операция % это операция целочисленного деления, т.к. длина ключа меньше длины текста, то Ваш ключ, из массива key, будет записываться в массив key_big циклически, до тех пор, пока длина «расширенного» ключа не сравняется с длиной текста.

4. Теперь необходимо зашифровать Ваш исходный текст, использую «расширенный» ключ.

4.1. Создайте двумерный массив: char table[26][26]. (Почему размер массива равен 26x26???).

4.2. Создайте одномерный массив alphabet и заполните его строчными буквами, используя интервал, который Вы должны были определить в 1 пункте. Какой размер этого массива???

4.3. for (i) // Индекс строки матрицы

{

for (j) // Индекс столбца матрицы

{// На их пересечении находится искомый элемент матрицы

sdvig = i + j;

if (sdvig > = ???) sdvig = sdvig % ???;

table[i][j] = alphabet[sdvig];

}

 

}

4.4. Используя код выше Вы заполните Вашу квадратную матрицу, так как это показано на рисунке выше. Допишите этот код!!!

5. До пункта 4.4 включительно, программы для Шифрования и Дешифрования одинаковы!!!

6. Алгоритм шифрования (Программа №1)

6.1. Для того чтобы зашифровать текст Вам необходимо указать номер строки и номер столбца из таблицы, на пересечении которых находится элемент ЗАШИФРОВАННОГО текста, которым Вы замените символ ИСХОДНОГО текста, внимательно изучите рисунок. Для того чтобы определить строку необходимо найти символ из массива с «расширенным» ключом в первой строке квадратной матрицы. Для того чтобы определить столбец необходимо найти символ из массива с текстом в первом столбце квадратной матрицы.

for (i)// Количество итераций по циклу ограничен размером Вашего текста

{

for (j)// Цикл по символам

{

if (mas[? ] == table[? ][? ])y =?; //y- номер столбца

if (key_big[? ] == table[? ][? ])x =?; // x- номер строки

}

mas_sh[i] = table[? ][? ]; // mas_sh – массив с ЗАШИФРОВАННЫМ //текстом, не забудьте его предварительно создать.

x = 0;

y = 0;

}

6.2. Первый символ исходного текста зашифрован в строке, с которого начинается первый символ «расширенного» ключа. Столбец соответствует первому элементу исходного текста. (В моем случае: первый символ «расширенного» ключа: o, первый символ исходного текста: m, на пересечении получаем: a).

6.3. Выведите зашифрованный текст в файл.

7. Алгоритм дешифрования (Программа №2)

7.1. Дешифрование производится следующим образом: находим в первой строке таблицы букву, соответствующую букве «расширенного» ключа; в данной строке находим символ зашифрованного текста, номер его столбца. Буква из первой строки, в столбце, которого находится найденный символ, соответствует символу исходного текста.

for (i)// Количество итераций по циклу ограничен размером Вашего текста

{

 

for (j)// Цикл по символам

{

if (key_big[? ] == table[? ][? ])x = j; //строка

}

 

for (j)// Цикл по символам

{

if (mas_sh[? ] == table[?? ][? ])y = j; //столбец

}

mas_sh[? ] = table[? ][? ]; // Теперь в массиве mas_sh хранится РАСШИФРОВАННЫЙ текст

x = 0;

y = 0;

}

<== предыдущая лекция | следующая лекция ==>
Задания. Лабораторная работа №1 имеет целью освоение возможностей программы Microsoft Project для планирования проекта по разработке программного обеспечения. | Решение. Задание состоит из 5 задач, в которых требуется составить программы на Прологе
Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал