Разработка программы скрытия и извлечения информации в PDF-файлах

rest api интерфейс: https://pdf-encoder.herokuapp.com/api/

Главный экран программы: https://pdf-encoder.herokuapp.com/

Введение

Цель работы: разработка программы скрытия и извлечения информации в PDF-файлах.

  • возможность выбора файла-контейнера;
  • возможность выбора файла-сообщения произвольного типа или ввода текста скрываемого сообщения;
  • контроль возможности скрытия сообщения в контейнере;
  • возможность шифровать/расшифровывать внедряемое/извлекаемое сообщение на ключе, выводимом из парольной фразы;
  • возможность определять при расшифровании извлекаемых из контейнера данных факт ввода неверной парольной фразы.

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

Для достижения поставленной цели необходимо:

  • Выбрать способ обработки pdf документа
  • Выбрать способ скрытия сообщения
  • Реализовать пользовательский интерфейс

Глава 1

Описание алгоритма

В формате PDF присутствуют 8 основных типов данных:

  • Логический
  • Целочисленный
  • Число с плавающей запятой
  • Строка
  • Имя
  • Массив
  • Словарь
  • Поток

Словарь использует в качестве ключей тип Имя, а значение может быть любым объектом, включая Потоки данных.

Алгоритм скрытия данных:

  1. Генерируется ключ на основе парольной фразы
  2. Если в контейнере присутствует сообщение с таким ключом, то оно удаляется из контейнера
  3. Выбирается случайная страница в документе
  4. Если на этой странице найден словарь “Contents” , то данные записываются в этот словарь, иначе данные будут записаны прямо в страницу. В качестве ключа используется ключ из 1 пункта, значение – поток из скрываемых данных. Алгоритм извлечения данных:
  5. Генерируется ключ на основе парольной фразы
  6. Анализируется каждая страница на наличие в ней или в “Contents” полученного ключа, если такой ключ найден, то извлекается соответствующее ему значение.
  7. Если значение – это поток, то данные извлечены успешно

Глава 2

Структура программы

Разработанная программа - веб-приложение с rest api интерфейсом и простым клиентом на html. Приложение построено по шаблону проектирования MVC. Для шифрования используется Blowfish – симметричный блочный алгоритм шифрования. Блок 64 бит, ключ переменной длины от 32 до 448 бит. Для работы с PDF файлами применяется библиотека iText7 [3].