rss

Steganografi Menggunakan Matlab

Posted by gie | Posted in

Kelompok :

  • Yugi Safari Nurhakim (50408890)
  • Priska Setiyaji (50408659)

Saya akan membahas mengenai pengolahan citra, khususnya steganografi.  Wikipedia : Steganografi adalah seni dan ilmu menulis pesan tersembunyi atau menyembunyikan pesan dengan suatu cara sehingga selain si pengirim dan si penerima, tidak ada seorangpun yang mengetahui atau menyadari bahwa ada suatu pesan rahasia. Sebaliknya, kriptografi menyamarkan arti dari suatu pesan, tapi tidak menyembunyikan bahwa ada suatu pesan. Kata "steganografi" berasal dari bahasa Yunani steganos, yang artinya “tersembunyi atau terselubung”, dan graphein, “menulis”.

Tujuan dari steganografi adalah merahasiakan atau menyembunyikan keberadaan dari sebuah pesan tersembunyi atau sebuah informasi. Dalam prakteknya, kebanyakan pesan disembunyikan dengan membuat perubahan tipis terhadap data digital lain yang isinya tidak akan menarik perhatian dari penyerang potensial, sebagai contoh sebuah gambar yang terlihat tidak berbahaya. Perubahan ini bergantung pada kunci (sama pada kriptografi) dan pesan untuk disembunyikan. Orang yang menerima gambar kemudian dapat menyimpulkan informasi terselubung dengan cara mengganti kunci yang benar ke dalam algoritma yang digunakan.
Pada metode steganografi cara ini sangat berguna jika digunakan pada cara steganografi komputer karena banyak format berkas digital yang dapat dijadikan media untuk menyembunyikan pesan. Format yang biasa digunakan di antaranya:
  • Format image : bitmap (bmp), gif, pcx, jpeg, dll.
  • Format audio : wav, voc, mp3, dll.
  • Format lain : teks file, html, pdf, dll.
Kelebihan steganografi jika dibandingkan dengan kriptografi adalah pesan-pesannya tidak menarik perhatian orang lain. Pesan-pesan berkode dalam kriptografi yang tidak disembunyikan, walaupun tidak dapat dipecahkan, akan menimbulkan kecurigaan. Seringkali, steganografi dan kriptografi digunakan secara bersamaan untuk menjamin keamanan pesan rahasianya.

Sekarang saya akan membahas mengenai tugas yang saya buat, yaitu steganografi untuk menyembunyikan suatu gambar dalam gambar lain. Yang pertama harus dilakukan adalah membuat interface aplikasi dengan menggunakan matlab.  Berikut adalah desain interface aplikasi yang saya buat :



Selanjutnya kita harus menambahkan script agar interface diatas dapat berfungsi menjadi aplikasi steganografi.  Berikut adalah potongan script yang digunakan :

 Script untuk memilih cover image:

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
lsb=1;
[handles.cfilename,handles.cpathname] = uigetfile(  {'*.jpg';'*.png';'*.bmp';'*.*'}, ...
        'Select cover image');
axes(handles.axes1);
I=imread([handles.cpathname handles.cfilename]);

imageinfo_cover=imfinfo([handles.cpathname handles.cfilename]);
val_red=I(:,:,1);
if handles.rad2==1
emb=zeros(3,7);
emb(1,:)=bitget(val_red(1,50:56),lsb);
emb(2,:)=bitget(val_red(1,57:63),lsb);
emb(3,:)=bitget(val_red(1,64:70),lsb);
emb_double=bi2de(emb);
emb=char(emb_double);
emb=emb';
 if ~strcmp(emb,'yes')
     axes(handles.axes1);cla
     errordlg(['No hidden image in ' handles.cfilename],'Select another Image');
 else
     image(I),axis off
     set(handles.pushbutton3,'Enable','on');
 end
else
     image(I),axis off
     image_height=imageinfo_cover.Height;
     image_width=imageinfo_cover.Width;
     handles.equ=((image_height-1)*(image_width-mod(image_width,8)))/8;
     set(handles.pushbutton2,'Enable','on');
