BAB 5 KESIMPULAN DAN SARAN
5.2. Saran
Berikut adalah beberapa saran penulis yang dapat digunakan sebagai pertimbangan demi mendapatkan tujuan yang lebih akurat
1. Objek penampung pada penelitian ini adalah citra dengan format *.BMP, untuk pengembangan selanjutnya dapat dilakukan perubahan dengan menggunakan file citra dengan format yang lain bahkan dapat juga digunakan menggunakan file digital yang lainnya seperti Audio dan Video.
2. Kinerja sistem pada Penelitian ini membutuhkan banyak waktu pada proses penyisipannya, untuk pengembangannya dapat dilakukan penelitian untuk mempercepat proses penyisipan.
3. Algoritma LSB menurut Persamaan kuadrat tidak optimal jika digunakan untuk menyembunyikan file *.txt dengan jumlah karakter yang banyak, karena membutuhkan kapasitas penampung yang sangat besar dan waktu pemrosesan yang sangat lama, untuk pengembangannya dapat dilakukan penetapan kunci atau nilai konstanta a, b, dan c guna memperbanyak karakter yang dapat disisipkan kedalam sebuah cover image.
4. Perlu penelitian lanjutan karena hasil dari bentuk garis yang ditarik dari setiap pixel belum memenuhi harapan, yaitu berbentuk kurva terbuka.
DAFTAR PUSTAKA
Dony Ariyus. 2008. Pengantar Ilmu Kriptografi. Jogjakarta,Indonesia: Penerbit Andi. Esti Suryani. 2008. Kombinasi Kriptografi dengan Hillcipher dan Steganografi dengan
LSB Untuk Keamanan Data Teks. Jurnal. Magelang, Indonesia : Universitas Muhammadyah Magelang
Henny Hariani Lubis. 2012. Analisis dan Perancangan Pengujian Nilai MSE (Mean Squared Error) pada Proses Penyisipan Label Citra dengan Algoritma Modified Least Significant Bit (LSB) terhadap Modifikasi Nilai Brightness. Medan , Indonesia : Universitas Sumatera Utara
Henry Setyawan. 2009. Implementasi Steganografi Dengan Metode Least Significant Bit. Jurnal. Banda Aceh, Indonesia : Universitas Syiah Kuala.
M. Anggrie Setyawan. 2012. Implementasi Steganografi Pada Citra Digital BMP Menggunakan Java. Skripsi. Bandung, Indonesia : Politeknik Telkom Bandung.
Marghny Mohamed. 2010. Data Hiding by LSB Substitution Using Genetic Optimal Key_Permutation. Journal. Assiut, Egypt : Assiut University
Mark Ryan. 2010. Calculus Essentials for Dummies. Wiley Publishing, Inc.
Mollin, Richard A. 2005. The Guide to Secrecy form ancient to Modern Times. Boca Raton, USA : Taylor & Francis group, LLC.
Mollin, Richard A. 2007. An Introduction to Cryptography, Second Edition. Boca Raton, USA : Taylor & Francis group, LLC.
Listing Program Menu
function varargout = menu(varargin)
% Begin initialization code - DO NOT EDIT gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @menu_OpeningFcn, ... 'gui_OutputFcn', @menu_OutputFcn, ... 'gui_LayoutFcn', [] , ...
'gui_Callback', []); if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1}); end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else
gui_mainfcn(gui_State, varargin{:}); end
% End initialization code - DO NOT EDIT
% --- Executes just before menu is made visible.
function menu_OpeningFcn(hObject, eventdata, handles, varargin) guidata(hObject, handles); axes(handles.axes1); imshow('usu.png'); handles.output = hObject; guidata(hObject, handles);
% --- Outputs from this function are returned to the command line. function varargout = menu_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;
% --- function Menu_Callback(hObject, eventdata, handles)
% --- function Embed_Callback(hObject, eventdata, handles)
Insertion close(gcbf)
% --- function Ekstrak_Callback(hObject, eventdata, handles)
extractfgsi close(gcbf)
% --- function Keluar_Callback(hObject, eventdata, handles)
choice = questdlg('Exit?','confirm',... 'Yes','No','No'); End
Listing ProgramPenyisipan function varargout = Insertion(varargin)
% Begin initialization code - DO NOT EDIT gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Insertion_OpeningFcn, ... 'gui_OutputFcn', @Insertion_OutputFcn, ... 'gui_LayoutFcn', [] , ...
'gui_Callback', []); if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1}); end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else
gui_mainfcn(gui_State, varargin{:}); end
% End initialization code - DO NOT EDIT
% --- Executes just before Insertion is made visible.
function Insertion_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;
% Update handles structure guidata(hObject, handles);
% --- Outputs from this function are returned to the command line. function varargout = Insertion_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;
function inputtext_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties. function inputtext_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white'); end
% --- Executes on button press in mse.
function mse_Callback(hObject, eventdata, handles) R1_s = handles.citra(:,:,:); R2_s = handles.formasi(:,:,:); dR_s = abs(double(R1_s) - double(R2_s)); mse_s=(dR_s(:).^2); p=length(mse_s); mse2=(sum(mse_s(1:p))/p);
set(handles.MSEhsl,'String',mse2);
% --- Executes on button press in browse.
function browse_Callback(hObject, eventdata, handles)
[nama_file,nama_path] = uigetfile({'*.bmp';},'Buka Citra'); if ~isequal(nama_file,0) awal=(fullfile(nama_path,nama_file)); handles.citra=imread(awal); guidata(hObject,handles); axes(handles.cover); imshow(handles.citra); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% end
% --- Executes on button press in browsetext.
function browsetext_Callback(hObject, eventdata, handles) [nama_file,nama_path] = uigetfile({'*.txt';},'Buka Citra'); if ~isequal(nama_file,0) awal=(fullfile(nama_path,nama_file)); handles.tulis=fileread(awal); l=double(handles.tulis); j=dec2bin(l); [apa ini]=size(j) if apa > handles.kar
errordlg('text melampaui kapaitas ','Error'); return end guidata(hObject,handles); set(handles.inputtext,'String',handles.tulis); end
% --- Executes on button press in cek.
function cek_Callback(hObject, eventdata, handles) handles.m=1; set(handles.A,'String',handles.m); handles.b=1; set(handles.B,'String',handles.b); handles.c=1; set(handles.C,'String',handles.c); [bbb kk zz]=size(handles.citra); jum=bbb*kk*zz; lipat=bbb*3; bar=reshape(handles.citra,jum,1); p=dec2bin(bar); %nilai konstanta x1=1; y1=1;
%misahin per kolom a=1;
semua=lipat*kk*8; skalar=8*kk; %tentuin y
for yuyu=1:lipat rumus=(handles.m*(yuyu*yuyu))+(handles.b*yuyu)+handles.c;%ax^2+bx+c if rumus <= kk barisasli(a)=kk*yuyu+rumus; a=a+1; end end [ko l]=size(barisasli); ss1=1; barisasli; %proses biasa for tt=1:lipat*kk for uu=1:8
if ss1<=l && barisasli(ss1)==tt && uu==8 ss1=ss1+1; end end end bit=ss1-1; % set(handles.text5,'String',bit); handles.kar=floor(bit/7); guidata(hObject,handles); set(handles.size,'String',handles.kar);
% --- Executes on button press in save.
function save_Callback(hObject, eventdata, handles) [file,path]=uiputfile('*.bmp','save');
Name=fullfile(path,file); imwrite(handles.formasi,Name);
% --- Executes on button press in proses.
function proses_Callback(hObject, eventdata, handles) tic [bbb kk zz]=size(handles.citra); jum=bbb*kk*zz; lipat=bbb*3; bar=reshape(handles.citra,jum,1); p=dec2bin(bar); handles.p=p; handles.tulis=(get(handles.inputtext,'String')); l=double(handles.tulis); j=dec2bin(l); savefile = 'varfungsikuadratfile.mat'; [rr cc]=size(j) %nilai konstanta x1=1; y1=1; m=handles.m; b=handles.b;
%misahin per kolom a=1;
semua=lipat*kk*8; skalar=8*kk;
%tentuin y
%koor y tanpa baris for yuyu=1:lipat rumus=(handles.m*(yuyu*yuyu))+(handles.b*yuyu)+handles.c;%ax^2+bx+c if rumus <= kk barisasli(a)=kk*yuyu+rumus; a=a+1; end end [ko l]=size(barisasli); ss2=1; barisasli; %proses biasa for tt=1:lipat*kk for uu=1:8 gambarbaru(tt,uu)=p(tt,uu);
if ss2<=l && barisasli(ss2)==tt && uu==8 && x1<=rr gambarbaru(tt,8)=j(x1,y1); y1=y1+1; ss2=ss2+1; if y1>cc x1=x1+1; y1=1; end end end end p; j; gambarbaru; handles.gambarbaru=gambarbaru; [be le lu]=size(handles.citra); [jj1 kk1]=size(gambarbaru); g=bin2dec(gambarbaru); kok=toc; handles.g=g; handles.formasi=uint8(reshape(g,be,le,lu)); axes(handles.stego); imshow(handles.formasi); guidata(hObject,handles); set(handles.waktu,'String',kok); m=handles.m; b=handles.b; c=handles.c; save(savefile, 'rr', 'cc','m','b','c');
% --- Executes on button press in kembali.
function kembali_Callback(hObject, eventdata, handles) close(gcbf)
menu
% --- Executes on button press in bersih.
function bersih_Callback(hObject, eventdata, handles) cla(handles.cover,'reset');
set(handles.cover,'xtick',[],'ytick',[],'Xcolor','w','Ycolor','w'); set(handles.inputtext,'String',''); set(handles.size,'String',''); set(handles.waktu,'String',''); set(handles.A,'String',''); set(handles.B,'String',''); set(handles.C,'String',''); clear all; clc;
% --- Executes on button press in keluar.
function keluar_Callback(hObject, eventdata, handles) choice = questdlg('Exit?','confirm',... 'Yes','No','No'); % Handle response switch choice case 'Yes' close all; end % --- function Untitled_1_Callback(hObject, eventdata, handles)
% --- function Untitled_2_Callback(hObject, eventdata, handles)
% --- function Untitled_3_Callback(hObject, eventdata, handles)
% --- function Untitled_4_Callback(hObject, eventdata, handles)
% --- function Menu_Callback(hObject, eventdata, handles)
menu
close(gcbf)
% --- function Embed_Callback(hObject, eventdata, handles)
% --- function Ekstrak_Callback(hObject, eventdata, handles)
extractfgsi close(gcbf)
% --- function Exit_Callback(hObject, eventdata, handles)
choice = questdlg('Exit?','confirm',... 'Yes','No','No'); % Handle response switch choice case 'Yes' close all; end
function A_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties. function A_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
end
function B_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties. function B_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white'); end
function C_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties. function C_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white'); end
function MSEhsl_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties. function MSEhsl_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white'); end
Ekstraksi function varargout = extractfgsi(varargin)
% Begin initialization code - DO NOT EDIT gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @extractfgsi_OpeningFcn, ... 'gui_OutputFcn', @extractfgsi_OutputFcn, ... 'gui_LayoutFcn', [] , ...
'gui_Callback', []); if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1}); end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else
gui_mainfcn(gui_State, varargin{:}); end
% End initialization code - DO NOT EDIT
% --- Executes just before extractfgsi is made visible.
function extractfgsi_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;
% Update handles structure guidata(hObject, handles);
% --- Outputs from this function are returned to the command line.
function varargout = extractfgsi_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function edit1_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties. function edit1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white'); end
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles) [nama_file,nama_path] = uigetfile({'*.bmp';},'Buka Citra'); if ~isequal(nama_file,0) awal1=(fullfile(nama_path,nama_file)); handles.citra=imread(awal1); guidata(hObject,handles); axes(handles.axes1); imshow(handles.citra); ok=imfinfo(awal1); set(handles.edit1,'String',ok.Filename); end
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles) load('varfungsikuadratfile.mat', 'rr', 'cc','m','b','c'); [bbb kk zz]=size(handles.citra); jum=bbb*kk*zz; lipat=bbb*3; bar=reshape(handles.citra,jum,1); p=dec2bin(bar); handles.p=p; %nilai konstanta x1=1; y1=1;
%misahin per kolom a=1;
semua=lipat*kk*8; skalar=8*kk; %tentuin y
%koor y tanpa baris for yuyu=1:lipat
pisah=(a/lipat)*jum;
rumus=((m*(yuyu*yuyu))+(b*yuyu)+c)*8;%rumus ax^2+bx+c if rumus <=skalar
koory=barisbaru+rumus; %membagi koor dengan baris hslbg=(koory/(skalar)); hslbg=floor(hslbg); hsl=mod(koory,skalar); hslak=hsl/8; oppp(yuyu)=round((kk*hslbg)+hslak); a=a+1; end end [ko l]=size(oppp); ss2=1; b1=1; k1=1; for a=1:l if b1<=rr && k1<=kk pesanmlsb(b1,k1)=p(oppp(a),8); k1=k1+1; if k1>=8 b1=b1+1; k1=1; end end end g=bin2dec(pesanmlsb); h=char(g); lol=transpose(h); handles.lol=lol; guidata(hObject,handles); set(handles.listbox1,'String',lol);
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles) [file,path]=uiputfile('*.txt','save');
Name=fullfile(path,file); dlmwrite(Name,handles.lol);
warndlg('file telah tersimpan','!! Simpan !!')
% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles) cla(handles.axes1,'reset'); set(handles.axes1,'xtick',[],'ytick',[],'Xcolor','w','Ycolor','w'); set(handles.edit1,'String',''); set(handles.edit2,'String',''); set(handles.listbox1,'String',''); clear all; clc;
% --- Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)
% --- Executes on selection change in listbox1.
function listbox1_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties. function listbox1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white'); end
function edit2_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties. function edit2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white'); end
% --- function menu_Callback(hObject, eventdata, handles)
menu
% --- function embed_Callback(hObject, eventdata, handles)
Insertion close(gcbf)
% --- function ekstrak_Callback(hObject, eventdata, handles)
extractfgsi close(gcbf)
% --- function keluar_Callback(hObject, eventdata, handles)
choice = questdlg('Exit?','confirm',... 'Yes','No','No'); % Handle response switch choice case 'Yes' close all; end