Проект. Современные способы кодирования информации в вычислительной технике
Скачать 398.49 Kb.
|
Индивидуальный проект Тема: «Современные способы кодирования информации в вычислительной технике» Выполнил: Кислый Иван, студент группы СА21-2К Руководитель: Шевченко Полина Сергеевна Калининград 2023 СодержаниеВведение 3 Криптография 5 Шифр Цезаря 7 Написание программы 8 Шифрование сообщения 12 Расшифровывание сообщения 14 Заключение 15 Источники 16 ВведениеКодирование – это преобразование первоначального сообщения в совокупность или последовательность кодовых символов, отображающих сообщение, передаваемое по каналу связи. Кодирование может пригодиться, если о передаваемой информации должен знать только отправитель и получатель. Идея использования лишь двух символов для кодирования информации стара как мир. Барабаны, которыми пользуются некоторые племена африканских бушменов, передают сообщения в виде комбинаций звонких и глухих ударов. Другой, более современный пример двухсимвольного кодирования – азбука Морзе, в которой буквы алфавита представлены определенными сочетаниями точек и тире. А в наше время часто используется шифрование публичным ключом. Актуальность данной работы заключается в том, что в наше время шифрование очень важная вещь, ведь без него информацию передаваемую между двумя пользователями может узнать кто хочет, что не только не приятно, а даже опасно, если это какая-то личная информация, а если информация передаваемая незащищённым путём является государственной тайной, то человек, перехвативший её может оказать сильное влияние на государство, например путём её разглашения. Цель - Написать программу для кодирования информации с использованием собственного способа кодирования Задачи: Изучить что такое криптография Изучить современный способ кодирования информации - шифрование публичным ключом. Изучить простой, но популярный и быстрый - шифр Цезаря Написать программу для кодирования информации основанную на шифре Цезаря. С помощью программы получить зашифрованное сообщение. С помощью программы расшифровать полученное сообщение. КриптографияКриптография – наука, которая изучает методы кодирования информации для обеспечения конфиденциальности. Изначально криптография изучала методы шифрования информации – обратимо преобразования открытого текста на основе секретного алгоритма в шифрованный текст. Криптография существует уже около 4 тыс. лет. На данный момент существует пять периодов развития криптографии: Первый период (с 3-го тысячелетия до н.э.): Появление моноалфавитных шифров, в основе которых замена алфавита исходного текста другим алфавитом через замену букв другими буквами или символами. Второй период (с IX века на Ближнем Востоке и с XV в Европе – до начала XX века.) введение в использование полиалфавитных шифров, суть которых в многократном применении нескольких моноалфавитных шифров к определённому числу букв шифруемого текста. Третий период (с начала и до середины XX века) – внедрение электромеханических устройств в работу шифровальщиков. Четвёртый период (с середины до 70-х годов XX века) – переход к математической криптографии. В работе Шеннона зараждаются строгие математические определения количества информации, передачи данных, функций шифрования. Обязательный этап создания шифра – изучение его уязвимостей для различных атак (линейного и дифференциального криптоанализа) Современный период (с конца 1970-х годов по наше время) появление и развитие нового направления – криптография с открытым ключом. Её появление выражается широким распространением криптографии для использования частными лицами.[1][9] Шифрование публичным ключом Шифрование публичным ключом – алгоритм шифрования, применяющийся сегодня буквально во всех компьютерных системах. Есть два ключа: открытый и секретный. Открытый ключ — это большое число, имеющее только два делителя, помимо единицы и самого себя. Эти два делителя являются секретным ключом, и при перемножении дают публичный ключ. Например, публичный ключ – это 5123, а секретный – 47 и 109.[3] Открытый ключ используется, чтобы зашифровать сообщение, а секретный — чтобы расшифровать. Если необходимо передать зашифрованное сообщение владельцу ключей, то отправитель должен получить открытый ключ. Отправитель шифрует свое сообщение открытым ключом получателя и передает его получателю (владельцу ключей) по открытым каналам. При этом расшифровать сообщение не может никто, кроме владельца закрытого ключа.[4] Рис.1 Схема шифрование публичным путём. [4] Шифр ЦезаряШифр Цезаря, также известный как шифр с элементами сдвига – один из самых простых и известных методов шифрования. Шифр цезаря – вид шифра, в котором каждый символ заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите. Назван шифр в честь римского полководца Гая Юлия Цезаря, использовавшего его для секретной переписки со своими генералами. Шаг смещения, используемый в шифре Цезаря, также встречается и в других, более сложных шифрах, например в шифре Вижера. [5] По сложности шифр Цезаря является очень лёгким, ведь для того, чтобы узнать что находится в закодированном сообщении необязательно иметь ключ шифрования (или шаг сдвига), так как его можно узнать грубым методом подбора (всего 26 возможных шагов сдвига для английского языка или 33 для русского). Чтобы узнать, что закодировано шифром цезаря достаточно просто выписать текст в столбец всех возможных сдвигов. Например: У нас есть закодированное сообщение “Ebiil tloia”, мы можем взять отрывок или одно слово из данного сообщения например “Ebiil”, и сдвинуть все буквы на один символ и получим “Fcjjm”, что не похоже на искомое нами сообщение, так что мы продолжаем, и сдвигаем буквы на ещё один символ и видим “Gdkkn”, что так же не является осмысленным текстом, при ещё одном сдвиге мы получим слово “Hello”, что как раз и является искомым нами отрывком. Исходя из этого мы узнали шаг смещения (4 в данном сообщении), так что узнать остальное сообщение не составит труда, так как нам известна вся информация для его дешифровки (искомое сообщение “Hello world”). Именно из-за настолько лёгкого способа расшифровки шифра, он не используется в наше время на практике. Написание программыТак как шифр Цезаря довольно прост в понимании, я решил создать программу именно на его основе. Для создания программы нам необходимо изучить: Циклы While, if, for Исключения try Ввод данных с помощью input и int(input) Функции сложения вычитания Перевод данных из строчных букв в заглавные[2] Функция print, time.sleep и clear[7] Метод .join В начале программы мы делаем импорт функций time и os в программу. Далее мы создаём цикл While, чтобы можно было вернуться к началу программы при её завершении и спрашиваем пользователя какой язык он хочет использовать, от чего далее будет зависеть алфавит используемый для кодирования. После того как мы узнали какой алфавит хочет использовать пользователь(или в случае с алфавитом отличным от русского и английского просим у пользователя ввести алфавит, удаляем все лишние символы и возводим алфавит в заглавные буквы), мы спрашиваем хочет ли пользователь закодировать сообщение, или наоборот декодировать. Последнее, что осталось узнать от пользователя это шаг смещения и сообщение. После того как мы получим всю нужную информацию, мы для каждой буквы находим её место в алфавите, а далее прибавляем к полученному числу шаг смещения, получая число, подставив которое в алфавите получаем закодированную букву, по завершению этих действий мы получаем закодированный текст, очищаем окно вывода данных, и выводим текст пользователю с помощью функции print, по истечению 2 секунд перезапускаем программу. Если пользователь выбрал не шифрование, а расшифровывание сообщения, то выполняются такие же алгоритмы, но при этом в начале цикла расшифровывания алфавит разворачивается с помощью параметра [::-1], после добавления которого должна получиться строчка «alphabet = alphabet[::-1]»[8] В случае же, если на любом шаге, который запрашивает число, пользователь введём любой другой символ, то мы сообщим пользователю, что он ввёл не число, из-за чего программа будет перезапущена. После чего с помощью time.sleep(1) дадим время на прочтение данного сообщения и очистим окно вывода, при этом запуская цикл while заново.[10][6] Шифрование сообщенияЗапускаем программу, и видим окно вывода данных с просьбой выбрать язык, на выбор есть английский, русский, и другой язык (в котором нужно ввести все буквы алфавита из желаемого языка (работает только с языками, в которых одна буква является одним символом)). Для теста мы выбрали русский язык, после чего программа спрашивает какую функцию мы хотим использовать: шифрование или расшифровывание. Для начала мы шифруем сообщение. Выбираем шаг смещения, например: 14. Пишем сообщение, которое хотим закодировать, в качестве примера можно взять: ”Привет как дела”. После того как мы ввели сообщение программа очищает окно вывода, выдает закодированное сообщение, а также перезапускается по истечению 2 секунд. Расшифровывание сообщенияЧтобы расшифровать сообщение нам нужно также запустить программу, выбрать язык, который мы выбирали при кодировании, но на этот раз выбрать не шифрование, а расшифровывание. Далее выбираем тот же самый шаг смещения и вводим сообщение, которое указывали, когда кодировали сообщение. После чего мы получаем первоначальное сообщение. ЗаключениеВ ходе данной работы, мы изучили способы кодирования информации в современной технике, где они используются. Узнали о таких способах кодирования, как шифр Цезаря и шифрование открытым ключом, и как они и другие способы зарождались. Написали программу на основе шифра цезаря, которая способна кодировать и декодировать информацию, проверили её работоспособность. ИсточникиСпособы кодирования информации // URL: 900igr.net Команды для создания программы на Python // URL: docs.python.org Ассиметричное шифрование // URL: encyclopedia.kaspersky.ru Шифрование открытым ключом // URL: infourok.ru Основы кодирования сообщений // URL: miigaik.ru Решения проблем связанных с Python // URL: progi.pro Пользовательские команды для Python // URL: pythonpip.ru Конструкции для Python // URL: pythonworld.ru Способы кодирования информации // URL: ru.wikipedia.org Пользовательские команды для Python // URL: stackoverflow.com |