НОВОСТИ   БИБЛИОТЕКА   ЮМОР   КАРТА САЙТА   ССЫЛКИ   О САЙТЕ  




предыдущая главасодержаниеследующая глава

§ 27. Использование эвм для шифровки и дешифровки сообщении

...умею ли я находить с помощью электронно-вычислительной машины значения функций, а также объемы многогранников?!

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

Все делается просто. Некто, скажем, Юстас, пишет секретный текст, скажем, Алексу. После этого шифровальщик заменит каждый символ текста на номер этого символа в ключевой фразе. Получившийся набор чисел передается шифровальщику Алекса, который с помощью той же ключевой фразы дешифрует сообщение.

Как видите, работа шифровальщиков - чисто автоматическая. Значит, ее можно поручить ЭВМ. К тому же, как известно, профессионалы стремятся уменьшить количество людей, знающих ключевую фразу. Итак,

Задача. Составить программы шифровки и дешифровки текстов с помощью ключевой фразы.

Шифровка и дешифровка текстов
Шифровка и дешифровка текстов

Сначала составим программу шифровки текстов. Машина должна запросить ключевую фразу и секретный текст. Затем, просматривая секретный текст, ЭВМ должна сообщать код каждой буквы (то есть номер этой буквы в ключевой фразе). На рисунке 43 показана соответствующая блок-схема.

В детализации нуждается лишь блок поиска кода i-гo символа. Будем предполагать, что у нас уже есть подпрограмма "КОДИРОВАНИЕ БУКВЬЬ, реализующая этот блок и начинающаяся со строки 500. Аргументами ее служат символ Р¤, код которого требуется найти, и ключевая фраза А¤. Результат - код С символа Р¤.

Рис. 43. Блок-схема
Рис. 43. Блок-схема

Запишем основную программу:

 5 PRINT "ПРОГРАММА ШИФРОВКИ ТЕКСТОВ" 
 10 PRINT "ВВЕДИТЕ КЛЮЧЕВУЮ ФРАЗУ" 
 20 INPUT А¤ 
 30 PRINT "ВВЕДИТЕ СЕКРЕТНЫЙ ТЕКСТ" 
 40 INPUT В¤ 
 50 FOR I = 1 ТО LEN(B¤) 
 60 Р¤ = МID¤ (В¤, 1, 1) 
 70 GOSUB 500 
 80 PRINT С 
 90 NEXT I 
 100 PRINT "ШИФРОВКА ЗАКОНЧЕНА" 
 110 STOP

Составим теперь подпрограмму "КОДИРОВАНИЕ БУКВЫ", предназначенную для определения номера позиции, которую занимает символ Р¤. Вдумчивый ученик должен спросить: а как быть, если символ встречается в ключевой фразе несколько раз? Например, в нашей ключевой фразе буква "а" стоит на 15, 60, 68, 83, 86 и 105-й позициях. Получается, что один символ может быть закодирован несколькими числами. Договоримся для простоты в качестве символа брать наименьшее из этих чисел (так, буква "а" имеет код 15).

ЭВМ в роли шифровальщика должна просматривать ключевую фразу слева направо, разыскивая символ - значение переменной Рн . Найдя его, она должна присвоить переменной С номер соответствующей позиции и закончить просмотр.

При поиске кода символа естественно воспользоваться циклом "Для каждого":

 500 REM ПОДПРОГРАММА КОДИРОВАНИЯ БУКВЫ, 
 АРГУМЕНТЫ: СИМВОЛ Р¤, КЛЮЧЕВАЯ ФРАЗА А¤ 
 РЕЗУЛЬТАТ: С (НОМЕР СИМВОЛА РН В СЛОВЕ А¤). 
 510 FOR J = l TO LEN(A¤) 
 520 IF MID ¤(A¤, J, 1)<>P¤ THEN 540 
 530 C = J 
 540 NEXT J 
 550 RETURN

А теперь проверьте, какой код получит буква "а" после работы этой подпрограммы... Увы, получилось 105, а вовсе не 15. В чем же дело? Дело в том, что ЭВМ, вопреки нашему соглашению, продолжает просматривать ключевую фразу и после того, как нашла букву "а". Поэтому переменной С присваивается номер не первой, а последней позиции буквы "а". Чтобы этого не происходило, надо прекращать выполнение цикла, как только нужный символ будет найден. Можно поступить так: сразу после первого присваивания переменной С значения J (строка 530) сделать значение счетчика цикла равным верхней границе цикла, т. е. числу LEN (A¤). Исправим нашу подпрограмму:

 500 REM ПОДПРОГРАММА КОДИРОВАНИЯ БУКВЫ. 
 АРГУМЕНТЫ: СИМВОЛ Р¤, КЛЮЧЕВАЯ ФРАЗА А¤ 
 РЕЗУЛЬТАТ: С (НОМЕР СИМВОЛА Р¤ В СЛОВЕ А¤) 
 510 FOR J = 1 TO LEN(A¤) 
 520 IF MID¤(A¤, J, l)<>P¤ THEN 540 
 530 C = J 
 535 J = LEN(A¤) 
 540 NEXT J 
 550 RETURN

