• Tidak ada hasil yang ditemukan

Implementasi Steganografi Modified Least Significant Bit (MLSB) Untuk Enkripsi Pesan Pada Citra Dengan Algoritma Triple Transposition Vigenere Cipher

N/A
N/A
Protected

Academic year: 2017

Membagikan "Implementasi Steganografi Modified Least Significant Bit (MLSB) Untuk Enkripsi Pesan Pada Citra Dengan Algoritma Triple Transposition Vigenere Cipher"

Copied!
14
0
0

Teks penuh

(1)

Lampiran 1. Fungsi Menu Utama

function varargout = menu_utm(varargin) gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn',

@menu_utm_OpeningFcn, ...

'gui_OutputFcn', @menu_utm_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

function menu_utm_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;

movegui(gcf, 'center');

guidata(hObject, handles);

function varargout = menu_utm_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;

function btnProsesPenyisipan_Callback(hObject, eventdata, handles)

figure(prosesPenyisipan);

function btnProsesEkstraksi_Callback(hObject, eventdata, handles)

figure(prosesEkstraksi);

(2)

figure (hitungMSE);

function btnHitungMSE_CreateFcn(hObject, eventdata, handles)

function btnKeluar_Callback(hObject, eventdata, handles)

(3)

Lampiran 2. Fungsi Enkripsi dan Encoding

function varargout = prosesPenyisipan(varargin) gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn',

@prosesPenyisipan_OpeningFcn, ... 'gui_OutputFcn', @prosesPenyisipan_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

function prosesPenyisipan_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;

guidata(hObject, handles);

btnClear_Callback(handles)

function varargout =

prosesPenyisipan_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;

function btnClear_Callback(handles) axes(handles.picCitraCover);

cla(gca, 'reset');

set(gca,'XTick',[],'YTick',[]); axes(handles.picCitraStego); cla(gca, 'reset');

set(gca,'XTick',[],'YTick',[]);

(4)

set(handles.txtKataKunciKedua,'String',''); set(handles.txtKataKunciKetiga,'String',''); set(handles.lblNamaFile,'String','');

clearvars -global;

function btnPilihCitraCover_Callback(hObject, eventdata, handles)

[fileGambar, folderGambar] =

uigetfile('*.pgm;*.png;*.tif;*.bmp','Pilih Citra Cover');

if isequal(fileGambar,0) return;

end

axes(handles.picCitraStego); cla(gca, 'reset');

set(gca,'XTick',[],'YTick',[]);

global gmbInput namaFile

pathGambar = [folderGambar fileGambar]; axes(handles.picCitraCover)

cla(gca, 'reset'); imshow(pathGambar); drawnow;

tmpImg = imread(pathGambar); gmbInput = tmpImg;

set(handles.lblNamaFile,'String',fileGambar(1:length(fi leGambar)-4));

namaFile = fileGambar;

function txtPesanRahasia_Callback(hObject, eventdata, handles)

function txtPesanRahasia_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

(5)

function txtKataKunciPertama_Callback(hObject, eventdata, handles)

function txtKataKunciPertama_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

function txtKataKunciKedua_Callback(hObject, eventdata, handles)

function txtKataKunciKedua_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

function txtKataKunciKetiga_Callback(hObject, eventdata, handles)

function txtKataKunciKetiga_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

function btnProsesPenyisipan_Callback(hObject, eventdata, handles)

global gmbInput gmbOutput if (isempty(gmbInput))

message = sprintf('Pilih citra cover terlebih dahulu!');

uiwait(msgbox(message)); return

end

if (isempty(get(handles.txtPesanRahasia,'String'))) message = sprintf('Masukkan pesan rahasia!'); uiwait(msgbox(message));

(6)

end

if (isempty(get(handles.txtKataKunciPertama,'String'))) message = sprintf('Masukkan kata kunci pertama!'); uiwait(msgbox(message));

return end

if (isempty(get(handles.txtKataKunciKedua,'String'))) message = sprintf('Masukkan kata kunci kedua!'); uiwait(msgbox(message));

return end

if (isempty(get(handles.txtKataKunciKetiga,'String'))) message = sprintf('Masukkan kata kunci ketiga!'); uiwait(msgbox(message));

return end

filterGmbInput = gmbInput;

filterGmbInput(filterGmbInput == bin2dec('00011111')) = bin2dec('00011110');

filterGmbInput(filterGmbInput == bin2dec('00111111')) = bin2dec('00111110');

