Основы криптографии

advertisement
Основы криптографии и программирование
Методическая разработка по предмету
Информатика и ИКТ
Новиковой Елены Юрьевны
учителя информатики
МОУ «Физико-технический лицей № 1» г. Саратова
2009 год
Пояснительная записка
Темы
информационная безопасность и программирование
входят в
программу профильной информатики. Моя разработка посвящена одному аспекту
информационной безопасности – криптографии и рассчитана на 6 часов. Данную
тему предлагаю давать учащимся в 11-м классе в разделе повторения методов
программирования и подготовки к сдаче ЕГЭ по информатике. Изучая эту тему,
учащийся
получает знания по основам криптографии и закрепляет умения
программировать с использованием переменных символьного и строкового типов.
Для программирования используется язык Pascal. Предполагается, что учащиеся
знакомы с программированием массивов, строк и символов в Паскале.
Лекционные части уроков темы сопровождаются презентациями. В
разработке представлены программные коды рассматриваемых задач. При изучении
темы учащиеся выполняют две
практические работы и
одну контрольную
практическую работу. Материал разработки имеет дополнительные задания.
Содержание темы
Урок 1. Основы криптографии. 1ч. Возможности защиты информации.
Понятия криптографические алгоритмы, шифр, ключ. Виды криптоалгоритмов.
Переменные символьного и строкового типа в Паскале.
Урок 2. Шифры замены. 1ч. Шифры Цезаря, Виженера,
Урок 3.
Практическая
работа
по
теме
«Программирование
криптоалгоритмов замены». 1ч.
Урок 4. Шифры перестановки. 1ч. Одиночные и двойные перестановки.
Магические квадраты.
Урок 5.
Практическая
работа
по
теме
«Программирование
теме
«Программирование
криптоалгоритма одиночной перестановки». 1ч.
Урок 6.
Контрольная
криптоалгоритмов». 1ч.
работа
по
Первый урок
Основы криптографии
Форма урока: урок- лекция, беседа.
Цели урока: познакомить учащихся с проблемами информационной
безопасности, способами
обеспечения безопасности,
понятием криптографии,
вспомнить описание, функции и процедуры обработки строк и символов в Паскале.
Лекция сопровождается презентацией «Основы криптографии».
Защита информации от несанкционированного доступа волновала
людей с тех пор, как у них возникла потребность обмениваться мыслями. При
любом информационном обмене существует отправитель сообщения (sender) и
его получатель (recipient). Отправитель всегда желает, чтобы на всем пути
следования содержимое сообщения сохранялось в тайне, т. е. чтобы
злоумышленник, перехвативший сообщение, не смог понять его смысл и не
имел возможности воздействовать на содержимое сообщений (изменять,
удалять, создавать новые сообщения).
Для обеспечения информационной безопасности изобретено много
разных методов и средств защиты информации.
Можно выделить три основные возможности сохранения информации:
 Создать недоступный для других канал связи между абонентами.
 В общедоступном канале связи скрыть сам факт передачи
информации. Разработкой методов скрытия передачи информации занимается
наука стеганография.
 В общедоступном канале связи передавать преобразованную
(зашифрованную)
получатель.
информацию,
Разработкой
которую
может
восстановить
только
методов преобразования информации с целью ее
защиты занимается наука криптография.
Таким образом, одним
из способов защиты информации является
шифрование. Термин шифр (cipher) происходит от арабского слова "цифра" —
арабы первыми стали защищать текст, заменяя буквы цифрами.
А
криптография (cryptography) дословно переводится как "тайнопись", искусство
тайного письма (от греческих слов kryptos — тайный и grapho — пишу).
Исходное, незашифрованное сообщение называется открытым
текстом (plain text). Зашифрованное сообщение называется шифртекстом
(ciphertext). Процесс преобразования открытого текста в шифртекст называется
зашифрованием
(enciphering),
а
обратный
процесс
—
расшифрованием
(deciphering). Зашифрование и расшифрование выполняются в соответствии с
криптографическим
алгоритмом
криптографический
алгоритм
(cryptographic
содержит
Обычно
algorithm).
сменный
элемент
—
криптографический ключ (cryptographic key), позволяющий выбрать одно
конкретное преобразование из множества преобразований, реализуемых
данным алгоритмом.
Криптографические
преобразования
имеют
цель
обеспечить
недоступность информации для лиц, не имеющих ключа.
Общий алгоритм шифрования представлен на рисунке.
Ключ
Открытый
текст
Ключ
Шифртекст
Зашифрование
Ключ шифрования
Первоначальный
открытый текст
Расшифрование
Ключ расшифрования
Существует два основных типа криптографических алгоритмов:
симметричные, для которых ключ расшифрования совпадает с ключом
зашифрования или может быть легко из него получен, и асимметричные,
использующие для зашифрования и расшифрования два разных ключа.
В криптографии используются следующие основные алгоритмы
шифрования:
 алгоритм замены (подстановки) – символы шифруемого текста
заменяются символами того же или другого алфавита в соответствии с заранее
обусловленной схемой замены. Получатель шифртекста выполняет обратную
подстановку, восстанавливая открытый текст;
 алгоритм