Займемся теперь дешифровкой. ЭВМ опять должна запросить ключевую фразу. Затем, запрашивая последовательно числа, кодирующие символы зашифрованного сообщения, она составит из соответствующих символов исходный текст. Например, расшифруем сообщение

61 10 75 38 17 44 36 15

и запишем его в символьную переменную B¤. Сначала переменной В¤ присвоим пустое слово. Затем берем 61-й символ ключевой фразы (это буква "ш") и добавляем его к В¤. После этого допишем к В¤ последовательно 10, 75, 38, 17, 44, 36 и 15-й символы ключевой фразы. Получим слово "шифровка".

Кажется, все ясно и можно приступать к составлению программы. Но это только кажется. Ведь в разобранном примере мы видели шифрованное сообщение целиком и легко могли определить, когда кончать расшифровку. Трудность состоит в том, что ЭВМ будет воспринимать шифровку число за числом. Она не в состоянии определить, ждать ей от нас еще коды символов или сообщать расшифрованную фразу. Значит, надо договориться о том, как машина будет обнаруживать окончание шифрованного сообщения. Закончив шифровку, введем число 0. Договоримся, что ЭВМ будет воспринимать его как сигнал об окончании сообщения.

Как и раньше, будем считать, что ключевая фраза "хранится" в переменной A¤ дешифрованное сообщение "накапливается" в переменной В¤ (вспомните, что переменные - это своего рода ящики для хранения данных).

Итак, ЭВМ должна сначала запросить ключевую фразу. Затем она должна запрашивать по порядку числа шифровки, каждый раз проверяя, не поступило ли число 0, и, если нет, приписывать к символьной переменной B¤ очередной символ. Получив число 0, ЭВМ должна сообщить окончательное значение В¤, которое и будет результатом дешифровки.

Блок-схема дешифровки изображена на рисунке 44. Разберитесь в ней и напишите самостоятельно программу.

Рис. 44. Блок-схема дешифровки
Рис. 44. Блок-схема дешифровки

Задания для самостоятельного выполнения

1. а) Придумайте свою ключевую фразу;

б) Зашифруйте с помощью своей ключевой фразы следующее сообщение:

юстас - алексу. дорогой алекс! я нахожусь под колпаком, искренне ваш юстас.

2. Один из методов шифровки сообщений состоит в том, что после каждого символа вставляется некоторая буква (каждый раз, вообще говоря, разная). Например, из фразы

я изучаю информатику

может получиться фраза

яэ ииызхукччаяюю риннпфыовртмвактхидкфуф.

а) Расшифруйте зашифрованную таким способом фразу:

як аллюрболлюр ухтэйвоир омлеттсакля!!

б) Составьте программу шифровки таким способом произвольного текста, используя для вставок одну и ту же букву;

в*) Составьте программу шифровки тем же способом, выбирая для каждой вставки букву случайным образом; г) Составьте программу дешифровки сообщений.

3. Иногда хочется что-то сказать, но так, чтобы никто не понял. Лучше всего в таких случаях пользоваться специальным шифром: произносить слова задом наперед. Например, слово "пылесос" произносится так: "соселып", а фраза "я ничего не смыслю в кулинарии" произносится так: "я огечин ен юлсымс в ииранилук". Составьте программы шифровки таким методом:

а) слов русского языка;

б*) предложений русского языка. Убедитесь в том, что эти же программы годятся и для дешифровки.

4. Очень легко переводить с русского языка на тарабарский: надо каждую глухую согласную заменять соответствующей звонкой согласной и наоборот. Например, фраза:

 Сегодня - школьник, завтра - академик

на тарабарском звучит так:

 Зекотня - жгольниг, сафдра - агатемиг.

Составьте программу перевода с русского языка на тарабарский. (Указание: воспользуйтесь решением задачи 7 к предыдущему параграфу.)

5*. Предлагается следующий метод шифровки сообщений на русском языке (метод сдвига). Выбирается целое число k от 1 до 32. Буквы русского алфавита записываются вдоль окружности по часовой стрелке (так, что буква "а" соседствует с буквами "б" и "я"). Затем в сообщении каждая буква заменяется на букву, отстоящую от нее на k букв по часовой стрелке. Знаки препинания и пробел не меняются. Например, если k = 3, то "а" заменится на "г", "ц" на "ь", "ю" на "б", а фраза "ученье - свет, неученье - тьма" превратится в "цьирэи - феих, рицьирэи - хэпг". Составить программу шифровки и дешифровки методом сдвига.

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


6. В памяти ЭВМ "Ямаха" каждый символ кодируется восемью нулями и единицами. Приведем коды некоторых символов:

 А - 11100001, 
 Б - 11100010, 
 Ц - 11100011, 
 Д - 11100100, 
 Е - 11100101.

Составьте программу кодирования слов, составленных из перечисленных символов.

предыдущая главасодержаниеследующая глава








© Злыгостев А.С., 2001-2019
При использовании материалов сайта активная ссылка обязательна:
http://informaticslib.ru/ 'Библиотека по информатике'
Рейтинг@Mail.ru
Поможем с курсовой, контрольной, дипломной
1500+ квалифицированных специалистов готовы вам помочь