filterGmbInput(filterGmbInput == bin2dec('01111111')) = bin2dec('01111110');

filterGmbInput(filterGmbInput == bin2dec('11111111')) = bin2dec('11111110');

[gmbOutput] = MLSB(true, filterGmbInput, get(handles.txtPesanRahasia,'String'), ...

get(handles.txtKataKunciPertama,'String'), ... get(handles.txtKataKunciKedua,'String'), ... get(handles.txtKataKunciKetiga,'String'));

if ~isempty(gmbOutput)

axes(handles.picCitraStego) cla(gca, 'reset');

imshow(gmbOutput); drawnow;

message = sprintf('Proses Penyisipan Berhasil'); uiwait(msgbox(message));

end

(7)

global namaFile gmbOutput if (isempty(gmbOutput))

message = sprintf('Lakukan proses penyisipan terlebih dahulu!');

uiwait(msgbox(message)); return

end

nama = namaFile(1:strfind(namaFile, '.')-1); ekstensi = namaFile(strfind(namaFile, '.'):end);

[fileGambar, folderGambar] = uiputfile([nama '_Stego' ekstensi],'Save file name');

if ~isequal(fileGambar, 0)

pathGambar = [folderGambar fileGambar]; imwrite(gmbOutput, pathGambar);

(8)

Lampiran 3. Fungsi Decoding dan Dekripsi

function varargout = prosesEkstraksi(varargin) gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn',

@prosesEkstraksi_OpeningFcn, ... 'gui_OutputFcn', @prosesEkstraksi_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

function prosesEkstraksi_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;

guidata(hObject, handles);

btnClear_Callback(handles)

function varargout = prosesEkstraksi_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;

function btnClear_Callback(handles) axes(handles.picCitraStego);

cla(gca, 'reset');

set(gca,'XTick',[],'YTick',[]);

set(handles.txtKataKunciPertama,'String',''); set(handles.txtKataKunciKedua,'String',''); set(handles.txtKataKunciKetiga,'String',''); set(handles.lblNamaFile,'String','');

(9)

clearvars -global;

function btnCitraStego_Callback(hObject, eventdata, handles)

[fileGambar, folderGambar] =

uigetfile('*.pgm;*.png;*.tif;*.bmp','Pilih Citra Stego');

if isequal(fileGambar,0) return;

end

set(handles.txtPesanRahasia,'String','');

global gmbInput namaFile

pathGambar = [folderGambar fileGambar]; axes(handles.picCitraStego)

cla(gca, 'reset'); imshow(pathGambar); drawnow;

tmpImg = imread(pathGambar); gmbInput = tmpImg;

set(handles.lblNamaFile,'String',fileGambar(1:length(fi leGambar)-4));

namaFile = fileGambar;

function txtKataKunciPertama_Callback(hObject, eventdata, handles)

function txtKataKunciPertama_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

function txtKataKunciKedua_Callback(hObject, eventdata, handles)

function txtKataKunciKedua_CreateFcn(hObject, eventdata, handles)

(10)

set(hObject,'BackgroundColor','white'); end

function txtKataKunciKetiga_Callback(hObject, eventdata, handles)

function txtKataKunciKetiga_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

function txtPesanRahasia_Callback(hObject, eventdata, handles)

function txtPesanRahasia_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

function btnProsesEkstraksi_Callback(hObject, eventdata, handles)

global gmbInput

if (isempty(gmbInput))

message = sprintf('Pilih citra stego terlebih dahulu!');

uiwait(msgbox(message)); return

end

if (isempty(get(handles.txtKataKunciPertama,'String'))) message = sprintf('Masukkan kata kunci pertama!'); uiwait(msgbox(message));

return end

if (isempty(get(handles.txtKataKunciKedua,'String'))) message = sprintf('Masukkan kata kunci kedua!'); uiwait(msgbox(message));

return end

(11)

message = sprintf('Masukkan kata kunci ketiga!'); uiwait(msgbox(message));

return end

[pesan] = MLSB(false, gmbInput, '', ...

get(handles.txtKataKunciPertama,'String'), ... get(handles.txtKataKunciKedua,'String'), ... get(handles.txtKataKunciKetiga,'String'));

if ~isempty(pesan)

%Tampilkan pada layar

set(handles.txtPesanRahasia,'String',pesan);

message = sprintf('Proses Ekstraksi Berhasil'); uiwait(msgbox(message));

(12)