перестановки
–
символы
шифруемого
текста
переставляются по определенному правилу в пределах некоторого блока этого
текста;
 аналитическое преобразование – преобразование шифруемого
текста по некоторому аналитическому правилу (формуле).
Рассмотрим некоторые криптоалгоритмы.
Примером простого алгоритма замены является шифр Цезаря, в
котором каждый символ открытого текста заменяется символом, находящимся
тремя символами правее в алфавите. Считается, что за последней буквой вновь
идет первая. В английском алфавите «А» меняется на «D», «В» -на «Е», «W» на «Z», «X» - на «A», «Y» - на «В», «Z» - на «С».
Этот шифр может быть описан уравнением
C=(M+K) mod N,
где М - номер буквы исходного текста в алфавите, С - номер буквы
зашифрованного текста в алфавите, K – ключ (число, на которое делаем
смещение), N – количество букв в алфавите, mod – операция вычисления
остатка от деления.
Фраза «байты сохраняются в виде файлов» после применения
шифрования
станет
следующим шифртекстом «дгмхяфсшуврвбхфв
еелзчгмосе». Перед шифрованием из текста убираются все пробелы.
Примером алгоритма перестановки является простой вертикальный
перестановочный шифр, где открытый текст пишется по горизонтали
фиксированной ширины, а шифртекст считывается по вертикали. Для
расшифрования такого текста достаточно написать шифртекст по вертикали
той же самой ширины, и затем прочитать открытый текст по горизонтали.
Фраза «байты сохраняются в виде файлов» размещается следующим
образом
б
а
й
т
ы
с
о
х
р
а
н
я
ю
т
с
я
в
в
и
д
е
ф
а
й
л
о
в
После считывания по вертикали получаем криптограмму: «баи анд
йяе тюф ыта ссй оял хво рвв» (если в последнем блоке не хватает символов,
добавляется буква х).
В настоящее время криптографические алгоритмы реализуются с
помощью компьютера, что будем делать и мы. А для этого вспомним
возможности работы с символами и строками в Паскале, ответив на следующие
вопросы (записать ответы на 2 и 3-й вопросы на доске):
 Cколько символов в компьютерном алфавите? (256, все символы
упорядочены в кодовой таблице ASCII)
 Как описываются символы в Паскале, задается символьная
константа, какие функции преобразования типов используются? (var c:char;
c:=’a’; ord(c) – возвращает номер символа в кодовой таблице, chr(n)возвращает символ по номеру из кодовой таблицы)
 Как описываются строки в Паскале, задается строковая константа,
как нумеруются символы в строке, как обратиться к символу строки с номером
i, какие функции и процедуры обработки строк используются? (var s:string;
s:=’файл’; s[i], length(s) – возвращает длину строки, copy(s,i,n)- возвращает n
символов из строки s c i-й позиции,
pos(s1,s)- возвращает номер первого
вхождения подстроки s1 в строку s, concate(s,s1,…)- возвращает объединенную
строку из строк s,s1 и т.д. , delete(s,i,n) – удаляет из строки s c i-й позиции n
символов, insert(s1,s,i) – вставляет подстроку s1 в строку s начиная с i-й
позиции, val(s,x,code) – преобразует строку s в число x, если code=0, то
преобразование произошло успешно, str(x,s)- преобразует число x в строку s)
Домашнее задание: выучить лекцию, написать программу на Паскале
для реализации шифрования и дешифрования фразы «personal computer» с
помощью шифра Цезаря.
Второй урок.
Шифры замены
Форма урока: урок-лекция.
Цели урока: расширить знания учащихся об используемых
шифрах
замены, научить шифровать и дешифровать информацию.
В начале урока предполагается провести опрос и анализ ответов учащихся
на вопросы:
 Выделить основные возможности сохранения информации, определить
