Selamat pagi semua , disini saya akan membahas mengenai pengolahan citra, khususnya steganografi.
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.
Sekian dan terima kasih , semoga bermanfaat ..
3 komentar
Ohh begitu ya caranya.. Baru tau ane, hehehe :D
Replyscript nya kurang lengkap, saya udh coba gagal di callback UIcontrol, mohon pencerahannya
Replyfunction uipanel3_SelectionChangeFcn(hObject, eventdata, handles)
Replysetiap function sama callback.nya dan evendata error ka itu kira2 kenapa yah ka? mohon penjelasannya terimakasih
Post a Comment