Lampiran 4. Fungsi Means Square Error (MSE)

function varargout = hitungMSE(varargin)

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn',

@hitungMSE_OpeningFcn, ...

'gui_OutputFcn', @hitungMSE_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

function hitungMSE_OpeningFcn(hObject, eventdata, handles, varargin)

guidata(hObject, handles);

btnClear_Callback(handles)

function varargout = hitungMSE_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;

function btnClear_Callback(handles) axes(handles.picCitraCover);

cla(gca, 'reset');

set(gca,'XTick',[],'YTick',[]); axes(handles.picCitraStego); cla(gca, 'reset');

set(gca,'XTick',[],'YTick',[]);

set(handles.lblNamaFileCitraCover,'String',''); set(handles.lblNamaFileCitraStego,'String',''); set(handles.lblMSE,'String','');

(13)

function btnPilihCitraCover_Callback(hObject, eventdata, handles)

[fileGambar, folderGambar] =

uigetfile('*.jpg;*.pgm;*.png;*.tif;*.bmp','Pilih Citra Cover');

if isequal(fileGambar,0) return;

end

global gmbInput

pathGambar = [folderGambar fileGambar]; axes(handles.picCitraCover)

cla(gca, 'reset'); imshow(pathGambar); drawnow;

tmpImg = imread(pathGambar); gmbInput = tmpImg;

function btnPilihCitraStego_Callback(hObject, eventdata, handles)

[fileGambar, folderGambar] =

uigetfile('*.jpg;*.pgm;*.png;*.tif;*.bmp','Pilih Citra Cover');

if isequal(fileGambar,0) return;

end

global gmbOutput

pathGambar = [folderGambar fileGambar]; axes(handles.picCitraStego)

cla(gca, 'reset'); imshow(pathGambar); drawnow;

tmpImg = imread(pathGambar); gmbOutput = tmpImg;

(14)

set(handles.lblNamaFileCitraStego,'String',fileGambar(1 :length(fileGambar)-4));

function btnHitungMSE_Callback(hObject, eventdata, handles)

global gmbInput gmbOutput if (isempty(gmbInput))

message = sprintf('Pilih citra cover terlebih dahulu!');

uiwait(msgbox(message)); return

end

if (isempty(gmbOutput))

message = sprintf('Pilih citra stego terlebih dahulu!');

uiwait(msgbox(message)); return

end

if length(size(gmbInput)) ~= length(size(gmbOutput)) message = sprintf('Ukuran citra tidak sama!'); uiwait(msgbox(message));

return end

for i = 1 : length(size(gmbInput))

if size(gmbInput, i) ~= size(gmbOutput, i)

message = sprintf('Ukuran citra tidak sama!'); uiwait(msgbox(message));

return end

end

for i = 1 : length(size(gmbInput))

tmpMSE = norm(double(gmbInput(:,:,i) - gmbOutput(:,:,i)));

mse = mse + (tmpMSE / (size(gmbInput, 1) * size(gmbInput, 2)));

end

Referensi

Dokumen terkait

Hasil dari algoritma tersebut adalah apabila dalam ruangan tersebut tidak ada gas berbahaya yang terdeteksi maka akan dianggap aman dengan indicator LED warna hijau

Manajemen Konflik Partai Golkar dalam Pemilukada Kabupaten Pinrang Tahun 2013.. Skripsi Porgram Sarjana Ilmu Pemerintahan

pekerjaan.Macro di Excel dibuat dalam macrosheet atau dengan bahasa Visual. Basic

Selain itu, dengan adanya Sejarah Pemikiran Islam ini, kita dapat mengkaji secara historis terkait berbagai kejadian yang dalam studi tentang Islam dari berbagai perspektif, yang

William dalam Utami Munandar (1985) menjelaskan bahwa pada kemampuan berpikir kreatif meliputi: 1) kemampuan berpikir lancar (influency), adalah kemampuan

Derajat bebas distribusi t-student dan keempat parameter GLD yang telah diperoleh akan dipergunakan untuk membentuk kurva fungsi densitas untuk mengetahui kedekatan dari

Di lahan belukar muda berumur 10 tahun telah dijumpai jenis suksesi lanjut (Rinorea anguifera) yang mendominasi tapak, sedangkan di tapak belukar dan agroforest berumur lebih dari

Hasil Penelitian: Analisis Mann Whitney menunjukkan bahwa pada taraf signifikansi diperoleh nilai sehingga Hal ini mengindikasikan adanya