понятия криптоалгоритм, шифр, ключ.
 Выделить основные виды криптоалгоритмов, дать им характеристику.
 Проверить заданную на дом программу (учащиеся должны написать
программу на доске).
Код программы, написанный учащимися на доске обсудить и сверить с
кодом на слайде 5 презентации «Шрифты замены. Программирование алгоритмов».
program cezar;
var n,i,r:integer; s:string;
begin
writeln('vvedite stroku');
readln(s);
writeln('vvedite regim: 1-shifrovanie, 2-rasshifrovanie');
readln(r);
if r=1 then begin
i:=1;
while i<=length(s) do
{убираем пробелы из открытого текста}
if s[i]=‘ ' then delete(s,i,1) else i:=i+1;
for i:=1 to length(s) do begin
n:=ord(s[i])+3; if n>ord('z') then n:=ord('a')+n-ord('z')-1;
s[i]:=chr(n); end;
end
else
for i:=1 to length(s) do begin
n:=ord(s[i])-3; if n<ord('a') then n:=ord('z')-(ord('a')-n-1);
s[i]:=chr(n); end;
writeln(s);
end.
Продолжим изучение разновидностей криптографических алгоритмов
замены. Лекция сопровождается презентацией. «Шрифты замены» с 6 по 10 слайды.
Другим представителем шифра замены является шифр Виженера. Этот
шифр является усложненным шифром Цезаря и предполагает выбор ключа,
который рассматривают как блоковую последовательность букв, а сообщение
разбивают на блоки длиной, соответствующей длине ключа. Затем выполняют
операцию сложения по модулю номеров каждой буквы исходного текста с
номером соответствующей буквы ключа в блоке и по полученному номеру
записывают букву в зашифрованный текст.
Для примера используем слово ФАЙЛ, состоящее из 4 букв, как ключ.
Алфавитным номерам букв соответствует блок чисел 21, 1, 10, 12. Чтобы
зашифровать сообщение при помощи этого ключа, исходный текст разбивается
на блоки длинной в 4 буквы каждый. Затем к каждому числовому
представлению первой буквы блока надо прибавить 21, к числовому
представлению второй буквы – 1, третьей – 10, четвертой – 12. Получающиеся
суммы по модулю представляют числовые значения шифртекста.
Шифр сложной замены состоит в модификации шифра Цезаря
числовым ключом. Для этого под буквами сообщения записывают цифры
числового ключа. Если ключ короче сообщения, то его запись циклически
повторяют. Шифртекст получают примерно так же, как в шифре Цезаря, но
отсчитывают не третью букву по алфавиту (как в шифре Цезаря), а ту, которая
смещена по алфавиту на соответствующую цифру ключа.
Пусть в качестве ключа используется группа из трех цифр – 314, тогда
Сообщение СОВЕРШЕННОСЕКРЕТНО
Ключ
3143143143143143143
Криптограмма ФПЖИСЫИОССТЙНСЙХОТ
Криптоалгоритм
полибианский квадрат предполагает заполнение
некоего квадрата буквами алфавита в случайном порядке. Для шифрования на
квадрате
находят
букву
текста
и
записывают
в
шифртекст
букву,
расположенную ниже ее в том же столбце. Если буква оказывалась в нижней
строке таблицы, то брали верхнюю букву из того же столбца.
Пусть дан квадрат - ключ для шифра «Полибианский квадрат».
У
Х
Э
Н
Ж
Ч
Е
С
Л
К
Ц
Г
О
Р
Д
Щ
Ф
А
Ь
И
В
З
Ю
Й
Ъ
Т
М
Б
П
Ы
Ш
Я
Зашифруем слово «криптография» полученным ключом. Найдем в
прямоугольнике первую букву слова. Выберем букву, которая стоит ниже этой
буквы, и запишем ее в качестве первого символа криптограммы. Выполним
аналогичные действия для всех оставшихся букв слова. Получим шифртекст
«азбжхвизтъбс».
Третий урок.
Практическая работа по теме
«Программирование криптоалгоритмов замены»
Цели
урока:
научить
шифровать
и
дешифровать
информацию
программным путем с помощью шифров замены.
Предлагается написать и отладить программы для шифрования и
дешифрования фразы «personal computer» по следующим алгоритмам:
 шифр Виженера с ключом «file»;
 шифр Полибианский квадрат, размером 5*5, случайным образом
заполненный прописными буквами латинского алфавита.
При выполнении практической работы необходимо обговорить
следующие моменты:
 все тексты состоят из малых английских букв;
 текст читается как строка и поэтому не может содержать более 256
