Здравствуйте, уважаемые читатели. Изучая такой замечательный пакет как Matlab, я решил для собственного удовольствия и развития написать пару функций для стеганографии. Я буду использовать простой метод LSB (Наименее Значимый Бит) В качестве контейнера я использую изображение формата bmp и изменяю только последний бит.
Итак первый скрипт в котором мы прячем какой-либо файлик в изображение
После этого нам наверняка захочется изъять из изображения наш файл
Для этого мы используем другую функцию:
Вот и всё. Удачного использования
Итак первый скрипт в котором мы прячем какой-либо файлик в изображение
function nnimg=fileto(im,fil,newimgname)
fid=fopen(fil); % Открываем дескриптор файла который хотим спрятать
file=fread(fid); % Присваиваем его сожержимое переменной file
status=fclose('all'); % Закрываем дескриптор
img=imread(im); % Содержимое файла присваиваем переменной img
nfile=dec2bin(file); % Переводим в двоичную систему содержимое файла
addnum=size(file,1); % Узнаем вес файла в байтах
sizze=size(dec2bin(addnum),2);
maxbytes=size(img,1)*size(img,2)*3/8; % Узнаем сколько байт информации можно спрятать в изображении
maxnum=ceil(log2(maxbytes));% Вычисляем длину максимального объема файла
a(1:maxnum)=dec2bin(0);
% Проверяем хватит ли нам заданного изображения
if addnum>maxbytes
nnimg='Недостаточно большое изображение'
else
a(maxnum-sizze+1:end)=dec2bin(addnum);
t=1;
nimg=dec2bin(img(:));% Переводим изображение в двоичную систему
for e=1:1:maxnum
nimg(e,8)=a(t); % Записываем в изображение длину скрываемого файла
t=t+1;
end
% Записываем в изображение содержимое файла
for i=1:1:size(nfile,1)
q=i*8-7+maxnum
nimg(q,8)=nfile(i,1);
nimg(q+1,8)=nfile(i,2);
nimg(q+2,8)=nfile(i,3);
nimg(q+3,8)=nfile(i,4);
nimg(q+4,8)=nfile(i,5);
nimg(q+5,8)=nfile(i,6);
nimg(q+6,8)=nfile(i,7);
nimg(q+7,8)=nfile(i,8);
end
nimg=bin2dec(nimg); % Переводим код изображения в десятичное исчисление
nnimg=img;
nnimg(:)=nimg(:);
imwrite(nnimg,newimgname,'bmp'); % Запись изображения на диск
end
После этого нам наверняка захочется изъять из изображения наш файл
Для этого мы используем другую функцию:
function nnfile=filefrom(im,filname)
img=imread(im); % Присваиваем содержимое изображения переменной
nimg=dec2bin(img(:));
maxbytes=size(img,1)*size(img,2)*3/8; % Вычисляем сколько байт информации можно спрятать в изображении
maxnum=ceil(log2(maxbytes)); % Вычисляем длину максимального объема файла
a(1:maxnum)=dec2bin(0);
t=1;
% Узнаем длину спрятаного файла
for e=1:1:maxnum
a(t)=nimg(e,8)
t=t+1
end
a=bin2dec(a);
nnfile=zeros(a,1);
nnfile(:)=255;
nnfile=uint8(nnfile);
nnfile=dec2bin(nnfile);
% Собираем файл из отдельных битов
for i=1:1:a
if i==1
q=maxnum+1;
else
q=i*8-7+maxnum;
end
nnfile(i,1)=nimg(q,8);
nnfile(i,2)=nimg(q+1,8);
nnfile(i,3)=nimg(q+2,8);
nnfile(i,4)=nimg(q+3,8);
nnfile(i,5)=nimg(q+4,8);
nnfile(i,6)=nimg(q+5,8);
nnfile(i,7)=nimg(q+6,8);
nnfile(i,8)=nimg(q+7,8);
end
nnfile=bin2dec(nnfile);
fid=fopen(filname,'w'); % Открываем дескриптор нового файла
count=fwrite(fid,nnfile); % Записываем файл на диск
fclose(fid); %Закрываем дескриптор
Вот и всё. Удачного использования