end
guidata(hObject, handles);

Script untuk memilih secret image:

function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
if handles.rad2==1

else
    [handles.sfilename handles.spathname]=uigetfile({'*.jpg';'*.png'},'Select an Image');
    imageinfo_cover=imfinfo([handles.spathname handles.sfilename]);
    image_height=imageinfo_cover.Height;
    image_width=imageinfo_cover.Width;
   
    equ=image_width*image_height;
   
    if equ <=handles.equ
    I=imread([handles.spathname handles.sfilename]);
    set(handles.pushbutton3,'Enable','on');
    axes(handles.axes2);
    image(I);axis off
    else
    errordlg('Select another Image','Image too big');   
    end
    guidata(hObject, handles);
end

Script untuk menyembunyikan dan mengembalikan gambar :

function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

if handles.rad1==1
lsb=1;  
I=imread([handles.cpathname handles.cfilename]);
imageinfo_cover=imfinfo([handles.cpathname handles.cfilename]);
image_height=imageinfo_cover.Height;
image_width=imageinfo_cover.Width;
 val_red=I(:,:,1); %get the red color matrix
 I_sec=imread([handles.spathname handles.sfilename]);
imageinfo_sec=imfinfo([handles.spathname handles.sfilename]); %get information of secret image
i_sec_height=imageinfo_sec.Height;          % secret image height
i_sec_width=imageinfo_sec.Width;            % secret image width

val_red=double(val_red);
%hide the secret image height 
i_sec_height_bin=de2bi(i_sec_height,16);
val_red(1,1:16)=bitset(val_red(1,1:16),1,i_sec_height_bin);

%hide the secret image width 
i_sec_width_bin=de2bi(i_sec_width,16);
val_red(1,17:32)=bitset(val_red(1,17:32),1,i_sec_width_bin);

%hide an identity, that this image has a secret image.
emb=('yes');
emb_bin=de2bi(double(emb));
val_red(1,50:56)=bitset(val_red(1,50:56),lsb,emb_bin(1,1:7));
val_red(1,57:63)=bitset(val_red(1,57:63),lsb,emb_bin(2,1:7));
val_red(1,64:70)=bitset(val_red(1,64:70),lsb,emb_bin(3,1:7));

I(:,:,1)=val_red; 
 i_sec_length=i_sec_height*i_sec_width;
I_sec_bin=zeros(i_sec_length*3,8);
I_sec_bin=de2bi(double(I_sec));    %convert the secret image to binary
Ipix_counter=1;                    %set a counter for the  pixels
len=mod(image_width,8);           
len=image_width-len;              

for count_hi=2:image_height
    count_wi=1;
    for count_wi=1:8:len-8
          val_red(count_hi,count_wi:count_wi+7)=...
                bitset(val_red(count_hi,count_wi:count_wi+7),1,I_sec_bin(Ipix_counter,:));
       
         Ipix_counter=Ipix_counter+1;
       if Ipix_counter>i_sec_length*3
         break;
       end
    end
       if Ipix_counter>i_sec_length*3
         break;
       end
end
I(:,:,1)=val_red;
[filename, pathname] = uiputfile('.png', 'Save Image as');
imwrite(I,[pathname filename ],'png');
set(handles.pushbutton3,'Enable','off');
set(handles.pushbutton2,'Enable','off');
axes(handles.axes1);cla
axes(handles.axes2);cla
msgbox(['The secret image ' handles.sfilename ' is in '  filename]);
else
  %case 2:Dercyption(Reocver the secret image from cover image)
lsb=1;
I=imread([handles.cpathname handles.cfilename]);   

imageinfo_cover=imfinfo([handles.cpathname handles.cfilename]);%cover image information
image_height=imageinfo_cover.Height;         %cover image height
image_width=imageinfo_cover.Width;           %cover image width

val_red=I(:,:,1);                            %get the red color matrix