символов. Можно не ограничивать объем текста, если учащиеся знакомы c
типом файлы.
При работе в среде программирования удобнее использовать
файловый ввод-вывод.
Программный код для алгоритма Виженера
program vigener;
var n,i,r:integer; s,s1,s2:string;
begin
writeln('vvedite stroku'); readln(s);
writeln('vvedite kluch'); readln(s1);
writeln('vvedite regim: 1-shifrovanie, 2-rasshifrovanie');
readln(r); s2:='';
for i:=1 to length(s) div length(s1)+1 do {размножаем ключ до длины
текста}
s2:=s2+s1;
if r=1 then begin i:=1;
while i<=length(s) do
if s[i]=' ' then delete(s,i,1) else i:=i+1;
for i:=1 to length(s) do begin
n:=ord(s[i])+(ord(s2[i])-ord('a'))+1;
if n>ord('z') then n:=ord('a')+(n-ord('z'))mod 26-1;
s[i]:=chr(n); end; end
else
for i:=1 to length(s) do begin
n:=ord(s[i])-(ord(s2[i])-ord('a'))-1;
if n<ord('a') then n:=ord('z')-(ord('a')-n)mod 26+1;
s[i]:=chr(n); end;
writeln(s);
end.
Тест
Входные данные (исходный текст, ключ)
personal computer
file
Выходные данные (шифртекст)
vndxuwmqixyuacqw
Программный код для алгоритма Полибианский квадрат
program polib_kvadrat;
var n,i,r,j,k:integer; s,s1:string; a:array[1..5,1..5] of char;
begin
writeln ('vvedite rasmer kvadrata');}readln(n);
writeln ('vvedite bukvi alfavita v kvadrad rasmera',' ',n);
for k:=1 to n do begin
for j:=1 to n do read(a[k,j]); readln; end;
writeln('vvedite stroku'); readln(s);
writeln('vvedite regim: 1-shifrovanie, 2-rasshifrovanie');
readln(r); s1:=''; {формируемая новая строка}
if r=1 then begin
i:=1;
while i<=length(s) do if s[i]=' ' then delete(s,i,1) else i:=i+1;
for i:=1 to length(s) do
for k:=1 to n do
for j:=1 to n do if s[i]=a[k,j] then
if k<n then s1:=s1+a[k+1,j] else s1:=s1+a[1,j];
end
else
for i:=1 to length(s) do
for k:=1 to n do
for j:=1 to n do if s[i]=a[k,j] then
if k>1 then s1:=s1+a[k-1,j] else s1:=s1+a[n,j];
writeln (s1);
end.
Тест
Входные данные (размер квадрата, квадрат с буквами, исходный текст,
режим работы)
5
abcde
fghji
klmno
prstu
vwxyz
1
personal computer
Выходные данные (шифртекст)
viwxutfrhusvzyiw
Домашнее задание: выучить лекцию, написать программу для
реализации шифрования и дешифрования текста с помощью шифра простой
вертикальной перестановки (см. Урок 1).
Четвертый урок.
Шифры перестановки
Цели урока: познакомить учащихся с шифрами перестановки, научиться
шифровать и дешифровать информацию.
В начале урока необходимо провести опрос и анализ ответов учащихся на
следующие вопросы:
 Дать общую характеристику шифрам перестановки.
 Проверить заданные на дом программу (учащиеся должны написать
программу на доске).
Код программы, написанный учащимися на доске обсудить и сверить с
кодом на слайде 5 презентации «Шрифты перестановки».
program prost_vert_perest;
var n,i,r,j,k:integer; s,s1,s2:string; a:array[1..5,1..5] of char;
begin
writeln ('vvedite shirinu bloka'); readln(n);
writeln('vvedite stroku'); readln(s);
writeln('vvedite regim: 1-shifrovanie, 2-rasshifrovanie');
readln(r); s1:='';
if r=1 then begin i:=1;
while i<=length(s) do
if s[i]=' ' then delete(s,i,1) else i:=i+1;
if length(s) mod n <>0 then for i:=1 to n-length(s)mod n do s:=s+'x';
{добавим в текст символы ‘x’, чтобы длина строки стала кратной ширине}
i:=0;
for k:=1 to length(s) div n do
for j:=1 to n do begin i:=i+1;a[k,j]:=s[i]; end;
for j:=1 to length(s) div n do
for k:=1 to n do s1:=s1+a[k,j];
end
else begin i:=0;
for j:=1 to length(s) div n do
for k:=1 to n do begin i:=i+1; a[k,j]:=s[i]; end;
for k:=1 to n do
for j:=1 to length(s) div n do s1:=s1+a[k,j];
end;
writeln (s1);
end.
Продолжим изучение разновидностей криптографических алгоритмов
перестановки. Лекция сопровождается презентацией. «Шрифты перестановки.
Программирование алгоритмов» с 6 по 10 слайды.
К перестановочному шифрованию относится метод одиночной
перестановки. Установим номера следования букв ключа ФАЙЛ в алфавите и
с помощью этих чисел пронумеруем столбцы, а открытый текст запишем как
последовательность строк под ключом. Криптограмма образуется путем чтения
по столбцам, начиная со столбца, номер которого наименьший в алфавите и т.д.
Используем ту же фразу «байты сохраняются в виде файлов»
Ф
А Й
21 1
Л
10 12
Б
А Й
Т
Ы
С
О
Х
Р
А Н
Я
Ю Т
С
Я
В
В
И
Д
Е
Ф А
Й
Л
О В
Х
(если остаются пустые клетки, заполните их буквой х)
В результате считывания по столбцам в соответствии с их номерами
получается криптограмма: «асатвфоионсиавтхяядихбырювел».
В алгоритме двойных перестановок сначала в таблицу записывается
текст сообщения, а потом поочередно переставляются столбцы, затем строки.
При расшифровке порядок перестановок обратный. Пример данного метода
шифрования показан в следующих таблицах
2
4
1
3
1
2
3
4
4
Б
А
Й
Т
1
Ы
С
О
2
Р
А
3
Ю
Т
1
2
3
4
4
Й
Б
Т
А
1
О
Ы
Х
С
Х
1
О
Ы
Х
С
2
Н
Р
Я
А
Н
Я
2
Н
Р
Я
А
3
С
Ю
Я
Т
С
Я
3
С
Ю
Я
Т
4
Й
Б
Т
А
Исходный текст «байты сохраняются». Ключом к шифру служат
номера столбцов 2413 и номера строк 4123 исходной таблицы. Шифртекст
«оыхснряасюятйбта».
Число
вариантов
двойной
перестановки
быстро
возрастает
с
увеличением размера таблицы: для таблицы 3 х 3 их 36, для 4 х 4 их 576, а для
5*5 их 14400.
Еще одним видом перестановочного алгоритма является алгоритм
магические квадраты. Магическими квадратами называются квадратные
таблицы с вписанными в их клетки последовательными натуральными числами,
начиная с единицы, которые дают в сумме по каждому столбцу, каждой строке
и каждой диагонали одно и то же число. Для шифрования необходимо вписать
исходный текст по приведенной в квадрате нумерации и затем переписать
содержимое таблицы по строкам. В результате получается шифртекст,
сформированный благодаря перестановке букв исходного сообщения.
Число магических квадратов резко возрастает с увеличением размера
его сторон: для таблицы 3*3 таких квадратов -1; для таблицы 4*4 - 880; а для
таблицы 5*5 - 250 000.
Например. Ключ:
Текст:
БИТЫ СОХРАНЯЮТСЯ В ВИДЕ ФАЙЛОВ
Шифртекст:
ИХОАСБЫТРЯВЯИСНТЮВЕОЛ_ЙДАФВ
И Х О
Я В Я
А С Б
И С Н
ЫТ Р
Т Ю В
Е О Л
Й
Д
АФ В
Пятый урок.
Практическая работа по теме
«Программирование криптоалгоритма одиночной перестановки»
Цели
урока:
научить
шифровать
и
дешифровать
информацию
программным путем с помощью одиночной перестановки.
Предлагается написать и отладить программу для шифрования и
дешифрования
фразы
«personal
computer»
по
алгоритму
одиночной
перестановки с ключом «file».
При выполнении практической работы необходимо обговорить
следующие моменты:
 все тексты состоят из малых английских букв
 текст читается как строка и поэтому не может содержать более 256
