• Tidak ada hasil yang ditemukan

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

Dokumen terkait