1. BAB PVD
Algoritma Pixel
Value
Differencing
(PVD)
Setelah bab ini berakhir, diharapkan pembaca
mendapatkan berbagai pengetahuan berikut dan mampu
mempraktikkannya.
Konsep Dasar Steganografi
Konsep Pixel Value Differencing (PVD)
Praktik membuat program sederhana Steganografi
menggunakan PVD
2. Pengertian Steganografi
Steganografi merupakan seni untuk menyembunyikan pesan di dalam media digital
sedemikian rupa sehingga orang lain tidak menyadari ada sesuatu pesan di dalam media
tersebut. Kata steganografi (steganography) berasal dari bahasa Yunani steganos yang berarti
“tersembunyi/terselubung” dan grephien “menulis” sehingga kurang lebih artinya “menulis
(tulisan) terselubung” (Sutoyo,dkk, 2009;244).
Pixel Value Differencing (PVD)
Menurut Andono (2016) menyatakan bahwa Dasar dari algoritma PVD adalah mencari
selisih dua pixel berdekatan yang digunakan untuk menghitung kapasitas pesan. Berikut
konsep dari metode PVD :
1) Metode ini bekerja pada sepasang nilai piksel yang bertetanggaan (adjacent pixel).
2) Proses penyisipan informasi dilakukan dengan memodifikasi selisih nilai piksel (Pixel
Value Differencing) sesuai dengan nilai bit pesan dan tabel kuantisasi selisih nilai
keabuan
3) Kuantisasi nilai keabuan digunakan untuk menentukan jumlah bit yang akan disisipkan
pada selisih nilai tertentu
Praktikum membuat program PVD menggunakan Matlab :
1. Siapkan program matlab di PC/Laptop anda masing-masing
2. Siapkan image : ‘absam.png’
3. Ketikkan skrip program di bawah ini :
clc;
clear all;
close all;
%masukkan pesan rahasia
Pesan = input('Masukkan Pesan [Maksimal 20 Karakter] : ', 's');
%jika panjang pesan > 20 maka yang diambil hanya 20 karakter saja
if length(Pesan) > 20, Pesan = Pesan(1:20), end;
%pesan teks dijadikan angka
Pesan=uint8(Pesan);
%hitung panjang pesan
panjang_Pesan = length(Pesan);
%baca citra penampung
citra=imread('absam.png');
%jika citra penampung RGB maka ubah dulu menjadi grayscale
if size(citra,3)==3
citra=rgb2gray(citra);
end
%ambil nilai baris dan kolom
[baris,kolom]=size(citra);
%matriks citra dijadikan 1 baris simpan ke dalam stego
stego=citra(:);
%ukur panjang nilai citra pada stego image
panjang_stego=length(stego);
3. %convert pesan menjadi biner
bit_pesan=[];
for i=1:panjang_Pesan
biner=dec2bin(Pesan(i),8);
bit_pesan = [bit_pesan biner];
end
%ambil nilai panjang bit pesan
panjang_bit_pesan = length(bit_pesan);
ambil_bit_pesan=[];
%proses penyisipan pesan
%nilai awal n
n=0;
for i=1:2:panjang_stego
%hitung nilai d (selisih piksel bertetanggan)
d=stego(i+1)-stego(i);
%untuk tabel kuantisasi
if 0 <= d <= 7; LK=0; n=3;end
if 8 <= d <= 15; LK=8; n=3;end
if 16 <= d <= 31; LK=16; n=4;end
if 32 <= d <= 63; LK=32; n=5;end
if 64 <= d <= 127; LK=64; n=7;end
if 128 <= d <= 255; LK=128; n=7;end
if n > length(bit_pesan);
break
end
ambil_bit_pesan=bit_pesan(1:n);
bit_pesan=bit_pesan(n+1:end);
%proses menghitung nilai b (pesan)
b=bin2dec(ambil_bit_pesan);
if d >= 0; d1 = LK +b; else d1 = -(LK+b); end
%hitung nilai m
m = d1-d; bawah=floor(m/2); atas=ceil(m/2);
%jika m nilainya ganjil
if mod(m,2)==1, stego(i)=stego(i) - atas;
stego(i+1)=stego(i+1)+bawah;
end
%jika m nilainya genap
if mod(m,2)==0, stego(i)=stego(i) - bawah;
stego(i+1)=stego(i+1)+atas;
end
end
%membentuk stego image berdasarkan proses pada variabel 'stego'
stego=reshape(stego, [baris kolom]);
%Tampilkan Cover Image dan Stego Image
figure(1); imshow(citra),title('Cover Image');
figure(2); imshow(stego), title('Stego Image');
bit_pesan = [bit_pesan ubah_b];
end
4. 4. Eksekusi/Run Program anda maka menampilkan hasil sebagai berikut :
5. Ketikkan karakter pesan yang anda inginkan, tetapi dalam program ini baru dibatasi
maksimal 20 karakter, lalu tekan enter dan akan muncul tampilan Cover Image (Figure
1) dan Stego Image (Figure 2)
%proses ekstraksi pesan
bit_pesan=[];
ambil_bit_pesan=[];
for i=1:2:panjang_stego
if length(bit_pesan)==panjang_bit_pesan, break, end
%hitung nilai d
d=stego(i+1)-stego(i);
%untuk tabel kuantisasi
if 0 <= d <= 7; LK=0; n=3;end
if 8 <= d <= 15; LK=8; n=3;end
if 16 <= d <= 31; LK=16; n=4;end
if 32 <= d <= 63; LK=32; n=5;end
if 64 <= d <= 127; LK=64; n=7;end
if 128 <= d <= 255; LK=128; n=7;end
%hitung nilai b(pesan)
b = abs(d)-LK;
ubah_b = dec2bin(b);
bit_pesan = [bit_pesan ubah_b];
end
Pesan2=[];
%ubah pesan biner menjadi desimal
for i=1:8:panjang_bit_pesan
a=char(bin2dec(bit_pesan(1:8)));
Pesan2=[Pesan a];
end
%tampilkan hasil ekstraksi pesan
disp(['Hasil Ekstraksi Pesan = ', Pesan2(1:end-1)]);
5. 6. Perhatikan kedua gambar tesebut, nyaris tidak ada perbedaan antara Cover Image dan
Stego Image.
7. Kualitas algoritma steganografi, salah satunya adalah tidak adanya perbedaan secara
signifikan antara cover image dan stego image