МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра БІТ
ЗВІТ
до лабораторної роботи №2
з дисципліни:
«Методи і засоби стеганографії»
на тему:
«Стеганографічні методи приховування
інформації в зображеннях»
Львів - 2013
Мета
Навчитися приховувати інформацію в зображеннях з розширенням .bmp різними стеганографічними методами (наприклад метод НЗБ) , використовуючи середовище програми Matlab.
Хід роботи
1.Маємо контейнер у вигляді зображення та повідомлення у вигляді тексту.
2. Аналізуємо контейнер на можливість вбудовування в нього повідомлення. Тобто обчислюємо кількість інформації , яку можна вбудувати в найменш значущі біти. Також обчислюємо ,скільки біт необхідно для зберігання максимально можливого розміру файла.
3.Після отримання підтвердження , що у контейнер можна вбудувати повідомлення, приховуємо повідомлення у НЗБ контейнера. При цьому перевіряємо, чи не перевищує файл який ми вбудовуємо максимально допустимий розмір.
Аналогічним способом буде відбуватися видобування повідомлення зі заповненого контейнера:
1.Ми вже знаємо, що у перших бітах цього контейнера міститься інформація про розмір прихованого файлу.
2.Обчислюємо кількість інформації, яка може бути прихована.
3.Видобуваємо саме початкове зображення, виділяємо найменш значущі біти.
4.Виділяємо байти з прихованою інформацією,виділяємо найбільш значущі біти.
5.Після того, як отримаємо прямокутний масив бітів, записуємо послідовність даних в файл. Таким чином ми відновили вихідне секретне повідомлення.
Лістинг програми для вбудовування
imgname='img.bmp';
filename='text.doc';
% reading IMAGE, finding its size
img = imread(imgname);
img_size_y=size(img,1);
img_size_x=size(img,2);
max_Bytes=img_size_y*img_size_x*3/8;
num_bits=ceil(log2(max_Bytes));
% reading file to variable
fid = fopen(filename);
file = fread(fid);
status =fclose(fid);
file_size=size(file,1);
% checking the possibility of embedding
if (file_size*8+num_bits<=max_Bytes*8)
can=true;
else
can=false;
end;
if (can),
% FILE size -> bit's row
file_size_arr=zeros(num_bits,1);
for ind=0:1:num_bits-1,
file_size_arr(ind+1)=bitand(bitshift(file_size,-ind),1);
end;
% hidded FILE -> bit's row
DATA_bits = uint8(im2bw([bitand(file,128),...
bitand(file,64), ...
bitand(file,32), ...
bitand(file,16), ...
bitand(file,8), ...
bitand(file,4), ...
bitand(file,2), ...
bitand(file,1)],0.6));
%FILE size bits + FILE data bits
BITs=[file_size_arr; DATA_bits(:)];
newimg=img;
BITs_ind=1:size(BITs,1);
BITs_ind=BITs_ind';
newimg(BITs_ind)=bitshift(img(BITs_ind),-1);
newimg(BITs_ind)=bitshift(newimg(BITs_ind),1)+BITs;
imwrite(newimg,'stego_img.bmp','bmp');
imshow(newimg);
end;
if (~can),
disp(['File "',filename,'" is too large for embedding']);
end;
Лістинг програми для видобування
imgname = 'stego_img.bmp';
img = imread(imgname);
img_size_y = size(img,1);
img_size_x = size(img,2);
max_bytes = img_size_y*img_size_x*3/8;
num_bits = ceil(log2(max_bytes));
ind = 1: num_bits;
file_size_bits_arr = img(ind);
file_size_bits_arr = uint32(bitand(file_size_bits_arr ,1));
for ind = 1:1:num_bits
file_size_bits_arr(ind) = file_size_bits_arr(ind)*(2^(ind-1));
end;
file_size_bits_arr = file_size_bits_arr';
file_size = uint32(sum(file_size_bits_arr));
ind = num_bits+1 : num_bits+file_size*8;
pixels_with_bits = img(ext_ind);
BITS_arr=bitand(pixels_with_bits,1)';
BITS_arr=reshape(BITS_arr,file_size,8);
BITS_arr = uint8([BITS_arr(:,1)*128,...
BITS_arr(:,2)*64,...
BITS_arr(:,3)*32,...
BITS_arr(:,4)*16,...
BITS_arr(:,5)*8,...
BITS_arr(:,6)*4,...
BITS_arr(:,7)*2,...
BITS_arr(:,8)*1]);
bytes = sum(BITS_arr,2);
fid = fopen('textrenew.doc','w');
count = fwrite(fid, bytes);
fclose(fid);
Висновок
На цій лабораторній роботі я навчився застосовувати стеганографічний метод НЗБ для вбудовування повідомлення в 8-бітне зображення з розширенням .bmp секретного текстового повідомлення.