11
4. Hasil dan Pembahasan
Pada bagian ini dijelaskan tentang hasil penelitian yang telah dilakukan. Sistem diimplementasikan dalam bentuk aplikasi desktop. Pengembangan aplikasi
dilakukan dengan menggunakan Visual Studio 2012 Express for Desktop. Aplikasi terdiri dari dua bagian utama, yaitu bagian embedding dan bagian
extracting.
Gambar 6 Form Embedding
Pada Gambar 6 ditunjukkan form embedding. Form tersebut menyediakan kontrol untuk memilih gambar cover, input pesan dan kunci. Hasil embedding
ditampilkan setelah proses embed selesai.
Gambar 7 Form Extracting
Pada Gambar 7, ditunjukkan form yang digunakan untuk proses ekstraksi. Form ini memerlukan input berupa gambar stego dan kunci. Output dari proses
ekstraksi adalah data teks, yaitu pesan yang disisipkan sebelumnya.
Kode Program 1 Perintah Untuk Input Gambar Kedalam Aplikasi
1. private void button1_Clickobject sender, EventArgs e
2. {
3. OpenFileDialog d = new OpenFileDialog;
4. d.Filter = PNG Images|.png|All files .|.;
12
5. if d.ShowDialogthis == DialogResult.OK
6. {
7. this.pictureBox1.ImageLocation = d.FileName;
8. var b = new Bitmapd.FileName;
9. AddLogUkuran Piksel + b.Width + x + b.Height;
10. AddLogKapasistas Penyisipan + GetKapasitasb;
11. }
12. }
13. private static int GetKapasitasBitmap b
14. {
15. return b.Width b.Height 3 8 - 4;
16. }
17. Bitmap b = new Bitmapthis.pictureBox1.ImageLocation;
18. var kapasitas = GetKapasitasb;
19. if this.textBox2.Text.Length kapasitas
20. {
21. MessageBox.ShowPenyisipan tidak dapat dilakukan. Panjang Pesan
22. Melebihi Kapasitas;
23. return;
24. }
Kode Program 1 merupakan potongan perintah untuk proses input image kedalam aplikasi. Format image yang digunakan adalah PNG baris 4. Setelah
gambar berhasil dimasukan maka akan tampil informasi mengenai gambar yang sudah dimasukan kedalam aplikasi yaitu informasi ukuran piksel dan kapasitas
penyisipan baris 9-10. Misalnya pada gambar berukuran 200x200 piksel, kapasitas penyisipan adalah 200 x 200 x 3 warna 8 bit = 15000 byte. Kemudian
dikurangi 4 byte, untuk menyimpan 32 bit metadata. Sehingga kapasitas akhirnya adalah 14996 bytebaris 15. Jika pesan yang disisipkan melebihi kapasitas
penyisipan maka akan diatasi dengan penanganan error atau error handling baris19-24.
Kode Program 2
Perintah Untuk Input Pesan Dan User Key
1. If textBox2.TextLength == 0
2. {
3. MessageBox.ShowPesan tidak boleh kosong;
4. 5.
return; 6.
} 7.
if shuffleCheckBox.Checked textBox3.TextLength 8 8.
{ 9.
MessageBox.ShowKunci Minimal 8 Karakter, Maksimal 12; 10.
return; 11.
}
Kode Program 2 merupakan potongan perintah untuk input pesan dan input user key. Pesan rahasia adalah hal yang sangat penting dan harus dimasukan
untuk memulai proses penyisipan. Pesan rahasia tidak boleh kosong baris 1-3. Jumlah karakter yang dibutuhkan untuk memulai proses shuffle lokasi penyisipan
adalah minimal 8 karakter dan maksimal 12 karakterbaris 7-10.
13
Kode Program 3 Perintah Untuk Penjumlahan Kunci
1. public class ToolKey
2. {
3. public static int SumKeybyte[] key
4. {
5. int result = key[0];
6. for int i = 1; i key.Length; i++
7. {
8. result = result + key[i];
9. }
10. 11.
return result; 12.
} 13.
}
Kode program 3 merupakan perintah penjumlahan kunci menjadi angka seedbaris 5-8. Angka seed dipakai untuk melakukan proses shuffle indeks.
Penggunaan user key yang sama akan menghasilkan urutan shuffle yang sama pada saat akan melakukan proses ekstraksi.
Kode Program 4 Perintah Shuffle dengan Algoritma Fisher-Yates
1. public static T[] ShuffleTT[] array, int seed
2. {
3. T[] copy = new T[array.Length];
4. array.CopyTocopy, 0;
5. Random
r = new Randomseed; 6.
for int i = copy.Length - 1; i 0; i-- 7.
{ 8.
int index = r.Nexti; 9.
T tmp = copy[index]; 10.
copy[index] = copy[i]; 11.
copy[i] = tmp; 12.
} 13.
return copy; }
Kode Program 4 merupakan potongan perintah untuk proses shuffle dari sekumpulan nilai data. Proses shuffle dilakukan dengan menggunakan algoritma
Fisher-Yates. Algoritma tersebut memanfaatkan fungsi acak. Pada .Net Framework, disediakan class random yang dapat membangkitkan bilangan acak
baris 5. Angka acak diperoleh dengan memanggil fungsi next baris 8.
Kode Program 5 Perintah Untuk Proses Penyisipan
1. int length = data.Length;
2. byte[] blength = BitConverter.GetByteslength;
3. byte[] pixels = ExtractPixelscover;
4. char[] biner;
5. int[] indeks = GenerateIndex0, pixels.Length;
6. If shuffle
7. {
8. int seed = Toolkey.SumKeykey;
9. indeks = FisherYates.Shuffleintindeks, seed;
10. }
11. int i;
12. int p = 0;
13. 14.
region . SISIPKAN METADATA . 15.
biner = GetBitStringblength.ToCharArray; 16.
for i = 0; i biner.Length; i++ 17.
{
14
18. pixels[indeks[p]] = ReplaceLSBpixels[indeks[p]], biner[i];
19. LastLogData.Appendindeks[p] + ;
20. p++;
21. }
22. endregion
23. 24.
region . SISIPKAN DATA . 25.
biner = GetBitStringdata.ToCharArray; 26.
27. for i = 0; i biner.Length; i++
28. {
29. pixels[indeks[p]] = ReplaceLSBpixels[indeks[p]], biner[i];
30. LastLogData.Appendindeks[p] + ;
31. p++;
32. }
33. endregion
34. 35.
Bitmap resultImage = CombinePixelscover, pixels, new byte[0]; 36.
return resultImage
Kode Program 5 merupakan potongan perintah untuk proses penyisipan ke dalam gambar. Proses terdiri dari 3 tahap utama. Tahap pertama yaitu proses
shuffle indeks-indeks warna pada gambar. Proses ini dilakukan dengan algoritma Fisher-Yates baris 6-7, dengan menggunakan seed hasil penjumlahan kunci
baris 5. Tahap kedua adalah menyisipkan metadata. Metadata memiliki arti suatu data yang memberikan informasi tentang data yang lain. Pada kasus ini,
metadata berisi informasi: panjang byte data yang akan disisipkan. Tahap terakhir adalah menyisipkan data itu sendiri. Sebelum data disisipkan, data diubah
kedalam bentuk binerbaris 25. Data berisi pesan yang dimasukkan oleh pengguna.
Kode Program 6 Perintah Untuk Proses Ekstraksi
1. byte[] pixels = ExtractPixelsstego;
2. int[] indeks = GenerateIndex0, pixels.Length;
3. if shuffled
4. {
5. Int seed = Toolkey.SumKeykey
6. indeks = FisherYates.Shuffleintindeks, seed;
7. }
8. int i;
9. int p = 0;
10. 11.
region . EXTRACT METADATA . 12.
char[] biner = new char[32]; 13.
for i = 0; i 32; i++ 14.
{ 15.
biner[i] = RetrieveLSBpixels[indeks[p]]; 16.
LastLogData.Appendindeks[p] + ; 17.
p++; 18.
} 19.
byte[] blength = GetBytesArraynew stringbiner; 20.
int length = BitConverter.ToInt32blength, 0; 21.
endregion 22.
23. region . EXTRACT DATA .
24. biner = new char[length 8];
25. for i = 0; i biner.Length; i++
26. {
27. biner[i] = RetrieveLSBpixels[indeks[p]]
28. LastLogData.Appendindeks[p] + ;
29. p++;
30. }
31. endregion
32.
15
33. return GetBytesArraynew stringbiner.ToArray;
Kode Program 6 merupakan potongan perintah untuk proses ekstraksi dari dalam gambar. Proses terdiri dari 3 tahap utama. Tahap pertama yaitu proses
shuffle indeks-indeks warna pada gambar. Proses ini dilakukan dengan algoritma Fisher-Yates baris 3-4, dengan menggunakan seed hasil penjumlahan kunci
baris 2. Tahap kedua adalah ekstraksi metadata. Metadata diekstrak terlebih dahulu, untuk mengetahui berapa banyak bit data yang akan diekstrak selanjutnya.
Tahap terakhir adalah ekstraksi data itu sendiri atau membaca LSB pada warna yang disisipkan baris 27.
Sistem yang dikembangkan pada penelitian ini didasarkan pada latar belakang masalah yaitu bagaimana menyisipkan informasi pada gambar secara
acak. Berdasarkan hal tersebut, maka dilakukan beberapa pengujian. Pengujian pertama yaitu pengujian keberhasilan penyisipan pesan uji integritas. Pengujian
kedua adalah pengujian perbandingan perbedaan warna. Pengujian-pengujian tersebut dilakukan dengan menggunakan standart test images [17] yang biasa
digunakan pada pengujian algoritma pengolahan gambar.
Pengujian pertama yaitu pengujian integritas pesan. Pengujian ini bertujuan untuk membuktikan bahwa proses penyisipan berhasil dilakukan, dan
pesan yang diproses embed dan extract, tidak mengalami perubahan.
Tabel 8 Hasil Pengujian Integritas pesan
No Gambar
Pesan Masuk Pesan Keluar
Sama
1
Halo FTI UKSW Halo FTI UKSW Ya
2 Ya
3 Ya
4 Ya
16
1
Universitas Kristen Satya Wacana
Universitas Kristen Satya Wacana
Ya
2 Ya
3 Ya
4 Ya
1
Jl. Diponegoro No. 52-60, Salatiga,
Jawa Tengah 50711 0298
321212 Jl. Diponegoro No.
52-60, Salatiga, Jawa Tengah
50711 0298 321212
Ya
2 Ya
3 Ya
4 Ya
Berdasarkan hasil pengujian integritas pesan, disimpulkan bahwa pesan yang telah melalui proses embed dan extract, tidak mengalami perubahan. Karena
17 metadata yang digunakan memiliki ukuran 32 bit, maka panjang maksimal pesan
yang dapat disisipkan adalah 2
32
= 4.294.967.296 byte 4 milyar karakter. Selain dibatasi oleh metadata, ukuran gambar mempengaruhi panjang pesan yang dapat
disisipkan. Pengujian kedua adalah pengujian perbandingan perbedaan warna.
Pengujian ini dilakukan dengan menyisipkan data pada 8 gambar berbeda. Kemudian dibandingkan perbedaan piksel yang diakibatkan oleh proses
penyisipan. Proses penyisipan dilakukan antara steganografi dengan Fisher-Yates, dan steganografi tanpa Fisher-Yates. Kunci yang digunakan untuk Fisher-Yates
adalah “fti.uksw”, dan pesan yang disisipkan adalah: “Satya Wacana, Satya Wacana, hiduplah garba ilmiah kita.
Mengabdi Tuhan, gereja dan bangsa, proklamasikan Kerajaan Sorga. Bela k’adilan, bela keb’naran, pantang mundur maju perkasa.
Bina negara, hamba Allahnya, amalkan hikmat Pancasila. ”
Tabel 9 Hasil Pengujian Perbandingan Perbedaan Warna
No Gambar Asli
Stego dengan Fisher-Yates
Perbedaan Warna
dengan gambar
asli Stego Tanpa
Fisher-Yates Perbedaan
Warna dengan
gambar asli
1. 965
977
2. 958
958
3. 968
970
4. 967
1020
18
5. 989
992
6. 989
1004
7. 975
975
8. 960
993
9. 920
1046
Hasil pengujian perbandingan perbedaan piksel menunjukkan bahwa dengan menyisipkan secara acak, akan memberikan kemungkinan perubahan
piksel yang lebih sedikit. Kemungkinan ini juga dipengaruhi oleh kunci yang digunakan, mengingat kunci digunakan untuk membuat nilai SEED, dan
digunakan untuk membuat urutan penyisipan acak.
Pengujian ketiga, yaitu pengujian pengaruh kunci, dilakukan untuk membuktikan bahwa kunci dapat mempengaruhi perbedaan warna yang
dihasilkan. Pada pengujian ini dilakukan pengisipan pesan yang sama, pada gambar yang sama, namun dengan kunci yang berbeda-beda.
Tabel 3 Hasil Pengujian Pengaruh Kunci
No
Kunci 8-12 karakter
SEED Gambar Asli
Stego dengan Fisher-Yates
Perbedaan warna
1. fti.uksw
827 967
19
2. FTI.uksw
731 989
3. satya.wacana
1211 970
4. satya.WACANA
1019 1010
5. 12bc
494 1000
6. 9987aXUyf5
907 982
7. 998799871234
652 1006
8. ABCDEFGHIJKL
846 1940
9. abcdefghijkl
1230 1908
20
10. aaaabbbbcccc
1176 1888
11. xxxx1234xxxx
1162 1880
12. 777777777777
660 1905
13. HelloworlD
1020 1889
14. worldhello
1084 1885
15. 1234abcd
596 1920
Hasil pengujian pengaruh kunci, memberikan hasil yaitu kunci yang berbeda akan memberikan hasil penyisipan yang berbeda. Tidak ada aturan
khusus dalam pemilihan kunci yang terbaik. Untuk meminimalkan perubahan warna, yang dapat dilakukan adalah dengan melakukan penyisipan beberapa kali
dengan beberapa pilihan kunci, dan dipilih kunci yang akhirnya memberikan nilai perbedaan warna terkecil.
Pada Tabel 3, kunci “fti.uksw” memberikan perubahan yang paling minimal pada stego image.
Analisis dari hasil pengembangan aplikasi dan pengujian adalah, dengan menggunakan
.NET Framework,
aplikasi steganografi
lebih mudah
dikembangkan, terutama dalam hal pengolahan piksel gambar, dan penggunakan class random. Class Bitmap pada .NET Framework menyediakan fungsionalitas
untuk membaca dan mengubah nilai warna pada piksel gambar. Class random
21 menyediakan fungsionalitas untuk membangkitkan bilangan acak, yang digunakan
pada proses shuffle. Penggunaan Fisher-Yates memberikan keuntungan yaitu pesan yang
disisipkan, dilakukan dalam posisi yang acak, tersebar dalam piksel-piksel warna. Pesan yang disisipkan dengan cara demikian, memiliki potensi keamanan lebih
tinggi daripada pesan yang disisipkan dengan berurutan. Kelemahan yang muncul yaitu adanya tambahan proses selain proses embedding dan extracting, yaitu
proses shuffle. Karena proses shuffle bekerja dengan cara mengacak posisi indeks warna pada gambar, maka semakin banyak warna semakin besar gambar, maka
semakin lama pula proses shuffle yang dilalui.
5. Simpulan