МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра БІТ
ЗВІТ
до лабораторної роботи №4
з дисципліни:
«Методи і засоби стеганографії»
на тему:
«Стеганографічні методи приховування
інформації у відеофайлах»
Львів - 2013
Мета
Навчитися приховувати інформацію в відеофайлах з розширенням .avi різними стеганографічними методами (наприклад метод НЗБ) , використовуючи середовище програми Matlab.
Хід роботи
1.Маємо контейнер у вигляді відеофайлу та повідомлення у вигляді тексту.
2. Аналізуємо контейнер на можливість вбудовування в нього повідомлення. Тобто обчислюємо кількість інформації , яку можна вбудувати в найменш значущі біти. Також обчислюємо ,скільки біт необхідно для зберігання максимально можливого розміру файла.
3.Після отримання підтвердження , що у контейнер можна вбудувати повідомлення, приховуємо повідомлення у НЗБ контейнера. При цьому перевіряємо, чи не перевищує файл який ми вбудовуємо максимально допустимий розмір.
4. При вбудовуванні в відеофайли секретного повідомлення, ми розбиваємо відеофайл на послідовність фреймів , потім кожен фрейм,який представлений трьома шарами кольорів RGB, переводимо у двійкове представлення і міняємо НЗБ в певних фреймах, де це буде найменш помітно для людського слуху і зору.
Аналогічним способом буде відбуватися видобування повідомлення із заповненого контейнера:
1.Ми вже знаємо, що у перших бітах цього контейнера міститься інформація про розмір прихованого файлу.
2.Обчислюємо кількість інформації, яка може бути прихована.
3.Видобуваємо саме початковий відеофайл, виділяємо найменш значущі біти.
4.Виділяємо байти з прихованою інформацією, виділяємо найбільш значущі біти.
5.Після того, як отримаємо прямокутний масив бітів, записуємо послідовність даних в файл. Таким чином ми відновили вихідне секретне повідомлення.
Лістинг програми для вбудовування
clear all;
clc;
info = aviinfo('video.avi');
Height = info.Height;
Width = info.Width;
Frames=info.NumFrames;
cByteMax = info.NumFrames * Width * Height * 3;
cRankMax = ceil(log2(cByteMax));
m = fread(fopen('text.doc'));
fclose all;
mByteSize = size(m, 1);
mRankSize = size(dec2bin(mByteSize), 2);
m_bin = dec2bin(m);
if ((mByteSize*8 + cRankMax) > cByteMax)
temp = 'Too big message'
clear all;
else
a(1, 1 : cRankMax) = dec2bin(0);
a(1, cRankMax-mRankSize+1 : cRankMax) = dec2bin(mByteSize);
c = aviread('video.avi');
temp = frame2im(c(1));
frame = 1;
height = 1;
width = 1;
layer = 1;
mov = avifile('stego_video.avi');
mov.Fps = info.FramesPerSecond;
mov.Compression = 'none';
%-------WRITING---MESSAGE---SIZE-----------------------------
for bit=1:1:cRankMax
if (height > Height)
width = width + 1;
height = 1;
end
if (width > Width)
layer = layer + 1;
width = 1;
end
if (layer > 3)
mov = addframe(mov,im2frame(temp));
frame = frame + 1;
temp = frame2im(c(frame));
layer = 1;
end
dot = temp(height,width,layer);
lsb = mod(dot,2);
if xor(lsb, bin2dec(a(bit)))
temp(height, width, layer) = dot - lsb + 1 - lsb;
end
height = height + 1;
end
%-------ENCODING---PROCESS-----------------------------------
for byte=1:1:mByteSize
for bit=1:1:8
if (height > Height)
width = width + 1;
height = 1;
end
if (width > Width)
layer = layer + 1;
width = 1;
end
if (layer > 3)
mov = addframe(mov,im2frame(temp));
frame = frame + 1
temp = frame2im(c(frame));
layer = 1;
end
dot = temp(height,width,layer);
if mod(dot,2)
if (m_bin(byte,bit)=='0')
temp(height,width,layer) = dot - 1;
end
else
if (m_bin(byte,bit)=='1')
temp(height,width,layer) = dot + 1;
end
end
height = height + 1;
end
end
%-------FULLFILLING---VIDEO---FILE---------------------------
mov = addframe(mov,im2frame(temp));
for frame=frame+1:1:Frames
mov = addframe(mov,c(frame));
end
mov = close(mov);
clear all;
clc;
end
Лістинг програми для видобування
clear all;
clc;
info = aviinfo('stego_video.avi');
Height = info.Height;
Width = info.Width;
cByteMax = info.NumFrames * Width * Height * 3;
cRankMax = ceil(log2(cByteMax));
c = aviread('stego_video.avi');
temp = frame2im(c(1));
frame = 1;
height = 1;
width = 1;
layer = 1;
%-------READING---MESSAGE---SIZE-----------------------------
for bit=1:1:cRankMax
if (height > Height)
width = width + 1;
height = 1;
end
if (width > Width)
layer = layer + 1;
width = 1;
end
if (layer > 3)
frame = frame + 1
temp = frame2im(c(frame));
layer = 1;
end
if mod(temp(height,width,layer),2)
a(bit) = '1';
else
a(bit) = '0';
end
height = height + 1;
end
mByteSize = bin2dec(a);
m_bin(mByteSize,:) = dec2bin(0,8);
%-------DECODING---PROCESS-----------------------------------
for byte=1:1:mByteSize
for bit=1:1:8
if (height > Height)
width = width + 1;
height = 1;
end
if (width > Width)
layer = layer + 1;
width = 1;
end
if (layer > 3)
frame = frame + 1
temp = frame2im(c(frame));
layer = 1;
end
if mod(temp(height,width,layer),2)
m_bin(byte,bit) = '1';
else
m_bin(byte,bit) = '0';
end
height = height + 1;
end
end
fwrite(fopen('textrenew3.doc','w'), bin2dec(m_bin));
fclose all;
clear all;
clc;
Висновок
На цій лабораторній роботі я навчився застосовувати стеганографічний метод НЗБ для вбудовування повідомлення в відеофайл з розширенням .avi секретного текстового повідомлення.