символов. Можно не ограничивать объем текста, если учащиеся знакомы типом
файлы.
При работе в среде программирования удобнее использовать
файловый ввод-вывод.
Программный код для алгоритма одиночной перестановки
program odin_perest;
var nmin,i,r,j,k,p:integer; s,s1,s2:string; a:array[1..5,1..5] of char;
begin
writeln('vvedite stroku'); readln(s);
writeln('vvedite kluch'); readln(s1);
writeln('vvedite regim: 1-shifrovanie, 2-rasshifrovanie');
readln(r);s2:='';
if r=1 then begin i:=1;
while i<=length(s) do if s[i]=' 'then delete(s,i,1) else i:=i+1;
if length(s) mod length(s1) <>0 then
for i:=1 to length(s1)-length(s)mod length(s1) do s:=s+'x';
i:=0;
for k:=1 to length(s) div length(s1) do
for j:=1 to length(s1) do begin i:=i+1;a[k,j]:=s[i];end;
for i:=1 to length(s1) do begin
nmin:=1;
for j:=2 to length(s1) do if ord(s1[j])<ord(s1[nmin]) then nmin:=j;
s1[nmin]:=chr(ord('z')+10);
for k:=1 to length(s) div length(s1) do
s2:=s2+a[k,nmin];
end;
end
else begin p:=0;
for i:=1 to length(s1) do
begin nmin:=1;
for j:=2 to length(s1) do
if ord(s1[j])<ord(s1[nmin]) then nmin:=j;
s1[nmin]:=chr(ord('z')+10);
for k:=1 to length(s) div length(s1) do begin p:=p+1;
a[k,nmin]:=s[p];
end;
end;
for k:=1 to length(s1) do for j:=1 to length(s) div length(s1) do
s2:=s2+a[k,j];
end;
writeln (s2);
end.
Тест
Входные данные (исходный текст, ключ, режим работы)
personal computer
file
1
Выходные данные (шифртекст)
slprpocuenotrame
Шестой урок.
Контрольная работа
Цели урока: проверка умений шифровать и дешифровать текстовую
информацию программным путем.
Учащимся предлагается карточка с заданиями. Задания разработаны в трех
вариантах. Можно уточнить, что работаем с малыми буквами английского алфавита.
Вариант 1
1. Написать алгоритм шифрования и дешифрования текста с помощью
шифра перестановки с заданной таблицей подстановки:
1
2
3
4
5
6
… 3n-2
3n-1
3n
3
2
1
6
5
4
… 3n
3n-1
3n-2
(Если количество символов в тексте не кратно трем, недостающие
символы дополняются пробелами).
2.Написать алгоритм шифрования и дешифрования текста при помощи
шифра Цезаря с переменным сдвигом и ключом 321.
3. Шифровать текст, разместив символы текста в квадрат необходимой
размерности
по спирали от центра против часовой стрелке. Из квадрата
выписать символы по строкам. (При шифровании убрать из исходного текста
все пробелы).
Например, шифрограмма текста «personal computer» после удаления пробелов
будет выглядеть как
r e t u
o s r p
n p e m
a l c o
Вариант 2
1. Проверить,
можно ли зашифровать текст с помощью шифра
перестановки с заданной таблицей подстановки:
1
2
…
N
N
N-1 N-2 …
1
3
т.е., не является ли текст палиндромом. (При шифровании убрать из исходного
текста все пробелы).
2.Написать алгоритм шифрования и дешифрования текста при помощи
шифра Цезаря со сдвигом, равным округленной средней длине слова.
3. Шифровать текст, разместив символы текста в квадрат необходимой
размерности по спирали от центра по часовой стрелке. Из квадрата выписать
символы по строкам. (При шифровании убрать из исходного текста все
пробелы).
Например, шифрограмма текста «personal computer» после удаления пробелов
будет выглядеть как
r o n
a
e s p
l
t r e
c
u p m o
Вариант 3
1. Написать алгоритм шифрования и дешифрования текста с помощью
шифра перестановки с заданной таблицей подстановки, применяемой к
каждому слову по отдельности.
1
2
…
N
N
N-1 N-2 …
1
3
2. Написать алгоритм шифрования и дешифрования текста при
помощи шифра Цезаря с переменным сдвигом, равным частному от деления
нацело номера буквы в тексте на 5.
3. Шифровать текст, разместив символы текста в квадрат необходимой
размерности
по спирали от центра против часовой стрелке. Из квадрата
выписать символы по строкам. (При шифровании убрать из исходного текста
все пробелы).
Например, шифрограмма текста «personal computer» после удаления пробелов
будет выглядеть как
r e t u
o s r p
n p e m
a l c o
Программные коды для Варианта 1.
Задание 1.
PROGRAM P1_1;
VAR TEXT,KRIPT,TEXT1:STRING;
{TEXT - VHODNOY TEXT}
{TEXT1 - TEXT BEZ PROBELOV}
{KRIPT - VYHODNOY TEXT}
N,I,M,R:INTEGER;
{R - REGIM,1 - SHIFROVANIYE, 2 - DESHIFROVANIYE}
BEGIN
WRITELN;
{VYBOR REGIMA}
REPEAT
WRITELN('VYBERITE REGIM:');
WRITELN(' 1.SHIFROVANIYE');
WRITELN(' 2.DESHIFROVANIYE');
READLN(R);
UNTIL ((R=1)OR(R=2));
{VVOD TEXTA}
IF R=1 THEN {SHIFROVANIYE}
WRITELN('VVEDITE TEXT')
ELSE {DESHIFROVANIYE}
WRITELN('VVEDITE KRIPTOGRAMMU');
READLN(TEXT);
N:=LENGTH(TEXT);{DLINA TEXTA}
M:=N MOD 3;
{DOPOLNYAEM PROBELAMI DO KRATNOGO 3M}
FOR I:=1 TO ((3-M) MOD 3) DO TEXT:=TEXT+' ';
N:=LENGTH(TEXT);
{SHIFROVANIYE/DESHIFROVANIYE}
KRIPT:='';
FOR I:=1 TO N DO
IF (I MOD 3)=1 THEN KRIPT:=KRIPT+TEXT[I+2]
ELSE IF (I MOD 3)=2 THEN KRIPT:=KRIPT+TEXT[I]
ELSE KRIPT:=KRIPT+TEXT[I-2];
{VYVOD REZULTATA}
IF R=1 THEN
WRITELN('KRIPTOGRAMMA:',KRIPT)
ELSE WRITELN('TEXT:',KRIPT);
END.
Задание 2.
PROGRAM P2_1;
VAR TEXT,TEXT1,KRIPT:STRING;
{TEXT - VHODNOY TEXT}
{KRIPT - VYHODNOY TEXT}
{TEXT1 - TEXT BEZ PROBELOV}
SDVIG,I,R,KOD:INTEGER;
{R-PARAMETR SHIFROVANIYE ILI DESHIFROVANIYE}
BEGIN
WRITELN;
{VYBOR REGIMA}
REPEAT
WRITELN('VYBERITE REGIM:');
WRITELN(' 1.SHIFROVANIYE');
WRITELN(' 2.DESHIFROVANIYE');
READLN(R);
UNTIL ((R=1)OR(R=2));
{VVOD TEXTA}
IF R=1 THEN {SHIFROVANIYE}
WRITELN('VVEDITE TEXT')
ELSE {DESHIFROVANIYE}
WRITELN('VVEDITE KRIPTOGRAMMU');
READLN(TEXT);
{UBIRAEM PROBELY}
TEXT1:='';
FOR I:=1 TO LENGTH(TEXT) DO
IF TEXT[I]<>' ' THEN TEXT1:=TEXT1+TEXT[I];
{SHIFROVANIYE/DESHIFROVANIYE}
KRIPT:='';
FOR I:=1 TO LENGTH(TEXT1) DO
BEGIN
{OPREDELENIYE SDVIGA}
CASE I MOD 3 OF
0:SDVIG:=1;
1:SDVIG:=3;
2:SDVIG:=2;
END;
IF R=1 THEN
KRIPT:=KRIPT+CHR(ORD(‘a’)+((ORD(TEXT1[I])+SDVIG- ORD(‘a’)) MOD
26))
ELSE BEGIN KOD:=ORD(TEXT1[I])-SDVIG;
IF KOD< ORD(‘a’) THEN KOD:=KOD+26;
KRIPT:=KRIPT+CHR(KOD);
END;
END;
{VYVOD REZULTATA}
IF R=1 THEN
WRITELN('KRIPTOGRAMMA:',KRIPT)
ELSE WRITELN('TEXT:',KRIPT);
END.
Задание 3.
var a:array[1..10,1..10] of char;
i,j,n,k,f,x:integer; s:string;
begin
readln(s);k:=0;
n:=round(sqrt(length(s))); x:=length(s);
for f:=1 to n div 2+1 do begin
i:=1+k;
for j:=1+k to n-k do begin a[i,j]:=s[x];x:=x-1 end;
j:=n-k;
for i:=2+k to n-k do begin a[i,j]:=s[x]; x:=x-1 end;
i:=n-k;
for j:=n-1-k downto 1+k do begin a[i,j]:=s[x]; x:=x-1 end;
j:=1+k;
for i:=n-1-k downto 2+k do begin a[i,j]:=s[x]; x:=x-1 end;
k:=k+1 end;
for i:=1 to n do begin
for j:=1 to n do write(a[i,j],' ');writeln end;
end.
Программные коды для Варианта 2.
Задание 1.
PROGRAM P1_2;
VAR TEXT,KRIPT,TEXT1:STRING;
{TEXT - VHODNOY TEXT}
{TEXT1 - TEXT BEZ PROBELOV}
{KRIPT - VYHODNOY TEXT}
N,I:INTEGER;
BEGIN
WRITELN;
{VVOD TEXTA}
WRITELN('VVEDITE TEXT');
READLN(TEXT);
N:=LENGTH(TEXT);
KRIPT:='';TEXT1:='';
FOR I:=1 TO N DO
BEGIN
IF TEXT[I]<>' ' THEN TEXT1:=TEXT1+TEXT[I];{UBIRAEM PROBELY}
IF TEXT[N-I+1]<>' ' THEN KRIPT:=KRIPT+TEXT[N-I+1]; {SHIFRUEM}
END;
{VYVOD KRIPTOGRAMMY}
WRITELN('KRIPTOGRAMMA: ',KRIPT);
IF TEXT1=KRIPT THEN WRITELN('TEXT - PALINDROM')
ELSE WRITELN('TEXT - NE PALINDROM');
END.
Задание 2.
PROGRAM P2_2;
VAR TEXT,TEXT1,KRIPT:STRING;
{TEXT - VHODNOY TEXT}
{KRIPT - VYHODNOY TEXT}
{TEXT1 - TEXT BEZ PROBELOV}
SDVIG,I,R,KOD,N:INTEGER;
{R-PARAMETR SHIFROVANIYE ILI DESHIFROVANIYE}
{N - CHISLO SLOV}
BEGIN
WRITELN;
{VYBOR REGIMA}
REPEAT
WRITELN('VYBERITE REGIM:');
WRITELN(' 1.SHIFROVANIYE');
WRITELN(' 2.DESHIFROVANIYE');
READLN(R);
UNTIL ((R=1)OR(R=2));
{VVOD TEXTA}
IF R=1 THEN {SHIFROVANIYE}
WRITELN('VVEDITE TEXT')
ELSE {DESHIFROVANIYE}
WRITELN('VVEDITE KRIPTOGRAMMU');
READLN(TEXT);
TEXT1:='';
N:=1;
{UBIRAEM PROBELY, SCHITAEM KOLICHESTVO SLOV }
FOR I:=1 TO LENGTH(TEXT) DO
IF TEXT[I]<>' ' THEN TEXT1:=TEXT1+TEXT[I]
ELSE N:=N+1;
{VYCHISLAYEM SDVIG}
SDVIG:=ROUND(LENGTH(TEXT1)/N);
{SHIFROVANIYE/DESHIFROVANIYE}
KRIPT:='';
FOR I:=1 TO LENGTH(TEXT1) DO
BEGIN
IF R=1 THEN KRIPT:=KRIPT+CHR(ORD(‘a’)+((ORD(TEXT1[I])+SDVIGORD(‘a’)) MOD 26))
ELSE BEGIN KOD:=ORD(TEXT1[I])-SDVIG;
IF KOD< ORD(‘a’) THEN KOD:=KOD+26;
KRIPT:=KRIPT+CHR(KOD);
END;
END;
{VYVOD REZULTATA}
IF R=1 THEN
WRITELN('KRIPTOGRAMMA:',KRIPT)
ELSE WRITELN('TEXT:',KRIPT);
END.
Задание 3.
var a:array[1..10,1..10] of char;
i,j,n,k,f,x:integer; s:string;
begin
readln(s);k:=0;
n:=round(sqrt(length(s))); x:=length(s);
for f:=1 to n div 2+1 do begin
j:=1+k;
for i:=1+k to n-k do begin a[i,j]:=s[x];x:=x-1 end;
i:=n-k;
for j:=2+k to n-k do begin a[i,j]:=s[x]; x:=x-1 end;
j:=n-k;
for i:=n-1-k downto 1+k do begin a[i,j]:=s[x]; x:=x-1 end;
i:=1+k;
for j:=n-1-k downto 2+k do begin a[i,j]:=s[x]; x:=x-1 end;
k:=k+1 end;
for i:=1 to n do begin
for j:=1 to n do write(a[i,j],' ');writeln end;
end.
Программные коды для Варианта 3.
Задание 1.
PROGRAM P1_3;
VAR TEXT,TEXT1,KRIPT,SLOVO:STRING;
{TEXT - VHODNOY TEXT}
{TEXT1 -VSPOMOGAT. PEREM}
{SLOVO - SLOVO ZASHIFROVANNOYE/DESHIFROVANNOYE}
{KRIPT - VYHODNOY TEXT}
N2,K,I,R:INTEGER;
{R - REGIM,1 - SHIFROVANIYE, 2 - DESHIFROVANIYE}
BEGIN
WRITELN;
{VYBOR REGIMA}
REPEAT
WRITELN('VYBERITE REGIM:');
WRITELN(' 1.SHIFROVANIYE');
WRITELN(' 2.DESHIFROVANIYE');
READLN(R);
UNTIL ((R=1)OR(R=2));
{VVOD TEXTA}
IF R=1 THEN {SHIFROVANIYE}
WRITELN('VVEDITE TEXT')
ELSE {DESHIFROVANIYE}
WRITELN('VVEDITE KRIPTOGRAMMU');
READLN(TEXT);
KRIPT:='';
TEXT1:=TEXT;
REPEAT
N2:=POS(' ',TEXT1); {NAHODIM VHOGDENIYE PROBELA - KONEC
SLOVA}
IF N2=0 THEN N2:=LENGTH(TEXT1)+1;
SLOVO:='';
FOR I:=N2-1 DOWNTO 1 DO SLOVO:=SLOVO+TEXT1[I];
KRIPT:=KRIPT+SLOVO+' ';
TEXT1:=COPY(TEXT1,N2+1,LENGTH(TEXT1)-N2);
{IZ
UDALYAEM UGE
ZASHIFROVANNOYE SLOVO}
UNTIL TEXT1='';
{VYVOD REZULTATA}
IF R=1 THEN
WRITELN('KRIPTOGRAMMA:',KRIPT)
ELSE WRITELN('TEXT:',KRIPT);
END.
Задание 2.
PROGRAM P2_3;
VAR TEXT,TEXT1,KRIPT:STRING;
{TEXT - VHODNOY TEXT}
{KRIPT - VYHODNOY TEXT}
{TEXT1 - TEXT BEZ PROBELOV}
SDVIG,I,R,KOD:INTEGER;
{R-PARAMETR SHIFROVANIYE ILI DESHIFROVANIYE}
TEXT1
BEGIN
WRITELN;
{VYBOR REGIMA}
REPEAT
WRITELN('VYBERITE REGIM:');
WRITELN(' 1.SHIFROVANIYE');
WRITELN(' 2.DESHIFROVANIYE');
READLN(R);
UNTIL ((R=1)OR(R=2));
{VVOD TEXTA}
IF R=1 THEN {SHIFROVANIYE}
WRITELN('VVEDITE TEXT')
ELSE {DESHIFROVANIYE}
WRITELN('VVEDITE KRIPTOGRAMMU');
READLN(TEXT);
{UBIRAEM PROBELY}
TEXT1:='';
FOR I:=1 TO LENGTH(TEXT) DO
IF TEXT[I]<>' ' THEN TEXT1:=TEXT1+TEXT[I];
{SHIFROVANIYE/DESHIFROVANIYE}
KRIPT:='';
FOR I:=1 TO LENGTH(TEXT1) DO
BEGIN
SDVIG:=I MOD 5; {VYCHISLYAEM SDVIG}
IF R=1 THEN
KRIPT:=KRIPT+CHR(ORD(‘a’)+((ORD(TEXT1[I])+SDVIG- ORD(‘a’)) MOD
26))
ELSE BEGIN KOD:=ORD(TEXT1[I])-SDVIG;
IF KOD< ORD(‘a’) THEN KOD:=KOD+26;
KRIPT:=KRIPT+CHR(KOD);
END;
END;
{VYVOD REZULTATA}
IF R=1 THEN
WRITELN('KRIPTOGRAMMA:',KRIPT)
ELSE WRITELN('TEXT:',KRIPT);
END.
Задание 3.
var a:array[1..10,1..10] of char;
i,j,n,k,f,x:integer; s:string;
begin
readln(s);k:=0;
n:=round(sqrt(length(s))); x:=length(s);
for f:=1 to n div 2+1 do begin
i:=1+k;
for j:=1+k to n-k do begin a[i,j]:=s[x];x:=x-1 end;
j:=n-k;
for i:=2+k to n-k do begin a[i,j]:=s[x]; x:=x-1 end;
i:=n-k;
for j:=n-1-k downto 1+k do begin a[i,j]:=s[x]; x:=x-1 end;
j:=1+k;
for i:=n-1-k downto 2+k do begin a[i,j]:=s[x]; x:=x-1 end;
k:=k+1 end;
for i:=1 to n do begin
for j:=1 to n do write(a[i,j],' ');writeln end;
end.
Дополнительные задания
1. Во время поездки на автобусе пассажир заменил в названии
маршрута каждую букву ее номером в русском алфавите и получил запись из
единиц и двоек «211221-21221». Определить, откуда и куда едет автобус.
Список городов прилагается: Баку, Москва, Муром, Орел, Курск, Киев, Уфа,
Тверь, Тула.
2. Перевертыш. Написать программу для считывания отрывка из
текста, переведя его на язык Перевертыша и печати переведенного варианта по
правилу: буквы, стоящие до первой гласной, передвигаются в конец слова и к
вновь образованному слову добавляется окончание «циус».
Пример: кот в сапогах - откциус вциус апогахциус
3. Дешифровка. Дана последовательность целых чисел. Затем все
элементы были изменены следующим образом: каждый элемент получил новое
значение, равное количеству чисел в исходной последовательности, стоящих
правее этого элемента и превышающих его значение. Восстановить
эту
последовательность.
4. Дан
текст,
Восстановить текст.
слова
которого
перевернуты
задом
наперед.
Download