Как стать автором
Поиск
Написать публикацию
Обновить

Стеганография Matlab

Здравствуйте, уважаемые читатели. Изучая такой замечательный пакет как 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); %Закрываем дескриптор


Вот и всё. Удачного использования
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.