Доклад
ss1 слайд
Темой своего проекта я выбрал "Стеганография в wav файлах".
2 слайд
Целью же проекта являлось создание программы, которая позволила бы автоматизировать стеганографическую запись в файлы звукового содержания расширения .wav. Данный формат был выбран из-за его удобной структуры, которая позволяет совершить скрытую запись в файл с данным расширением, в отличие от более популярного .mp3. Из минусов .wav файла можно отметить только его чересчур (по сравнению с тем же .mp3) большой вес. Например, .mp3 файл весом в 5,80 МБ конвертированный в .wav будет весить более 25 МБ, что и позволяет распоряжаться большим пространством для записи.
К слову стоит уточнить что вообще есть такое "Стеганография". Это, как точно и коротко дает определение Википедия, способ передачи или хранения информации с учетом сохранения в тайне самого факта такой передачи (хранения). Ну в нашем случае эта информация будет хранится в аудио файле.
3 слайд
Немного пройдусь по самой структуре WAV файла. Весь WAV файл можно разделить на две области. Первая из них это хейдера т.е. заголовки файла, а другая это область данных.
Первая область представляет из себя стандартную RIFF-структуру, которая группирует содержимое файла из отдельных чанков (секций) и занимает всего 44 байта.
Вторая область грубо говоря содержит сами звуки, которые воспроизводяться при прослушивании.
На слайде представлена сама структура в виде таблицы. Последнее поле "data" и является областью данных, в которой хранятся звуки. Именно с ней и работает моя программа. Но об этом чуть позже.
Если перевести всю эту табличку на более понятный для обычного человека язык, то из заголовков WAV файла мы получим:
* Размер файла
* Количество каналов
* Частота дискретизации.
* Количество бит в сэмпле (эту величину еще называют глубиной звучания)
Ну и соответственно саму область данных.
4 слайд
Теперь о самом методе записи. В интернете их нашлось крайне мало и они были весьма сложны по реализации и все которые переводились на язык программирования в основном переводились на c++/c. Ну а моя программа написана на c#. В общем годных алгоритмов в интернете я не нашел, поэтому решил воспользоваться старым алгоритмом, по которому записывал текст в картинки. Рассказывать его сейчас не буду т.к. в него достаточно долго вникать. Я попытался нормально описать его в своем реферате.
Итак, при создании алгоритма мной должны были быть соблюдены следующие требования:
* Должен быть простым и линейным (не обязательно, но в моем случае этого хватит).
* Не должен портить само звучание файла.
* Не должен прибавлять ни байта к весу файла.
* Должен обеспечивать защиту от обнаружения скрытой информации.
* Не должен взаимодействовать с заголовками.
*click*
В чем заключается сам алгоритм:
- Текст переводится в бинарный код
- Бинарный код по битам записывается в область данных
- Создается новый файл, в который записываются старые заголовки и новая область данных.
Т.е. на 1 бит будет приходится 10 000 кб.
Алгоритм считывания:
- Цикл собирает биты по 8 штук
- Если из восьми собранных бит не получилось 00000000 (восемь нулей), то отправляет эти восемь бит в общую кучу, иначе прекращает работу цикла.
- Переводит бинарный код в текст
- Выводит текст в программу.
И к слову про третий пункт, путем недолгих размышлений и тестирований был выбран промежуток в 10 000 кб. Это минимальная дистанция при которой звуки не искажаются. Т.е. на один бит придется 10 000 байт.
Но возникает еще одна проблема. Программе нужен флаг, который бы сигнализировал о том, что пора прекращать считывать данные. Таковым был выбран символ NOP состоящий из 8 нулей. То есть когда программа при считывании текста из файла встретит этот символ она остановится в считывании и выведет текст.
И составление алгоритма наверное было самым сложным в процессе создания. Само написание кода не вызвало никаких трудностей.
5 слайд
Сейчас на слайде представлены классы из программы. Я бы с удовольствием подробно объяснил как что тут работает, но боюсь что это затянется на минут 10, поэтому увы я могу лишь показать вам этот код. Если кто-то что-то поймет, то я буду рад, если же нет, то я не растроюсь.
6 слайд.
Вот что получилось в конечном результате. Кнопка с троеточием открывает сам файл для записи или считывания. Кнопка Read считывает из файла текст, если он конечно был записан, а кнопка write записывает текст в файл. Стоит отметить два минуса этой программы. Во-первых вы не сможете дважды записать разный текст в один и тот же файл и во-вторых место для записи тут ограничивается размером файла.
*Если получится то продемонстрировать работу на компе*
7 слайд.
Ну а на этом все. Спасибо за внимание.