JavaRush /Курсы /Модуль 1. Java Syntax /Задание на итоговый проект модуля 1

Задание на итоговый проект модуля 1

Модуль 1. Java Syntax
28 уровень , 1 лекция
Открыта

Криптология, криптография и криптоанализ

Приступим к разбору теории, которая понадобится тебе при написании итогового проекта. Давай узнаем больше о криптологии и ее составляющих. А заодно — больше о шифре, который ты будешь использовать при написании итогового практического проекта.

1. Криптология и ее составляющие

Криптология — это область знаний, которая включает в себя:

  • Криптографию (науку о шифрах).

    Предмет изучения криптографии — шифрование информации для ее защиты от несанкционированного доступа. Такой информацией может быть текст, цифровое изображение, звуковой сигнал и т.д. При шифровании образуется зашифрованная версия информации (данных), которую называют шифротекстом, закрытым текстом, криптограммой.

  • Криптоанализ (методы раскрытия этих шифров).

    Криптоанализ изучает методы вскрытия шифров и способы их применения. То есть, выполняет обратную задачу: изучает способы превратить шифрованную информацию в открытую.

2. Криптографический ключ

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

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

Разновидности криптографических ключей:

  1. Симметричные (секретные). Их используют в алгоритмах симметричного типа. Основное назначение — обратное или прямое криптографическое преобразование (шифрование/дешифрование, проверка кода аутентификации сообщения).

  2. Ассиметричные. Применяются в в шифровальных алгоритмах асимметрического типа (например, при проверке электронной цифровой подписи).

Мы будем работать с симметричным алгоритмом шифрования, поэтому не будем вдаваться в лишние подробности.

3. Алфавит в криптографии

Алфавит — это законченное множество символов, которые используют для кодирования информации символов.

4. Подходы к криптоанализу

Существует много разных подходов и методов к криптоанализу (взлому шифров).

Опишем самые простые из них:

  1. Brute force (брутфорс, поиск грубой силой) — перебор ключей, который выполняется до того момента, пока не найдем подходящий. Плюс метода состоит в простоте, минус — в том, что он не подходит для шифров, которые используют большое количество возможных ключей.

  2. Криптоанализ на основе статистических данных — при таком подходе собирается статистика по вхождению разных символов в зашифрованном тексте, а потом для их расшифровки используются статистические данные о частоте вхождения в открытый текст разных символов.

    Например: мы знаем, что использование буквы “П” в текстах составляет 8%. Анализируя зашифрованный текст, мы ищем символ, который встречается в процентном соотношении такое же количество раз и делаем вывод, что это буква “П”.

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

5. Шифр Цезаря

Это один из самых простых и известных методов шифрования. Назвали его, само собой, в честь императора Гая Юлия Цезаря, применявшего его для секретной переписки с генералами.

Шифр Цезаря — это шифр подстановки: в нем каждый символ в открытом тексте заменяют на символ, который находится на некотором постоянном числе позиций левее или правее него в алфавите.

Допустим, мы устанавливаем сдвиг на 3. В таком случае А заменится на Г, Б станет Д, и так далее.

Это минимум теоретических данных, которые понадобятся тебе для выполнения итогового проекта. Переходим к описанию задания!

Можно почитать лекцию CS50

Итоговый проект к модулю Java Syntax. Пишем криптоанализатор

Задача: написать программу, которая работает с шифром Цезаря.

За основу криптографического алфавита возьми все буквы русского алфавита и знаки пунктуации (. , ”” : - ! ? ПРОБЕЛ). Если попадаются символы, которые не входят в наш криптографический алфавит, просто пропусти их.

Обязательные требования

У программы должно быть 2 режима:

  1. Шифрование / расшифровка. Программа должна зашифровывать и расшифровывать текст, используя заданный криптографический ключ.

    Программа должна получать путь к текстовому файлу с исходным текстом и на его основе создавать файл с зашифрованным текстом.

  2. Криптоанализ методом brute force

    Программа должна взламывать зашифрованный текст, переданный в виде текстового файла.

    Если пользователь выбирает brute force (брутфорс, поиск грубой силой), программа должна самостоятельно, путем перебора, подобрать ключ и расшифровать текст.

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

Дополнительные требования(опционально)

1. Криптоанализ методом статистического анализа

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

2. User Interface

Все диалоговые окна с пользователем делай на свое усмотрение. При желании можно использовать графические фреймворки Swing, JavaFX.

Готовое решение загрузи в публичный Git-репозиторий.

Проект проверяется во время прохождения его группой

Комментарии (14)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Индис Уровень 66 Expert
27 января 2023
Кто выполнял задание, в каких кодировках делали? utf-16? И алфавит делали с заглавными буквами? скажем в utf-16 буквы: А = '0410' и а = '\u0430'. Стоит это учитывать? Проблема в utf-8 именно при считывании файла, который тоже utf-8, и вывод его в консоль. Просто в консоль sout("Че угодно") работает нормально.
Виктория Уровень 111
31 января 2023
ASCII
Индис Уровень 66 Expert
31 января 2023
Разобрался. В utf8, необходимо понимать, что когда начинаем работать с символами например кириллицы, то на символ уходит 2 байта. Поэтому в данном случае, лучше работать с char методами, которая эти ньюансы учитывает.
Константин Уровень 100 Expert
14 мая 2022
Добрый вечер, как успехи, ребята?)
Дмитрий Уровень 43
14 мая 2022
потеем
Val Kononoff Уровень 49 Expert
12 мая 2022
(от греч. kryptos - тайный и grapho - пишу) тайнопись.
Nikita Shamrai Уровень 8 Expert
20 марта 2022
Я не понимаю, знаки пунктуации (. , ”” : - ! ? ПРОБЕЛ). - тоже нужно смещать на N-ое кол-во символов или они должны остаться неизменными? Если смещать то по какому принципу??
Сергей Уровень 111 Expert
20 июня 2022
Разобрался?:)
Nikita Shamrai Уровень 8 Expert
20 августа 2022
Да, смещал и знаки пунктуации тоже.
Сергей Уровень 111 Expert
24 августа 2022
Да уже понятно, я второй проект пытаюсь делать, первый реально прям легче чем второй...
Роман Уровень 29
16 марта 2022
Задачу со звездочкой про Криптоанализ на основе статистических данных мне кажется необходимо как минимум ограничение по обьему ввести, т.к. этот метод будет работать только на больших текстах
Anton Nikolaev Уровень 108 Expert
22 февраля 2022
Разбудите меня, когда начнем его писать😅
Sergey Drogunov Уровень 111 Expert
25 марта 2022
Чучуть опоздал)) Идем дальше)
Anton Nikolaev Уровень 108 Expert
26 марта 2022
Поздравляю с окончанием!