Метод изменения количества пробелов в конце текстовых строк
Еще один метод использования свободных мест полосы текста для встраивания конфиденциальных данных заключается в добавлении пробелов в конец каждой текстовой строки. Количество добавляемых пробелов зависит от значения встраиваемого бита. Два пробела кодируют один бит на строку, четыре пробела — два бита, восемь — три и т.д. Такой подход позволяет существенно увеличить, по сравнению с предыдущим методом, количество информации, которую можно скрыть в тексте аналогичного объема.
Дополнительные преимущества указанного метода состоят в том, что он может быть применен к любому тексту. Изменения в формате последнего будут в достаточной степени незаметными, поскольку используемые при этом свободные места являются периферийными по отношению к основному тексту.
Недостатком данного (как, в конечном счете, и предыдущего) метода является то, что некоторые программы обработки текста могут непреднамеренно удалять дополнительно внесенные пробелы. Кроме того, характерным недостатком рассматриваемого метода является очевидная невозможность извлечения скрытых данных из бумажной копии текста (из-за невидимости пробелов).
Нами предложен следующий вариант реализации данного метода.
Шаг 1
Пусть незаполненный текстовый контейнер и скрываемое сообщение те же, что и в вышерассмотренном методе.
Шаг 2
Встраивание бит сообщения выполняем при помощи программного модуля (М.131).
После получения вектора двоичного представления сообщения, которое подлежит скрытию, выполняется подсчет количества символов в каждой текстовой строке r(напомним, что каждая строка текста завершается парой служебных символов: возврата каретки -— CR (ASCII-код 13), и переноса строки — IF (ASCII-код 10), которые в обычном режиме не выводятся на экран и на печать). Подсчитанное количество символов заносится в r-й элемент вектора L. Изначально, как и в вышерассмотренном методе, массив С’ представляет собой текст, который еще не претерпел изменений.
Стеганограмма формируется путем дописывания вслед за последним элементом представляющего ее вектора S значения i-ro элемента массива С, если указанный элемент не представляет собой символ СR. В противном случае совершается переопределение переменной С’ как такой, которая содержит немодифицированную часть текста.
Количество бит , которое можно скрыть в строке, определяется разностью между количеством символов в наиболее длинной строке текста (максимальное значение вектора L) и количеством символов в текущей (r-й) строке. При этом, если скрывается бит "0", в стеганограмму дописывается значение 32 (обычный пробел), а если бит "1" —значение 160 (неразрывный пробел). После встраивания к бит, строка завершается парой символов CR/LF.
После встраивания всех 8-strlen(M) бит сообщения цикл прерывается. Если строка, которая модифицируется последней, не является последней в тексте (общее количество строк текста можно определить как количество элементов вектора L), стеганограмма S дополняется немодифицированным фрагментом текста (С).
Результат встраивания сообщения М в контейнер С изображен на рис. 5.96.
Рис. 5.96. Фрагмент текстового контейнера, заполненного методом изменения количества пробелов в конце строк
Шаг 3
Извлечение бит скрытых данных при S*:= S выполняется при помощи программного модуля (М.132). При этом по всей длине вектора S* выполняется поиск символов CR. В случае нахождения проводится анализ символов, которые размещены до него, на предмет соответствия их кодов кодам обычного (32) и неразрывного (160) пробелов. По полученным результатам формируется вектор двоичных данных, который в дальнейшем конвертируется в строку символов М*.