%extract the secret image height and width from 1st 32pixel of cover image
i_sec_height=bi2de(bitget(double(val_red(1,1:16)),1));
i_sec_width=bi2de(bitget(double(val_red(1,17:32)),1));
i_sec_length=i_sec_height*i_sec_width;

I_sec_bi=zeros(i_sec_length*3,8);%initialize a zero matrix
Ipix_counter=1;                  %counter for pixels

len=mod(image_width,8);           
len=image_width-len;              

for count_hi=2:image_height
    count_wi=1;
    for count_wi=1:8:len-8
       I_sec_bi(Ipix_counter,1:8)=...
       bitget(val_red(count_hi,count_wi:count_wi+7),1);
       
       Ipix_counter=Ipix_counter+1;
       if Ipix_counter>i_sec_length*3
         break;
       end    

    end
        if Ipix_counter>i_sec_length*3
         break;
       end
end

image1=reshape(bi2de(I_sec_bi),i_sec_height,i_sec_width,3);
image1=uint8(image1);
rn=num2str(rand(1,1));
imwrite(image1,[num2str(rn(3:end)) '.png'],'png');
axes(handles.axes2);
image(image1);axis off
msgbox(['The image '  rn(3:end) '.png is extracted from ' handles.cfilename ' ,it is in your current directory']); 
end   

Script untuk radio button :

function uipanel1_SelectionChangeFcn(hObject, eventdata, handles)
% hObject    handle to uipanel1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
switch get(hObject,'Tag')   % Get Tag of selected object
    case 'radiobutton1'
        handles.rad1=1;
        handles.rad2=0;
        guidata(hObject, handles);
        % code piece when radiobutton1 is selected goes here
         axes(handles.axes1);cla
         axes(handles.axes2);cla
         set(handles.pushbutton3,'String','Hide');
         set(handles.pushbutton3,'Enable','off');
         set(handles.pushbutton2,'Enable','off');
         set(handles.pushbutton1,'Enable','on');
  
    case 'radiobutton2'
        % code piece when radiobutton2 is selected goes here
        % ...
        handles.rad2=1;
        handles.rad1=0;
        guidata(hObject, handles);
         axes(handles.axes1);cla
         axes(handles.axes2);cla
         set(handles.pushbutton3,'String','Recover');
         set(handles.pushbutton3,'Enable','off');
         set(handles.pushbutton2,'Enable','off');
         set(handles.pushbutton1,'Enable','on');
end

Menyembunyikan Gambar :

Setelah interface dan script siap, kita jalankan program yang telah dibuat.  Berikut adalah tampilan awal saat program dijalankan :

Untuk menyembunyikan gambar dalam gambar lainnya, pertama-tama kita pilih radio button “Hide Image”, lalu untuk memasukkan gambar yang akan menjadi media yang menyembunyikan gambar lainnya, pilih button Select Cover Image.  Untuk memasukkan gambar yang akan disembunyikan, pilih button Select Secret Image.


 Setelah kedua gambar dimasukkan, maka lakukan steganografi dengan menekan button “Hide”.


 Selanjutnya User diminta untuk menyimpan gambar yang sudah disisipi gambar rahasia.


Jika proses steganografi sukses, maka akan muncul pesan seperti dibawah ini :


Mengembalikan gambar yang disembunyikan

Selain menyembunyikan, aplikasi yang saya buat juga dapat mengekstrak atau mengembalikan kembali gambar yang telah disembunyikan sebelumnya.  Caranya, pilih radio button “Recover Image”, lalu pilih gambar yang telah disisipi gambar rahasia dan terakhir pilih button “Recover”.



 Jika proses pengembalian berhasil maka gambar yang telah disembunyikan sebelumnya akan ditampilkan kembali.

2 Responses to "Steganografi Menggunakan Matlab"

  1. andry yudha prawira Says:

    based on the above article, the research could be a reference link below

    http://repository.gunadarma.ac.id/bitstream/123456789/1094/1/50406655.pdf

    thank you

  2. Unknown Says:

    Asslamualaikum ? boleh saya minta scriptnya? hehe
    viki.trinanda27@gmail.com

Leave a Reply