APLIKASI PENYISIPAN DATA KE DALAM CITRA TERMAMPAT BERFORMAT GIF DENGAN BAHASA PEMROGRAMAN DELPHI Tugas Akhir untuk memenuhi sebagian persyaratan mencapai Derajat Sarjana Teknik
Oleh Arif Nur Budisetiyo L2F 304 217
JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK UNIVERSITAS DIPONEGORO SEMARANG 2007
1
2
HALAMAN PENGESAHAN
Laporan Tugas Akhir dengan judul “APLIKASI PENYISIPAN DATA KE DALAM CITRA TERMAMPAT BERFORMAT GIF DENGAN BAHASA PEMROGRAMAN DELPHI ” yang disusun oleh Nama : Arif Nur Budisetiyo NIM : L2F304217 Telah disetujui dan disahkan untuk dijadikan laporan Tugas Akhir sebagai salah satu syarat menyelesaikan pendidikan program Strata Satu Jurusan Teknik elektro Fakultas Teknik Universitas Diponegoro Semarang.
Menyetujui dan mengesahkan
Pembimbing I
Pembimbing II
Achmad Hidayatno, S.T., M.T. NIP. 132 137 933 Tanggal……………………….
R. Rizal Isnanto, S.T., M.M., M.T. NIP. 132 288 515 Tanggal…………………………...
Mengetahui a.n. Dekan Ketua Jurusan teknik Elektro Fakultas Teknik Universitas Diponegoro
Ir. Sudjadi, M.T. NIP. 131 558 567 Tanggal………….
3
Tugas Akhir APLIKASI PENYISIPAN DATA KE DALAM CITRA TERMAMPAT BERFORMAT GIF DENGAN BAHASA PEMROGRAMAN DELPHI
yang dipersiapkan dan disusun oleh Arif Nur Budisetiyo L2F304217
telah dipertahankan di depan para Dosen Penguji pada tanggal 19 Juni 2007 dan dinyatakan telah memenuhi syarat
Susunan Dosen Penguji Tanda tangan
Ketua/Anggota
: Ir. Sudjadi, M.T
………………. Tanggal : ……………….
Sekretaris/Anggota : Darjat, S.T, M.T
………………. Tanggal : ……………….
Anggota
: Imam Santoso, S.T, M.T
……………….
Tanggal : ……………….
4
ABSTRAK
Teknologi digital saat ini telah memberi kemudahan untuk melakukan akses serta mendistribusikan berbagai informasi dalam format digital. Steganografi adalah teknik menyembunyikan data rahasia di dalam media digital sehingga keberadaan data rahasia tersebut tidak dapat diketahui oleh orang lain. Pemampatan GIF merupakan bentuk pemampatan tak berugi sehingga tidak menghilangkan data yang terkandung di dalamnya. Delphi merupakan bahasa pemrograman visual yang memiliki fasilitas pengolah angka, basis data, grafik, dan animasi, sehingga memungkinkan untuk membuat program dengan komponen visual dalam bentuk objek. Piksel suatu citra berwarna tersusun oleh tiga elemen warna RGB (red, green, dan blue). Dengan mengganti satu bit LSB elemen RGB tersebut, dapat diperoleh ruang pada citra untuk menyimpan pesan rahasia. Langkah-langkah penelitian ini adalah: (1) Citra yang telah diambil di reduksi warna dari 24-bit menjadi 8-bit yang berfungsi untuk menyiapkan citra ke dalam format GIF, (2) Menduplikasi palet yang berfungsi untuk menyamakan palet warna pada citra asli, (3) Menyisipkan satu bit ke dalam bit terakhir citra, (4) Menyimpan citra hasil steganografi dalam format GIF, (5) Menguji keberhasilan program dengan melakukan proses desteganografi. Hasil penelitian adalah bahwa ukuran citra menentukan kapasitas data yang dapat disisipkan. Semua data mampu disisipkan ke dalam citra jika kapasitas di bawah maksimal yang mampu ditampung citra uji. Namun, pengujian tidak berhasil dilakukan dengan data uji di atas kapasitas maksimal yang dapat ditampung oleh citra. Proses steganografi dapat dilakukan jika citra dari aplikasi ini maksimal berukuran 6800 5000 piksel karena kebutuhan memori untuk membuka citra tersebut. Untuk menyisipkan data dalam format teks hanya dibutuhkan waktu 1 sampai 3 detik karena ukuran berkas di bawah 20 KB. Waktu yang dibutuhkan untuk menyisipkan data audio dan video 30 sampai 35 detik karena ukuran berkas mendekati 1 MB. Semua data yang disisipkan berhasil diambil kembali sama dengan data semula pada proses desteganografi. Kata- kunci : Citra Digital, GIF, Palet, Steganografi, LSB ( Least Significant Bit), piksel.
5
ABSTRACT
Digital technology in this time has given amenity to access and also distribute various information in digital format. Steganography is technique hide secret data in digital media so that the secret data existence can be ignored by others. GIF Compression represents loseless compression form so that it does not eliminate data which is consisted in it. Delphi represents visual language programming which has a several facilities, such as spreadsheet, database, graph, and animation, so that it is enable to make program with visual component in object form colour. Pixel of a chromatic is set by three colour RGB elements (red, green, and blue). By Changing one bit RGB LSB element, then some space of an image to save a secret message can be obtained . This research stages are: (1) Reducing colour format from 24-bits to 8-bit in order to prepare the image into a GIF format, (2) Duplicating palette function to equalize palette colour as an original image, (3) Inserting one bit into last bit of image, (4) Saving images result of steganography in GIF format, (5) Testing program result by the desteganography process. Result of the research is the image size determine their data capacities which can be inserted. All data can be inserted into image if their capacities are below their maximum sizes capable to be accomodated by a testing image. However, some test will fail if test data which have maximum capacities can be accomodated by image. Steganography process can be done if image from this application has a maximum size of 6800 5000 pixel because it needs a large memory to open the image. To insert data in text format it requires 1 until 3 second because it’s file size below 20 KB. The time needed for inserting audio and video data is 30 until 35 second because it’s file size almost 1 MB. All inserted data can be recovered into original data by a desteganography process
Keywords : Digital Image, GIF, Palette, Steganography, LSB ( Least Significant Bit), pixel.
6
KATA PENGANTAR
Puji syukur ke hadirat Allah Subhanallahu Wa Ta’ala, karena berkat limpahan Rahmat dan Hidayah-Nya penulisan laporan tugas akhir ini dapat diselesaikan dengan baik. Tugas akhir berjudul Aplikasi Penyisipan Data Ke dalam Citra Termampat Berformat Gif dengan Bahasa Pemrograman Delphi ini disusun untuk memenuhi sebagian persyaratan mencapai Derajat Sarjana Teknik pada Jurusan Teknik Elektro, Fakultas Teknik Universitas Diponegoro. Penyelesaian laporan tugas akhir ini karena dukungan dari berbagai pihak. Untuk itu pada kesempatan ini, Penulis ingin menyampaikan terima kasih kepada: 1.
Bapak Ir. Sudjadi, M.T. selaku Ketua Jurusan Teknik Elektro
2.
Bapak Achmad Hidayatno, S.T., M.T. selaku pembimbing I yang telah memberikan petunjuk dan bimbingan selama proses penyelesaian tugas akhir ini
3.
Bapak R. Rizal Isnanto, S.T., M.M., M.T. selaku pembimbing II yang telah memberikan petunjuk, bimbingan, dan saran selama proses penyelesaian tugas akhir ini
4.
Bapak dan Ibu tercinta atas doa dan dukungannya
5.
Semua pihak yang telah membantu dalam penyelesaian tugas akhir ini
Penulis
menantikan
saran
dan
kritik
yang
membangun
untuk
kesempurnaan penelitian ini. Semoga tugas akhir ini dapat memberikan sumbangan pengetahuan yang berguna bagi pembaca.
Semarang, Mei 2007 Penulis
7
DAFTAR ISI Halaman Judul.......................................................................................................... i Halaman Persetujuan............................................................................................... ii Halaman Pengesahan ............................................................................................. iii Motto dan Persembahan......................................................................................... iv Abstrak .....................................................................................................................v Abstract .................................................................................................................. vi Kata Pengantar ...................................................................................................... vii Daftar Isi .............................................................................................................. viii Daftar Gambar........................................................................................................ xi Daftar Tabel ......................................................................................................... xiii Daftar Lampiran ................................................................................................... xiv BAB I
PENDAHULUAN
1.1 Latar Belakang Masalah............................................................................1 1.2 Tujuan Penelitian ......................................................................................1 1.3 Batasan Masalah .......................................................................................1 1.4 Metode Penelitian .....................................................................................2 1.5 Sistematika Penulisan ...............................................................................3 BAB II DASAR TEORI 2.1 Pengolahan Citra Digital ...........................................................................4 2.2 Pemampatan Data Citra.............................................................................7 2.2.1
Resolusi ...............................................................................................9
2.2.2 Kedalaman Bit.....................................................................................9 2.2.3
Konsep Redundansi.............................................................................9
a. Subsampling........................................................................................9 b. Pengurangan Kedalaman Bit.............................................................10 c. Penyandian Transformasi..................................................................10 2.3 Pemampatan GIF.....................................................................................10 2.3.1
Langkah-langkah agar Kapasitas Berkas GIF menjadi Lebih Kecil.11
8
2.3.2
Format Berkas GIF............................................................................12
2.4 Algoritma LZW.......................................................................................12 2.4.1
Algoritma Pemampatan LZW...........................................................12
2.4.2
Algoritma Penirmampatkan LZW.....................................................14
2.5 Steganografi ............................................................................................15 2.5.1
Sejarah Steganografi .........................................................................16
2.5.2
Kegunaan Steganografi .....................................................................17
2.5.3
Metode Steganografi .........................................................................18
1. Metode Penanaman ...........................................................................18 2. Metode Least Significant Bit.............................................................19 2.5.4
Algoritma Penyisipan Data ...............................................................21
BAB III PERANCANGAN PROGRAM 3.1 Perangkat Keras ......................................................................................23 3.2 Perangkat Lunak .....................................................................................23 3.3 Bagan-alir Program .................................................................................24 3.3.1
Pengambilan Citra.............................................................................24
3.3.2
Reduksi Warna ..................................................................................25
3.3.3
Duplikasi Palet ..................................................................................27
3.3.4
Penyisipan Data ke Citra...................................................................28
3.3.5
Menyimpan Hasil Citra ke Format GIF ............................................29
3.3.6
Pengambilan Data dari Citra format GIF ..........................................29
3.3.7
Konfirmasi Sandi ..............................................................................31
BAB IV HASIL PENELITIAN DAN PEMBAHASAN 4.1 Hasil Penelitian .......................................................................................34 4.1.1
Menjalankan Program .......................................................................34
4.1.2
Pembacaan Citra ...............................................................................38
4.1.3
Steganografi Citra .............................................................................38
4.1.4
Menyimpan ke dalam Format GIF....................................................40
4.1.5
Mengambil Data dari Citra GIF ........................................................40
9
4.2 Uji Coba dengan Data Sisipan di Bawah Kapasitas Maksimal Citra......41 4.2.1
Uji Coba dengan Data Uji Teks Dokumen (*.txt) ............................42
4.2.2
Uji Coba dengan Data Uji Teks Dokumen (*.doc,*.xls, ...................... *.ppt,*.pdf).......................................................................................43
4.2.3
Uji Coba dengan Data Uji Citra (*.jpeg,*.gif,*.PNG) .....................44
4.2.4
Uji Coba dengan Data Uji Audio dan Video (*.mp3,*.rm,*.3gpp).44
4.3 Uji Coba dengan Data Sisipan di Atas Kapasitas Maksimal Citra dan....... Pengujian Maksimal Citra Stego.............................................................45 4.4 Uji Coba Keberhasilan Pengambilan Data Hasil Steganografi...............48
BAB V PENUTUP 5.1 Kesimpulan .............................................................................................51 5.2 Saran........................................................................................................51 DAFTAR PUSTAKA ............................................................................................52 BIODATA MAHASISWA ....................................................................................54 LAMPIRAN...........................................................................................................55
10
DAFTAR GAMBAR
Gambar 2.1 Koordinat nilai intensitas pada citra....................................................4 Gambar 2.2 Komposisi warna RGB .......................................................................5 Gambar 2.3 Prose konversi citra analog ke citra digital beserta pengirimannya....8 Gambar 2.4 Hasil berkas pemampatan LZW........................................................11 Gambar 2.5 Hasil pemampatan LZW ...................................................................14 Gambar 2.6 Proses steganografi dengan metode penanaman ...............................18 Gambar 2.7 Steganografi berbasis citra digital dengan metode penyisipan LSB.19 Gambar 2.8 Proses penggunaan kunci-stego pada steganografi ...........................20 Gambar 3.1 Bagan alir program............................................................................24 Gambar 3.2 Diagram alir program pengambilan data...........................................30 Gambar 4.1 Jendela pembuka ...............................................................................35 Gambar 4.2 Tampilan jendela utama program .....................................................35 Gambar 4.3 Tampilan menu utama.......................................................................36 (a) Menu program .............................................................................36 (b) Menu Bantuan .............................................................................36 Gambar 4.4 Tampilan jendela tentang program ..................................................36 Gambar 4.5 Tampilan data tambahan ...................................................................38 Gambar 4.6 Tampilan data yang ditampung melebihi kapasitas ..........................39 Gambar 4.7 Tampilan ukuran data yang dapat disisipkan ....................................39 Gambar 4.8 Tampilan progress bar......................................................................40 Gambar 4.9 Tampilan citra ...................................................................................40 (a) Citra asli.......................................................................................40 (b) Citra hasil ....................................................................................40 Gambar 4.10 Jendela informasi hanya berkas GIF ................................................41 Gambar 4.11 Jendela informasi citra tidak terdapat data sisipan ..........................41 Gambar 4.12 Konfirmasi password........................................................................41 Gambar 4.13 Citra uji.............................................................................................42 (a) Citra 1 .........................................................................................42 (b) Citra 2 .........................................................................................42
11
(c) Citra 3 ..........................................................................................42 (d) Citra 4 ..........................................................................................42 Gambar 4.14 Tampilan kesalahan data melebihi kapasitas ...................................46 Gambar 4.15 Tampilan tanggapan program utama data melebihi kapasitas .........46 Gambar 4.16 Tampilan kesalahan maksimal citra stego........................................47 Gambar 4.17 Tampilan tanggapan program utama maksimal citra stego..............48 Gambar 4.18 Tampilan dialog menyimpan berkas ................................................50 Gambar 4.19 Tampilan berkas tidak dikenali program..........................................50
12
DAFTAR TABEL
Tabel 2.1
Tahapan proses pemampatan LZW...................................................13
Tabel 2.2
Tahapan proses penirmampatkan LZW ............................................15
Tabel 4.1
Hasil pengujian dengan data uji teks dokumen (*.txt) .....................42
Tabel 4.2
Hasil pengujian dengan data uji teks dokumen (*.doc, *.xls, *.ppt, ... *.pdf).................................................................................................43
Tabel 4.3
Hasil pengujian dengan data citra (*.jpg, *.gif, *.PNG) ..................44
Tabel 4.4
Hasil pengujian dengan data audio dan video (*.mp3, *.rm,............... *.3gpp) ..............................................................................................44
Tabel 4.5
Hasil pengujian dengan data uji diatas kapasitas daya tampung .......... citra....................................................................................................45
Tabel 4.6
Hasil pengujian maksimal citra stego ..............................................47
Tabel 4.7
Pengujian keberhasilan data hasil steganografi.................................49
13
BAB I PENDAHULUAN
1.1
Latar Belakang Masalah Kemajuan teknologi informasi yang pesat serta potensi pemanfaatannya
yang luas, membuka peluang bagi pengaksesan, pengelolaan, dan pendayagunaan citra digital dalam volume yang besar secara tepat dan akurat. Steganografi merupakan salah satu cara untuk menyembunyikan suatu pesan data rahasia di dalam data atau pesan lain yang tampak tidak mengandung apaapa, kecuali bagi orang yang mengerti kuncinya. Dalam bidang keamanan komputer, steganografi digunakan untuk menyembunyikan data rahasia saat enkripsi yang dilakukan tidak bersamaan. Jadi, walaupun enkripsi berhasil dipecahkan (decipher) pesan / data rahasia tetap tidak terlihat. Selain itu, pada kriptografi pesan disembunyikan dengan diacak sehingga pada kasus-kasus tertentu dapat dengan mudah mengundang kecurigaan, sedangkan pada steganografi pesan disamarkan dalam bentuk yang relatif aman sehingga tidak terjadi kecurigaan itu. Steganografi dapat digunakan pada berbagai macam bentuk data, yaitu citra, audio, dan video. Pada tugas akhir ini akan dibahas penyisipan data ke dalam sebuah citra yang hasil akhirnya berupa citra berformat GIF dengan metode penyisipan LSB.
1.2
Tujuan Penelitian Tujuan dari pembuatan Tugas Akhir ini adalah untuk menyisipkan data
rahasia kedalam sebuah citra berformat GIF dengan metode penyisipan LSB.
1.3
Batasan Masalah Pembatasan masalah pada penulisan tugas akhir ini sebagai berikut : 1. Proses Steganografi yang dilakukan adalah menyisipkan LSB ke dalam citra yang akan disisipi oleh data rahasia.
14
2. Data rahasia yang akan dsisipkan berupa data teks (*. txt, *.doc,*. Pdf), data citra (*.jpeg, *.gif, *.PNG) serta data audio (*.mp3) dan video (*.rm, *.3gpp). 3. Citra masukan berupa citra berwarna yang akan disisipi oleh data rahasia berupa citra belum dimampatkan berformat *.bmp maupun citra yang telah dimampatkan berformat *.jpeg,*. jpg, *.ico, *.wmf. 4. Hasil akhir dari data yang telah disisipi data rahasia disimpan ke dalam citra 8 bit dalam citra berformat GIF.
1.4
Metode Penelitian Langkah-langkah untuk menyelesaikan tugas akhir adalah sebagai berikut: 1. Metode Studi Literatur Bahan-bahan pustaka yang diperlukan untuk melengkapi dan mempelajari sesuai dengan masalah yang dihadapi. 2. Metode Pengumpulan Data Data-data yang diperlukan diperoleh melalui dokumen-dokumen yang berkaitan dan internet. 3. Metode Perancangan Sistem Sistem yang dirancang menggunakan proses Steganografi dengan metode penyisipan LSB. 4. Metode Implementasi Sistem Metode implementasi sistem merupakan metode untuk menyajikan hasil rancangan ke dalam pemrograman. Pada proses penyisipan data rahasia ke citra menggunakan sistem operasi Windows dengan bahasa pemrograman Borland Delphi 2006. 5. Metode Pengujian Sistem Pengujian sistem dilakukan dengan menyisipkan ke dalam LSB sebuah citra apakah sudah berjalan sesuai dengan yang dikehendaki.
15
1.5
Sistematika Penulisan BAB I
PENDAHULUAN Bab ini berisi latar belakang masalah, batasan masalah, dan metodologi yang digunakan untuk mengerjakan Tugas Akhir ini.
BAB II
DASAR TEORI Bab ini berisi dasar teori yang menjadi landasan pengerjaan Tugas Akhir. Dasar teori ini meliputi kompresi citra GIF, Steganografi dan penyisipan LSB pada citra.
BAB III
PERANCANGAN DAN IMPLEMENTASI Bab ini berisi tentang perancangan perangkat lunak yang akan digunakan untuk melakukan analisa pada tugas akhir ini, serta implementasi Steganografi dengan memanfaatkan penyisipan LSB.
BAB IV
HASIL PENELITIAN DAN PEMBAHASAN Bab ini akan dilakukan penelitian berupa sebuah sistem yang dapat digunakan untuk menyisipkan data rahasia ke dalam sebuah citra, hasil pengujian dan pembahasan
BAB V
KESIMPULAN DAN SARAN Bab ini menjelaskan tentang kesimpulan dari keseluruhan penjabaran sekaligus rekomendasi untuk pengembangan lebih lanjut.
16
BAB II DASAR TEORI
2.1
Pengolahan Citra Digital Citra digital dapat didefinisikan sebagai fungsi dua variabel, f x, y , dimana x dan y adalah koordinat spasial dan nilai f x, y adalah intensitas citra pada koordinat tersebut, hal tersebut diilustrasikan pada Gambar 2.1. Teknologi dasar untuk menciptakan dan menampilkan warna pada citra digital berdasarkan pada penelitian bahwa sebuah warna merupakan kombinasi dari tiga warna dasar, yaitu merah, hijau, dan biru (Red, Green, Blue - RGB). Komposisi warna RGB tersebut dapat dijelaskan pada subbab 2.2.
Gambar 2.1. Koordinat nilai intensitas pada citra
Sebuah citra diubah ke bentuk digital agar dapat disimpan dalam memori komputer atau media lain. Proses mengubah citra ke bentuk digital bisa dilakukan dengan beberapa perangkat, misalnya scanner, kamera digital, dan handycam.
17
Ketika sebuah citra sudah diubah ke dalam bentuk digital (selanjutnya disebut citra digital), bermacam-macam proses pengolahan citra dapat dilakukan terhadap citra tersebut.
Gambar 2.2 Komposisi Warna RGB
Ada banyak aplikasi pengolahan citra digital, namun pada dasarnya tujuan dari pengolahan citra digital adalah : 1. Peningkatan kualitas citra (Image enhancement) Operasi peningkatan kualitas citra bertujuan untuk menekankan ciri-ciri tertentu pada citra yang kemudian digunakan sebagai bahan analisis. Contohnya antara lain : kecerahan dan peningkatan kualitas tepi , penapisan derau, dan penajaman. Peningkatan kualitas citra berguna dalam operasi ektraksi ciri, analisis citra, dan tampilan informasi visual. Proses peningkatan kualitas itu sendiri tidak akan menambah isi informasi yang sudah ada, tetapi akan meningkatkan cakupan dinamis
18
dari ciri yang dipilih sehingga ciri yang akan dianalisis tersebut akan dapat dideteksi dengan mudah. 2. Pemulihan citra (Image restoration) Perbaikan citra berhubungan dengan penghilangan atau peminimasian degradasi yang diketahui pada citra. Ini termasuk penghilangan blur pada citra yang mengalami degradasi sehubungan dengan keterbatasan sensor atau lingkungannya, penapisan derau, dan koreksi terhadap distorsi geometris atau ketaklinearan yang disebabkan oleh sensor. 3. Pengukuran dan analisis citra (Image measurement and analysis) Pengukuran dan analisis citra bertujuan untuk melakukan pengukuran kuantitatif dari sebuah citra untuk menghasilkan deskripsi tentang citra tersebut. Dalam bentuk yang paling sederhana berupa pembacaan label dari barang belanjaan, atau mengukur besar dan orientasi sel darah dalam sebuah citra medis. 4. Rekonstruksi citra (Image reconstruction) Rekonstruksi citra dari proyeksi adalah kelas khusus dari permasalahan perbaikan citra dimana sebuah objek dua (atau lebih) dimensi direkonstruksi dari beberapa proyeksi satu dimensi. Tiap-tiap proyeksi diperoleh dengan memproyeksikan sinar-X paralel (atau radiasi tajam lainnya) melalui objek tersebut. 5. Pemampatan data citra (Image data compression) Jumlah data yang diasosiasikan dengan informasi visual adalah sangat besar,
sehingga
penyimpanan
penyimpanannya
yang
akan
sangat-sangat
membutuhkan
besar.
Meskipun
kapasitas kapasitas
penyimpanan dari beberapa media penyimpanan cukup besar, kecepatan aksesnya
biasanya
berbanding
terbalik
terhadap
kapasitasnya.
Pemampatan data citra berhubungan dengan minimisasi jumlah bit yang diperlukan untuk menyajikan sebuah citra. Mengenai pemampatan citra akan dibahas lebih lanjut pada subbab pemampatan data citra.
19
2.2
Pemampatan Data Citra Seperti yang telah disebutkan sebelumnya, tujuan pemampatan data citra adalah untuk mengurangi ukuran berkas yang menyimpan data citra tersebut. Berkas data citra biasanya berisi sejumlah besar informasi yang berulang dan banyak bagian yang tidak relevan. Teknik pemampatan data mengeksploitasi redundansi dan ketakrelevanan dengan mentransformasi berkas data menjadi berkas yang lebih kecil dari yang mana berkas citra aslinya nanti dapat direkonstruksi sama persis atau hampir sama dengan aslinya. Secara umum teknik pemampatan dapat dibagi menjadi dua bagian besar, tak berugi dan berugi. Algoritma pemampatan tak berugi menghilangkan hanya informasi berulang saja, sehingga pada saat penirmampatkan, citra yang telah dimampatkan dapat ditampilkan tepat seperti aslinya. Algoritma pemampatan berugi selain menghilangkan informasi yang berulang, juga menghilangkan informasi yang tidak relevan, dan dengan demikian hanya memungkinkan rekonstruksi yang mendekati citra aslinya, bukannya duplikat yang sama persis. Sebagaimana dapat kita perkirakan, algoritma pemampatan berugi memungkinkan rasio yang lebih tinggi. Contoh jenis pemampatan data citra yang berkarakteristik tak berugi adalah GIF Encoding. Dalam tugas akhir ini, akan membahas tentang pemampatan citra yang berkarakteristik tak berugi. Pemampatan citra bertujuan untuk meminimalkan jumlah bit yang
diperlukan untuk menunjukkan citra. Apabila sebuah foto berwarna berukuran 3 inci x 4 inci diubah ke bentuk digital dengan tingkat resolusi sebesar 500 (dpi), maka diperlukan 3 x 4 x 500 x 500 = 3.000.000 piksel. Setiap piksel terdiri dari 3 byte dimana masing-masing byte menunjukkan warna merah, hijau, dan biru. sehingga citra digital tersebut memerlukan volume penyimpanan sebesar 3.000.000 x 3 byte +1024 = 9.001.024 byte setelah ditambahkan jumlah byte yang diperlukan untuk menyimpan format awalan citra. Citra tersebut tidak bisa disimpan ke dalam disket yang berukuran 1.4 MB. Selain itu, pengiriman citra berukuran 9 MB memerlukan waktu lebih lama. Untuk koneksi internet dial-up (56 kbps), pengiriman citra berukuran 9 MB
20
memerlukan waktu 21 menit. Untuk itulah diperlukan pemampatan citra sehingga ukuran citra tersebut menjadi lebih kecil dan waktu pengiriman citra menjadi lebih cepat. Citra yang belum dimampatkan disebut citra mentah. Sementara citra hasil pemampatan disebut citra termampatkan (compressed image). Proses pengiriman dan penyimpanan citra tersebut diilustrasikan pada Gambar 2.3.
Scanner 600 dpi Citra analog
Foto berwarna ukuran 3 X 4 inch
Citra Digital 3 MegaPiksel
Disimpan dalam disket
Citra Digital 9 MB
Dikirim ke internet melalui modem
Gambar 2.3 Proses Konversi citra analog ke citra digital beserta pengirimannya
Pemampatan citra dikembangkan untuk memudahkan penyimpanan dan pengiriman citra. Teknik pemampatan yang ada sekarang memungkinkan citra dimampatkan sehingga ukurannya menjadi jauh lebih kecil daripada ukuran asli. Ada dua tipe utama pemampatan data, yaitu pemampatan tipe tak berugi dan pemampatan tipe berugi. Pemampatan tipe berugi adalah pemampatan yang menghilangkan informasi selama proses pemampatan. Akibatnya kualitas citra yang dihasilkan jauh lebih rendah daripada kualitas citra asli. Sementara itu, pemampatan tak berugi tidak menghilangkan informasi setelah proses pemampatan terjadi, akibatnya kualitas citra hasil pemampatan tidak menurun. Namun demikian, rasio pemampatan yang digunakan untuk pemampatan tak berugi lebih kecil daripada rasio pemampatan pada pemampatan berugi. Parameter-parameter citra yang penting dalam proses pemampatan diantaranya adalah sebagai berikut :
21
2.2.1 Resolusi Resolusi citra menyatakan ukuran panjang kali lebar dari sebuah citra. Resolusi citra biasanya dinyatakan dalam satuan piksel . Semakin tinggi resolusi sebuah citra, semakin baik kualitas citra tersebut. Namun, tingginya resolusi menyebabkan semakin banyaknya jumlah bit yang diperlukan untuk menyimpan dan mentransmisikan data citra tersebut.
2.2.2 Kedalaman Bit Kedalaman bit menyatakan jumlah bit yang dipelukan untuk menunjukkan tiap piksel citra pada sebuah frame. Kedalaman bit biasanya dinyatakan dalam satuan bit/piksel. Semakin banyak jumlah bit yang digunakan untuk menunjukkan sebuah citra, maka semakin baik kualitas citra tersebut.
2.2.3 Konsep Redundansi Redundansi merupakan suatu keadaan dimana penunjukkan suatu elemen data tidak bernilai signifikan dalam menunjukkan keseluruhan data. Keadaan ini menyebabkan data keseluruhan dapat ditunjukkan secara lebih kompak dengan cara menghilangkan penunjukkan dari sebuah elemen data yang redundan. Redundansi yang terdapat pada citra statik adalah redundansi spasial. Metode pemampatan citra berdasarkan redundansi spasial diantaranya adalah sebagai berikut :
a. Subsampling Subsampling merupakan metode pemampatan dengan mengurangi jumlah piksel yang diperlukan untuk menunjukkan suatu citra. Subsampling dapat dilakukan dengan dua cara. Cara pertama adalah mengambil piksel-piksel tertentu dari citra, misal piksel-piksel pada baris dan kolom saja. Cara kedua adalah dengan mengambil rata-rata dari kelompok piksel dan menggunakan nilai tersebut sebagai ganti nilai kelompok piksel ini. Cara ini lebih kompleks, tetapi menghasilkan kualitas yang lebih baik. Subsampling sebanding dengan pengurangan resolusi.
22
b. Pengurangan kedalaman bit Metode ini dilakukan dengan mengurangi jumlah bit yang digunakan untuk mre-penunjukkankan suatu piksel. Misalnya dengan mengurangi kedalaman bit dari 16 bit/piksel menjadi 8 bit/piksel. Metode ini mengurangi kualitas citra. Pada tugas akhir ini digunakan metode ini untuk mengurangi kedalaman bit karena citra yang digunakan adalah citra format GIF.
c. Penyandian transformasi Penyandian transformasi merupakan transformasi data dari kawasan ruang ke kawasan frekuensi. Cara ini menghasilkan data yang lebih mudah diproses untuk pemampatan lebih lanjut. Transformasi yang populer digunakan antara lain Alihragam Kosinus Diskret (DCT) yang dipakai dalam pemampatan JPEG dan Alihragam Wavelet Diskret (DWT) yang digunakan dalam pemampatan JPEG 2000. 2.3
Pemampatan GIF Graphic Interchange Format (GIF, dibaca jiff, tetapi kebanyakan orang
menyebutnya dengan giff ) yang dibuat oleh Compuserve pada tahun 1987 untuk menyimpan berbagai citra dengan format bitmap menjadi sebuah berkas yang mudah untuk diubah pada jaringan komputer. GIF adalah berkas format citra yang paling tua pada web, dan begitu dekatnya berkas format ini dengan web pada saat itu sehingga menggunakan format ini. GIF mendukung sampai 8 bit piksel , itu 8
berarti maksimum jumlah warnanya 256 warna (2 = 256 warna), dan mengunakan PP
PP
varian dari algoritma pemampatan Lempel-Ziv Welch (LZW). [2] P
PP
LZW adalah algoritma pemampatan tak berugi, antara pemampatan dan penirmampatkan waktunya adalah simetris . LZW menggunakan kamus data (sering disebut dengan tabel penerjemah atau tabel string) untuk menunjukkan data menjadi linier di dalam masukan laju tak termampat. Pertama kali suatu urutan ditemukan sandi yang berbeda, maka sandi tersebut dan ditambahkan ke dalam kamus data. Semua data yang ada dibandingkan dengan data masukan ,jika sama maka diwakilkan dengan sebuah sandi.
23
2.3.1 Langkah-langkah agar kapasitas berkas GIF menjadi lebih kecil Jika menginginkan kapasitas berkas GIF yang sangat kecil, maka dalam merancangnya disimpan orientasi baris LZW. GIF dimampatkan dengan redundansi mendatar dan jangan menambahkan detil tegak atau derau ke dalam citra GIF. Orientasi kanal mendatar dari sebuah warna yang dimampatkan lebih baik daripada menggunakan orientasi kanal tegak. Untuk menghidari adanya perubahan citra, yaitu dengan cara mengurangi baris dari sebuah warna. Semua itu merupakan karakteristik dari algoritma pemampatan LZW yang terbaik, contohnya terlihat pada Gambar 2.4.
Gambar 2.4 Hasil Berkas Pemampatan LZW
Berkas GIF dapat disimpan dalam dua jalan : secara berurutan ( Dari atas ke bawah) dan pembagian dengan baris ( 8 baris, 4 baris dan 2 baris). Pembagian baris pada citra dengan resolusi yang rendah dan cepat dimana secara gradual datangnya lebih fokus dengan perubahan dari penambahan kapasitas berkas.
24
2.3.2 Format Berkas GIF Terdapat dua tipe dari GIFs, antara lain: 1. GIF87a : support dengan interlacing dan kapasitas dari beberapa berkas. Tehnik itu dinamakan GIF87 karena pada tahun 1987 standar ini ditemukan dan dijadikan standar. 2. GIF89a : adalah kelanjutan dari spesifikasi GIF87a dan penambahan pada transparansi, pemberian tulisan dan animasi dari text dan citra. Algoritma pemampatan LZW yang digunakan oleh GIF adalah salah satu algoritma pemampatan tujuan umum yang terbaik, pemampatan LZW tidak dirancang untuk citra yang mempunyai spesifikasi tinggi. Algoritma LZW tidak dapat digunakan dengan baik pada bilevel (hitam dan putih) atau true color images.
2.4
Algoritma LZW Algoritma LZW dikembangkan dari metode pemampatan yang dibuat oleh
Ziv dan Lempel pada tahun 1977. Algoritma ini melakukan pemampatan dengan menggunakan kamus, dimana fragmen-fragmen teks diganti dengan indeks yang diperoleh dari sebuah kamus. Prinsip sejenis juga digunakan dalam sandi Braille, di mana sandi-sandi khusus digunakan untuk menunjukkan kata-kata yang ada. Pendekatan ini bersifat adaptif dan efektif karena banyak karakter dapat disandikan dengan mengacu pada string yang telah muncul sebelumnya dalam teks. Prinsip pemampatan tercapai jika referensi dalam bentuk pointer dapat disimpan dalam jumlah bit yang lebih sedikit dibandingkan string aslinya.
2.4.1 Algoritma pemampatan LZW Algoritma pemampatan LZW sebagai berikut : 1. Kamus diinisialisasi dengan semua karakter dasar yang ada : {‘A’..’Z’,’a’..’z’,’0’..’9’}. 2. P menunjukkan karakter pertama dalam laju karakter. 3. C menunjukkan karakter berikutnya dalam laju karakter. 4. Apakah string (P + C) terdapat dalam kamus ?
25
• Jika ya, maka P adalah P + C (gabungkan P dan C menjadi string baru). i. Keluaran sebuah sandi untuk menggantikan string P. ii. Tambahkan string (P + C) ke dalam kamus dan berikan nomor / sandi berikutnya yang belum digunakan dalam kamus untuk string tersebut. iii. String P menggantikan string C. 5. Apakah masih ada karakter berikutnya dalam laju karakter ? Jika ya, maka kembali ke langkah 2. Jika tidak, maka keluaran sandi yang menggantikan string P, lalu terminasi proses berhenti.
Sebagai contoh, string “ABBABABAC” akan dimampatkan dengan algoritma LZW. Isi kamus pada awal proses diset dengan tiga karakter dasar yang ada: “A”, “B”, dan “C”. Tahapan proses pemampatan ditunjukkan pada Tabel 2.1. Kolom posisi menyatakan posisi sekarang dari laju karakter dan kolom karakter menyatakan karakter yang terdapat pada posisi tersebut. Kolom kamus menyatakan string baru yang sudah ditambahkan ke dalam kamus dan nomor indeks untuk string tersebut ditulis dalam kurung siku. Kolom keluaran menyatakan sandi keluaran yang dihasilkan oleh langkah pemampatan. Hasil proses pemampatan ditunjukkan pada Gambar 2.5. Tabel 2.1 Tahapan proses pemampatan LZW
Langkah Posisi
Karakter
Kamus
Keluaran
1.
1
A
[4] A B
[1]
2.
2
B
[5] B B
[2]
3.
3
B
[6] B A
[2]
4.
4
A
[7] A B A
[4]
5.
6
A
[8] A B A C
[7]
6.
9
C
---
[3]
26
Gambar 2.5 Hasil Pemampatan LZW
Proses penirmampatkan pada LZW dilakukan dengan prinsip yang sama seperti proses pemampatan. Algoritma penirmampatkan dijelaskan sub bab 2.4.2. Pada awalnya, kamus diinisialisasi dengan semua karakter dasar yang ada. Lalu pada setiap langkah, sandi dibaca satu per satu dari laju sandi. Dikeluarkan string dari kamus yang berkorespondensi dengan sandi tersebut, dan ditambahkan string baru ke dalam kamus. Tahapan proses penirmampatkan ini ditunjukkan pada Tabel 2.2. Metode LZW yang diterapkan dalam penelitian ini berbentuk dinamis, dimana hanya dilakukan satu kali pembacaan terhadap berkas yang akan dimampatkan balik. Penyandian data dilakukan secara bersamaan dengan proses penambahan string baru ke dalam kamus.
2.4.2 Algoritma penirmampatkan LZW Algoritma penirmampatkan LZW sebagai berikut : 1. Kamus diinisialisasi dengan semua karakter dasar yang ada : {‘A’..’Z’,’a’..’z’,’0’..’9’}. 2. CW menunjukkan sandi pertama dari laju sandi (menunjuk ke salah satu karakter dasar). 3. Lihat kamus dan keluaran string dari sandi tersebut (string CW) ke laju karakter. 4. String PW menggantikan string CW, dimana CW menunjukkan sandi berikutnya dari laju sandi. 5. Apakah string CW terdapat dalam kamus ? . Jika ada, maka : i. keluaran string CW ke laju karakter
27
ii. P menunjukkan string PW iii. C menunjukkan karakter pertama dari string CW iv. Tambahkan string (P+C) ke dalam kamus. Jika tidak, maka : a. P menggantikan string PW b. C menggantikan karakter pertama dari string.PW c. Keluaran string (P+C) ke laju karakter dan tambahkan string tersebut ke dalam kamus (sekarang berkorespondensi dengan CW); 6. Apakah terdapat sandi lagi di laju sandi ? Jika ya, maka kembali ke langkah 4. Jika tidak, maka terminasi proses berhenti. Tabel 2.2 Tahapan proses penirmampatkan LZW
2.5
Langkah Sandi
Keluaran
Kamus
1.
[1]
A
---
2.
[2]
B
[4] A B
3.
[2]
B
[5] B B
4.
[4]
AB
[6] B A
5.
[7]
ABA
[7] A B A
6.
[3]
C
[8] A B A C
Steganografi Steganografi adalah suatu teknik untuk menyembunyikan informasi
yang bersifat pribadi dengan sesuatu yang hasilnya akan tampak seperti informasi normal lainnya. Steganografi biasanya sering disalah artikan dengan kriptografi karenanya keduanya sama-sama bertujuan untuk melindungi informasi yang berharga. Perbedaan yang mendasar antara keduanya yaitu steganografi berhubungan dengan informasi tersembunyi sehingga tampak seperti tidak ada informasi tersembunyi sama sekali. Jika seseorang mengamati objek yang menyimpan informasi tersembunyi tersebut, dan tidak menyangka bahwa terdapat pesan rahasia dalam objek tersebut. Hal ini menyebabkan seseorang tidak akan berusaha memecahkan informasi dari objek tersebut. Kata steganografi berasal dari bahasa Yunani, yaitu dari kata Steganós
28
(tersembunyi) dan Graptos (tulisan). Steganografi di dunia modern biasanya mengacu pada informasi atau suatu arsip yang telah disembunyikan ke dalam suatu arsip citra digital, audio, atau video. Satu hal penting yang menjadi kelebihan steganografi adalah kemampuannya untuk menipu persepsi manusia, manusia tidak memiliki insting untuk mencurigai adanya arsip-arsip yang memiliki informasi yang tersembunyi di dalamnya, terutama bila arsip tersebut tampak seperti arsip normal lainnya. Namun, begitu terbentuk pula suatu teknik yang dikenal dengan steganalysis, yaitu suatu teknik yang digunakan untuk mendeteksi penggunaan steganografi pada suatu arsip. Seorang steganalyst tidak berusaha untuk melakukan dekripsi terhadap informasi yang tersembunyi dalam suatu arsip, yang dilakukan adalah berusaha untuk menemukannya. Terdapat beberapa cara yang dapat digunakan untuk mendeteksi steganografi seperti melakukan pengamatan terhadap suatu arsip dan
membandingkannya
dengan
salinan arsip yang dianggap belum direkayasa, atau berusaha mendengarkan dan membandingkan perbedaannya dengan arsip lain bila arsip tersebut adalah dalam bentuk audio. [11] PP
PP
2.5.1 Sejarah Steganografi Seperti kriptografi, penggunaan steganografi sebetulnya telah digunakan berabad-abad yang lalu bahkan sebelum istilah steganografi itu sendiri muncul. Berikut adalah contoh penggunaan steganografi di masa lalu: 1. Selama terjadinya Perang Dunia ke-2, tinta yang tidak tampak telah digunakan untuk menulis informasi pada lembaran kertas sehingga saat kertas tersebut jatuh di tangan pihak lain hanya akan tampak seperti lembaran kertas kosong biasa. Cairan seperti air kencing, susu, vinegar, dan jus buah digunakan sebagai media penulisan sebab bila salah satu elemen tersebut dipanaskan, tulisan akan menggelap dan tampak melalui mata manusia. 2. Pada sejarah Yunani kuno, masyarakatnya biasa menggunakan seorang pembawa pesan sebagai perantara pengiriman pesan. Pengirim pesan tersebut akan dicukur rambutnya, untuk kemudian dituliskan suatu pesan
29
pada kepalanya yang sudah botak. Setelah pesan dituliskan, pembawa pesan harus menunggu hingga rambutnya tumbuh kembali untuk dapat mengirimkan pesan kepada pihak penerima. Pihak penerima kemudian akan mencukur rambut pembawa pesan tersebut untuk melihat pesan yang tersembunyi. 3. Metode lain yang digunakan oleh masyarakat Yunani kuno adalah dengan menggunakan lilin sebagai media penyembunyi pesan mereka. Pesan dituliskan pada suatu lembaran, dan lembaran tersebut akan ditutup dengan lilin untuk menyembunyikan pesan yang telah tertulis. Pihak penerima kemudian akan menghilangkan lilin dari lembaran tersebut untuk melihat pesan yang disampaikan oleh pihak pengirim.
2.5.2 Kegunaan Steganografi Seperti perangkat keamanan lainnya, steganografi dapat digunakan untuk berbagai macam alasan, beberapa diantaranya untuk alasan yang baik, namun dapat juga untuk alasan yang tidak baik. Untuk tujuan legitimasi dapat digunakan pengamanan seperti citra dengan tanda air dengan alasan untuk perlindungan hak cipta. Digital tanda air (yang juga dikenal dengan sidik jari, yang dikhususkan untuk hal-hal menyangkut hak cipta) sangat mirip dengan steganografi karena menggunakan metode penyembunyian dalam arsip, yang muncul sebagai bagian asli dari arsip tersebut dan tidak mudah dideteksi oleh kebanyakan orang. Steganografi juga dapat digunakan sebagai cara untuk membuat pengganti suatu nilai hash satu arah (yaitu pengguna mengambil suatu masukan panjang variabel dan membuat sebuah keluaran panjang statis dengan tipe string untuk melakukan verifikasi bahwa tidak ada perubahan yang dibuat pada variabel masukan yang asli). Selain itu juga, steganografi dapat digunakan sebagai catatan tag untuk citra langsung. Terakhir, steganografi juga dapat digunakan untuk melakukan perawatan atas kerahasiaan informasi yang berharga, untuk menjaga data tersebut dari kemungkinan sabotase, pencuri, atau dari pihak yang tidak berwenang. Sayangnya, steganografi juga dapat digunakan untuk alasan yang ilegal. Sebagai
30
contoh, jika seseorang telah mencuri data mereka dapat menyembunyikan arsip curian tersebut ke dalam arsip lain dan mengirimkannya keluar tanpa menimbulkan kecurigaan siapapun karena tampak seperti email atau arsip normal. Selain itu, seseorang dengan hobi menyimpan pornografi, atau lebih parah lagi menyimpannya dalam hard disk. Mereka dapat menyembunyikan hobi buruknya melalui steganografi. Begitu pula dengan masalah terorisme, steganografi dapat digunakan oleh para teroris untuk menyamarkan komunikasi mereka dari pihak luar.
[9] PP
2.5.3 Metode Steganografi Terdapat banyak metode yang digunakan dalam menyembunyian data ke dalam data lainnya. Berikut adalah penjelasan mengenai beberapa metode yang banyak digunakan dalam steganografi.
1. Metode Penanaman Steganografi menyimpan pesan rahasia dalam suatu arsip yang biasanya diparameteri oleh suatu kunci-stego, dan pendeteksian atau pembacaan atas informasi tersembunyi tersebut dapat dilihat pada gambar 2.6.
Kunci-stego Sampul < Jenis Data >
Proses penanaman
Menanam < Jenis Data >
Kunci-stego Stego < jenis data >
Proses ekstraksi
Menanam < Jenis Data >
Gambar 2.6 Proses steganografi dengan metode penanaman
Metode penanaman ini juga biasa disebut dengan metode injection karena pesan rahasia disuntikkan langsung pada arsip lainnya dengan sedikit pengacakan atau enkripsi. [9] PP
PP
31
2. Metode Least Significant Bit Dalam kawasan citra, steganografi dilakukan dengan metode penggantian atau penyisipan bit pada LSB atau sering disebut manipulasi derau (noise manipulation). Disebut demikian karena pesan rahasia pada citra yang disisipkan, akan mengubah piksel tertentu pada citra. Jika perubahan tersebut terlihat, akan nampak seperti derau pada citra tersebut. Pendekatan ini melibatkan citra berformat tak berugi, dan pesan disisipkan dan diambil secara langsung, tanpa melibatkan proses alih ragam. Sedangkan dalam kawasan alih ragam, proses dilakukan dengan melibatkan manipulasi dari algoritma alih ragam citra. Citra Awal
A7
A6
A5
A4
A3
A1
A0
Lokasi Bit dari piksel yang akan disisipi
Pesan Rahasia
A7
A6
A5
A4
A3
A1
P0
Lokasi Bit yang telah disisipi data
Citra Stego/Pembawa = Citra Awal + Pesan Rahasia
Gambar 2.7 Steganografi berbasis citra digital dengan metode penyisipan LSB.
32
Dalam metode penyisipan LSB seperti yang ditunjukkan oleh Gambar 2.7, steganografi dilakukan dengan cara mengganti satu bit piksel citra awal (A0) dengan bit-bit dari pesan rahasia (P0) yang akan disembunyikan. Berkas citra pembawa yang telah disisipi pesan rahasia, atau disebut juga berkas atau citra stego, dapat dikirimkan ke penerima. tersebut
atau
melakukan
Penerima dapat mengekstraksi pesan
desteganografi
dari
citra
pembawa
sehingga
mendapatkan bit-bit pesan tersembunyi dari citra pembawa. Beberapa versi dari metode LSB telah bermunculan. Kini sangat memungkinkan untuk menggunakan menggunakan pembangkit nomer acak yang diinisialisasi dengan kunci-stego dan mengkombinasikan keluarannya dengan data masukan, dan kemudian menyembunyikannya dalam suatu arsip citra. Kehadiran seorang pengawas tidak cukup untuk meyakinkan keberhasilan penambahan sebuah pesan di lokasi tertentu (pada rentetan bit tertentu), karena pengawas itu sendiri sangat mungkin mengubah letak dari pesan rahasia tersebut, walaupun tidak mengetahui lokasi dari pesan rahasia tersebut atau tidak dapat membacanya karena telah dienkripsi. Karena itulah penggunaan kunci-stego menjadi penting karena keamanan atas suatu sistem pengaman tidak dapat didasarkan pada kerahasiaan dari algoritmanya itu sendiri, namun karena adanya keberadaan dari suatu kunci rahasia.[13] Gambar 2.8 menunjukkan proses tersebut. PP
PP
Tulisan yang harus ditanam
Data citra
Kunci pengguna
Posisi pembangkit Urutan
Penanaman Letak Urutan
Citra Stego
Gambar 2.8 Proses penggunaan kunci-stego pada steganografi
Metode LSB pada umumnya beroperasi pada citra bitmap. Data yang disembunyikan tidak dapat dikategorikan sebagai tanda air karena jika terjadi perubahan kecil pada citra tersebut (pemotongan, pemampatan, atau degradasi warna), maka informasi tersembunyi tersebut akan hilang walaupun perubahan yang terjadi selama proses penanaman tidak terlihat. [9] PP
PP
33
2.5.4 Algoritma Penyisipan data Algoritma penyisipan data menggunakan metode penyisipan LSB yaitu menyisipkan satu bit pada posisi bit yang terendah.Terdapat dua tahap yaitu penyandian dan pengawasandian. Langkah-langkahnya adalah sebagai berikut : Penyandian Langkah 1
Buat palet baru sebanyak 128 dari hasil reduksi warna. Jika data citra 24 bit dibuat menjadi hanya 8 bit.
Langkah 2
Mengubah tiap piksel citra menjadi deretan bit-bit dalam bentuk 8bit.
Langkah 3
Tiap 8-bit piksel sebuah citra diubah ke dalam indeks warna, indeks tersebut menunjukkan nomor palet warna. Misal : nilai 5 merupakan palet warna biru.
Langkah 4
Mengubah data sisipan kedalam deretan bit-bit dalam bentuk 8-bit. Misal : karakter ’A’ dalam bit ’01110001’. Mengambil satu bit data sisipan untuk dsisipkan ke piksel pertama dari citra uji. M=N+i
(2.1)
M = nilai palet baru N = nilai palet yang disisipi data i = bit data Dalam satu piksel hanya dapat disisipi 1-bit data saja. Dari persamaan tersebut dapat diketahui nilai palet baru setelah penyisipan. Jika data yang disispi ’0’ maka nilai palet tidak berubah, namun jika data sisipan bernilai ’1’ maka akan merubah nilai palet. Perubahan nilai palet akan merubah warna. Langkah 5
Membuat palet baru yang sama dengan palet awal. Berarti nomor palet 0,1...127 mempunyai warna sama dengan nomor palet 128,129,...255. Palet baru ini digunakan untuk memanipulasi warna palet yang mengalami perubahan saat disisipi data.
Langkah 6
Melakukan langkah 1 sampai ke 5 untuk piksel selanjutnya per baris sampai data sisipan habis.
34
Pengawasandian Langkah 1
Memindai per baris piksel dalam satu citra
Langkah 2
M < N berarti tidak ada data sisipan. Jika M > N berarti terdapat data sisipan. Dalam contoh : nilai N = 5, jika N<5 berarti tidak ada data sisipan. Jika N>5 berarti ada data sisipan.
Langakah 3
Bit yang ada pada piksel ditampung sementara sampai tersusun 8bit. Dari bit-bit yang telah tersusun diubah menjadi satu karakter kembali. Misal dari bit-bit yang tersusun ’01110001’ atau kembali menjadi karakter ’A’.
35
BAB III PERANCANGAN PROGRAM
Pada perancangan program ini dijelaskan spesifikasi perangkat-keras dan perangkat-lunak yang digunakan untuk membuat dan menjalankan program. Berikut penjelasan perangkat-keras dan perangkat-lunak yang digunakan.
3.1
Perangkat-keras Perangkat-keras yang digunakan untuk membuat dan menjalankan program adalah satu set komputer jinjing (laptop). Berikut spesifikasi perangkat-keras yang digunakan. 1. Merek
: HP Compaq nx6120
2. Sistem Komputer
: Intel Pentium Centrino M 1,87 GHz
3. Sistem Operasi
: Microsoft Windows XP Profesional Service Pack 2
4. Media Tampilan
: VGA (true color 32 bit, 1024
800 piksel)
dengan chipset intel Xtreme 128 Mb
3.2
5. Media masukan
: mouse
6. Memori
: 512 MB RAM.
Perangkat-lunak Perangkat-lunak yang digunakan adalah Borland Delphi. Borland Delphi merupakan paket pemrograman yang bekerja dalam sistem operasi Windows, agar dalam pembuatan program dapat dikompilasi, persyaratan minimal pembuatan program menggunakan perangkat lunak Delphi dan sistem operasi Microsoft Windows XP Profesional harus dipenuhi. Hal ini untuk
36
menghindari jika dalam perangkat lunak versi sebelumnya tidak terdapat beberapa fungsi yang ada pada versi sesudahnya.
3.3.
Bagan-alir Program Bagan-alir pembuatan program untuk melakukan Penyisipan data citra menggunakan teknik penyisipan bit LSB
dimulai dari pengambilan citra
sampai dengan mengambil data yang telah disisipkan ke dalam citra GIF. Pada Gambar 3.1 ditunjukkan bagan-alir yang digunakan dalam perancangan program Penyisipan data. Mulai
Pengambilan citra Reduksi warna 24 bit ke 8 bit
Duplikasi palet warna
Penyisipan bit ke LSB
Simpan citra dalam format GIF Berhenti
Gambar 3.1 Bagan-alir program.
37
3.3.1 Pengambilan Citra Citra yang diolah adalah citra warna digital 24-bit yang belum dimampatkan dengan berkas penyimpanan berekstensi *.bmp atau yang telah dimampatkan dengan berkas penyimpanan *.jpeg, *.jpeg, *.gif . Citra digital tersebut selanjutnya dibaca dengan perintah : procedure TMainForm.Bukafilegambar1Click(Sender: TObject); begin if OpenPictureDialog1.Execute then begin button3.Visible:=false; button2.Visible:=true; modedecode:=false;
image1.picture.LoadFromFile(openpicturedialog1.FileName); maxchar:=image1.Width*image1.Height div 8; adagambar:=true; hasprocess:=false; StatusBar1.SimpleText:='Silahkan ketik atau ambil file data(teks) yang akan disisipkan. Maksimal '+inttostr(maxchar)+' karakter.'; GroupBox1.Caption:='
Gambar
(maksimal
'+inttostr(maxchar)+' byte dapat disisipkan) '; end; end;
parameter width dan height merupakan lebar dan panjang dari citra asli dalam bentuk citra digital. Pengambilan gambar hanya akan dilakukan apabila tidak dibatalkan pemilihan berkas dalam OpenPictureDialog1, atau dengan kata lain OpenPictureDialog jadi dieksekusi. Pertama-tama yang dilakukan adalah membuat FormCitra sebagai tempat untuk menampilkan citra, dengan menggunakan fungsi Application.CreateForm.
3.3.2 Reduksi warna Citra yang akan direduksi warnanya, pertama-tama diubah dulu ke dalam bit agar mudah untuk mengurangi ke dalaman bit citra tersebut. Program untuk merubah berkas citra ke dalam bit :
38
procedure loaddata(var d:TDataRek;fn:string); var f:file; begin assignfile(f,fn); reset(f,1); setlength(d.data,filesize(f)); blockread(f,d.data[0],filesize(f)); d.namafile:=ExtractFileName(fn); d.size:=filesize(f); closefile(f); d.id:='###'; end; function datatobits(x:tdatarek):tbits; var n,i,j:integer; b:^byte; begin result:=tbits.create; b:=@x; result.Size:=8*(sizeof(x)-4)+8*(high(x.data)+1);
Sebelum berkas diubah ke bit terlebih dahulu ditampung ke memori program. setlength(d.data,filesize(f)) berfungsi menampung berkas yang akan disimpan. Untuk merubah ke bit diperlukan variabel n, i, j berupa integer. Sedangkan variabel b berfungsi untuk menyatakan ke dalam byte. Format berkas header berisi sandi, nama berkas, jumlah d bit yang disisipkan. Untuk setiap 1 piksel diwakili 1 bit, jadi untuk 8 piksel berarti terdapat 1 byte. Dalam berkas citra yang akan disisipi data untuk mengetahui jumlah maksimum data yang akan disisipi dapat dihitung dengan persamaan : max
w h 8
Perintah program : maxchar:=image1.Width*image1.Height div 8;
(3.1)
39
Setelah diubah ke bit kemudian diproses untuk reduksi warna yang berfungsi agar dapat disimpan ke dalam format GIF ( karena hanya 8 bit ). Btmpp, btmp
merupakan pernyataan citra bitmap dalam bahasa program delphi.
Langkah pengurangan warna citra yaitu inisialisasi terlebih dahulu citra, kemudian di set lebar, tinggi, dan format warna.
btmpp:=tbitmap.create; // inisialisasi btmpp.Width:=image1.Width; // set lebar btmpp.height:=image1.Height; // set tinggi btmpp.PikselFormat:=pf24bit; // set format warna
Membuat palet kanvas yang baru untuk diubah warna dari 24 bit warna menjadi 8 bit warna. btmpp.Canvas.Draw(0,0,image1.picture.Graphic); btmp:=ReduceColors(btmpp,rmPalette,dmFloydSteinberg,0,mypalet);
3.3.3 Duplikasi palet Pembentukan palet duplikat berfungsi untuk menciptakan palet 128 warna dasar yang sama dengan palet warna citra aslinya. Jadi warna ke 0 dan 128 adalah sama, 1 dan 129 sama dan demikian seterusnya sampai palet ke 255. function mypalet:HPALETTE; var i,r,g,b
: integer;
Pal
: tMaxLogPalette;
begin Pal.palVersion := $0300; Pal.palNumEntries := 256; i:=0; for r := 0 to 3 do for g := 0 to 7 do for b := 0 to 3 do begin
40
Penggunaan warna RGB pada program ini dipilih komposisi warna R = 3, G = 7, dan B = 3. Berarti ada sebanyak 128 warna dari kombinasi RGB. 22 = 4 level warna merah, 23 = 8 kombinasi warna hijau, dan 22 = 4 kombinasi warna biru. Dengan demikian warna hijau yang paling dominan dan memiliki kombinasi yang paling banyak Untuk membuat data palet dengan warna tertentu digunakan perintah sebagai berikut : with (Pal.palPalEntry[i]) do begin peRed := r*255 div 3; // merah peGreen := g*255 div 7; // hijau peBlue
:=
b*255 div 3; // biru
peFlags := PC_NOCOLLAPSE; end;
Setelah didapat warna yang sama dengan palet citra, kemudian dibuat data palet untuk warna yang sama dengan diatas namun untuk (nomor warna+128). with (Pal.palPalEntry[i+128]) do begin peRed := r*255 div 3; peGreen := g*255 div 7; peBlue
:=
b*255 div 3;
peFlags := PC_NOCOLLAPSE; end; inc(i); end; Result := CreatePalette(pLogPalette(@Pal)^); end;
3.3.4 Penyisipan data ke citra Penyisipan data rahasia ke dalam citra pada tugas akhir ini menggunakan metode penyisipan LSB. Data yang akan disisipkan diubah terlebih dahulu ke bit agar mudah dalam melakukan penyisipan. Letak penyisipannya terletak pada posisi bit terendah. Proses perubahan data ke bit : loaddata(dr,edit5.text); dr.pass:=edit4.text; data:=datatobits(dr); for i:=0 to high(x.data) do begin
41
for j:=0 to 7 do begin result.Bits[n]:=(x.data[i] and (1 shl j))>0; inc(n); // majukan n end;
Proses penyisipan bit LSB : n:=0; for y:=0 to btmp.Height-1 do begin p:=btmp.ScanLine[y]; for x:=0 to btmp.Width-1 do begin if (n
Fungsi Scanline digunakan untuk membaca nilai piksel langsung pada memori citra, sehingga pengolahan citra dapat dilakukan secara lebih cepat dibandingkan cara konvensional.
3.3.5 Menyimpan hasil citra ke format GIF Setelah citra diproses, langkah terakhir adalah menyimpan hasil citra yang telah disisipi ke dalam format GIF. Hasil keluaran citra yang telah berformat GIF memiliki jumlah 28 warna = 256 warna ( karena hanya terdapat 8 bit ). Proses penyimpanan ke format GIF :
procedure TMainForm.SimpansebagaiGIF1Click(Sender: TObject); begin if not hasprocess then begin Application.MessageBox('Gambar !','Kesalahan',0); exit; end; if SavePictureDialog1.execute then
belum
diproses
42
mygif.SaveToFile(savepicturedialog1.filename); end;
3.3.6 Pengambilan data dari citra format GIF Untuk citra yang telah disimpan dari program tersebut semua adalah dalam format GIF. Proses pengambilan data dari citra ditunjukkan bagan alir pada Gambar 3.2.
Mulai
Pengambilan citra GIF
Tanya sandi
Salah
Benar Proses Data
Simpan Data
Berhenti
Gambar 3.2 Diagram alir program pengambilan data
43
Cuplikan program untuk pengambilan data dari citra :
procedure TMainForm.Bukafile1Click(Sender: TObject); var x,y:integer; p:^byte; b:byte; n:integer; id:string[5]; db:^byte; dn:integer; tt:tdatetime; begin //
mendecode
gambar
GIF
untuk
mengambil
data
yg
disisipkan if OpenPictureDialog1.Execute then begin tt:=now; if pos('.gif',lowercase(openpicturedialog1.FileName))=0 then begin application.MessageBox('Hanya file GIF’,’Informasi’,0); exit; end;
Perintah diatas digunakan untuk mengambil citra GIF saja, jadi jika citra yang disimpan tidak dalam format *.GIF berarti program tidak dapat menampilkan citra yang akan didekode. edit5.text:=''; edit6.text:=''; modedecode:=true; image1.picture.LoadFromFile(openpicturedialog1.FileName); image2.picture.Assign(image1.Picture); adagambar:=true; hasprocess:=true; n:=0; b:=0; // load file yang akan didecode mygif.LoadFromFile(openpicturedialog1.FileName); id:='';
44
db:=@ext; dn:=0; for y:=0 to mygif.height-1 do begin p:=mygif.Bitmap.ScanLine[y]; for x:=0 to mygif.Width-1 do begin
Perintah edit5.text:=''; berguna untuk mengosongkan nama berkas. modedekode:=true;
digunakan untuk menentukan bentuk program yang
dipanggil adalah bentuk dekode. Setelah citra sudah ditampilkan , db:=@ext merupakan pointer ke lokasi penyimpan bit.
3.3.7 Konfirmasi Sandi Konfirmasi sandi diperlukan untuk membuka citra yang telah disimpan ke dalam format GIF. Cuplikan programnya : edit4.text:=inputbox('Keamanan','Masukkan kata sandi',''); if
edit4.text<>ext.pass
then
application.MessageBox('Kata
sandi anda salah !','Informasi',0) else begin button2.Visible:=false; button3.Visible:=true; edit4.Enabled:=false; edit5.text:=ext.namafile; edit6.text:=inttostr(ext.size); StatusBar1.SimpleText:='Silahkan simpan data yang tersimpan di gambar ini.'; GroupBox1.Caption:=' Gambar Yang akan didekode '; end;
Jika sandi yang dimasukkan salah maka akan ada jendela peringatan yang berbunyi “kata sandi anda salah” , sehingga data tidak dapat didekode. Namun jika kata sandi benar maka data dapat di dekode. mygif.LoadFromFile(openpicturedialog1.FileName); id:=''; db:=@ext; dn:=0; for y:=0 to mygif.height-1 do begin
45
p:=mygif.Bitmap.ScanLine[y]; for x:=0 to mygif.Width-1 do begin if p^>=128 then b:=b+(1 shl n); inc(p); n:=n+1; if n=8 then begin n:=0; if length(id)<3 then id:=id+chr(b); if dn<sizeof(tdatarek)-4 then db^:=b; if
dn>=sizeof(tdatarek)-4)and
dn<sizeof(tdatarek)-
4+ext.size) then db^:=b; inc(db); inc(dn); if dn=sizeof(tdatarek)-4 then begin setlength(ext.data,ext.size); db:
[email protected][0]; end; b:=0; end; end; if (length(id)=3) and (id<>#3'##') then break; end; tt:=(now-tt)*(24*60*60); label1.caption:='Waktu
proses
:'+format('%5.5f
detik',[tt]); if
id<>#3'##'
then
application.MessageBox('Gambar
ini
tidak mengandung data !','Informasi',0) else begin
Untuk mendekode pada citra dibaca tiap-tiap piksel apakah bit ke 7 bernilai 1, untuk setiap 8 piksel digabungkan menjadi 1 karakter ASCII. Jika sudah terkumpul 8 bit, disimpan di header dan terakhir disimpan di data. Jika ukuran berkas sudah diketahui dengan perintah : if dn=sizeof(tdatarek)-4
Disiapkan
pointer
penampung
setlength(ext.data,ext.size); db:
[email protected][0]; end;
data
dengan
perintah
:
46
b:=0; end;
Untuk mengetahui citra tersebut ada sisipannya adalah dengan perintah : if (length(id)=3) and (id<>#3'##') then break;
Jika ada sisipannya berarti bisa disimpan, dengan perintah : edit5.text:=ext.namafile; edit6.text:=inttostr(ext.size); StatusBar1.SimpleText:='Silahkan
simpan
data
tersimpan di gambar ini.'; GroupBox1.Caption:=' Gambar Yang akan didecode '; end;
yang
47
BAB IV HASIL PENELITIAN DAN PEMBAHASAN
Hasil penelitian yang dibahas mulai dari tampilan program, bagaimana menjalankan program, proses pengolahan citra, hingga dihasilkan citra yang telah tersteganografi. Keterangan-keterangan yang mengikuti citra hasil steganografi juga akan ditampilkan pada program.
4.1
Hasil Penelitian Hasil penelitian yang dibahas adalah hasil dari program yang telah
dirancang dan dibuat untuk melakukan steganografi terhadap citra warna yang belum dimampatkan citra format *.bmp maupun citra yang telah dimampatkan berformat *.jpeg,*. jpg, *.GIF, dan *.wmf. Pembahasan dilakukan mulai dari proses steganografi, analisis, hingga keterangan-keterangan yang dihasilkan selama proses steganografi berlangsung. 4.1.1 Menjalankan Program Program yang telah dibuat dengan Delphi dapat dijalankan dengan langsung membuka folder TA dan klik dua kali pada berkas penyusup data.exe Pada Gambar 4.1 ditunjukkan tampilan jendela pembukaan. Setelah jendela pembuka muncul terdapat dua tombol yaitu tombol Masuk dan tombol Keluar. Tekan tombol masuk jika ingin melanjutkan program dan tekan tombol keluar jika tidak ingin meneruskan program. Tampilan jendela menu utama ditunjukkan pada Gambar 4.2.
48
Gambar 4.1 Jendela pembuka.
Gambar 4.2 Tampilan jendela utama program
Pada menu utama Program dan Bantuan, di dalamnya masih terdapat beberapa menu yang dapat digunakan. Dalam menu utama Program terdapat menu Buka file gambar, Buka file data, Buka file dan Keluar dari sistem. Pada menu utama Bantuan terdapat menu Tentang program dan Tentang saya. Berikut beberapa tampilan dari menu utama dan menu-menu yang ada di dalamnya seperti ditunjukkan pada Gambar 4.3.
49
(a) Menu Program
(b) Menu Bantuan
Gambar 4.3 Tampilan menu utama.
Jika sebelum memulai program steganografi diinginkan informasi dalam menjalankan program, dapat di klik menu utama Bantuan dan klik menu Tentang program, sehingga akan ditampilkan jendela informasi yang berisi petunjuk penggunaan program. Jika telah paham akan petunjuk yang diberikan, untuk menutup jendela informasi dapat ditekan tombol Ok yang terletak di pojok bawah. Tampilan jendela informasi ditunjukkan pada Gambar 4.4.
Gambar 4.4 Tampilan jendela tentang program.
50
Jendela utama program pada Gambar 4.2 menampilkan citra yang akan dilakukan proses penyisipan data. Pada jendela utama ini akan ditampilkan citra asli, citra hasil, nama berkas data yang disisipkan, ukuran berkas data yang disisipkan, kolom password, dan waktu yang dibutuhkan dalam proses steganografi. Berikut dan langlah-langkah dalam menjalankan program penyisipan data ke dalam citra termampat berformat GIF: 1. Buka program aplikasi ini, di dalamnya dapat dilihat menu utama Program yang terdiri atas menu Buka file gambar, Buka file data, Buka file dan Keluar dari sistem. Di dalam menu utama Bantuan terdapat menu Tentang program dan Tentang saya. 2. Untuk memulai program steganografi citra warna dapat diklik menu Buka file gambar pada fasilitas menu utama Program. 3. Citra warna yang telah dipilih akan ditampilkan pada jendela Input gambar dan data. Pada menu utama juga di informasikan maksimal data yang dapat disisipkan. 4. Selanjutnya klik menu Buka file data dari menu utama Program. 5. Data yang dipilih akan ditampilkan ukuran berkasnya dan letak penyimpanan berkas data tersebut. Data yang disisipkan tidak boleh melebihi kapasitas maksimal data yang dapat disisipkan ke citra. 6. Isi password terlebih dahulu untuk keamanan data tersebut. 7. Tekan tombol proses untuk memulai penyisipan data, Program berjalan ditandai dengan progress bar. 8. Pilih tombol Simpan, maka citra warna yang telah disisipi data akan disimpan ke dalam citra berformat GIF. Proses steganografi selesai, jika diinginkan keluar dari program, klik menu utama Program kemudian klik menu Keluar dari sistem. 9. Klik menu Buka file untuk membuka data hasil steganografi, terdapat konfirmasi password untuk membuka data yang akan dibuka.
51
10. Jika password benar maka citra yang berisi data yang telah disisipkan dan telah disimpan dalam format GIF dapat diambil. 11. Tekan tombol Simpan data untuk menyimpan data yang telah disisipkan di dalam citra GIF. 12. Setelah data yang diinginkan disimpan maka proses pengambilan data yang disisipkan berakhir. Proses desteganografi selesai, jika diinginkan keluar dari program, klik menu utama Program
kemudian klik menu Keluar dari
sistem. 4.1.2 Pembacaan Citra Citra yang dibaca adalah citra warna 24-bit berformat *.bmp maupun citra yang telah dimampatkan berformat *.jpeg,*. jpg, *.ico, *.gif, dan *.wmf ditampilkan pada jendela utama sebagai citra asli. Pembacaan citra dilakukan dengan perintah yang telah dijelaskan pada perancangan program. Contoh hasil pembacaan citra ditunjukkan pada Gambar 4.9. Pada jendela utama tidak hanya ditampilkan citra asli, tetapi juga citra hasil. Citra hasil dapat ditampilkan jika sudah dilakukan proses steganografi. 4.1.3 Steganografi Citra Proses steganografi dimulai dengan pengambilan data yang akan disisipkan namun tidak melebihi kapasitas maksimal yang dapat diproses. Ukuran berkas data yang disisipkan dapat diketahui dari tampilan data tambahan yang terletak pada sebelah kanan jendela program menu utama. Tampilan data tambahan terlihat pada Gambar 4.5.
Gambar 4.5 Tampilan data tambahan
52
Gambar 4.6 Tampilan data yang ditampung melebihi kapasitas
Jika syarat telah dipenuhi maka data dapat diproses untuk dilakukan steganografi kedalam citra. Pada Gambar 4.6 merupakan tampilan informasi mengenai kesalahan yang terjadi pada program jika data yang akan disisipkan melebihi kapasita8s yang dapat ditampung data citra. Perhitungan kapasitas maksimal data yang bisa disisipkan dari persamaan 3.1 dapat diketahui jika suatu citra mempunyai ukuran 800 600 piksel. Berarti w = 800 dan h = 600, maka : max
w h 8
800 * 600 8
60 KB
Untuk mengetahui kapasitas data yang dapat ditampung oleh citra dapat diketahui pada menu utama yang terletak diatas tampilan citra asli. Dengan memilih tampilan input gambar dan data. Seperti pada Gambar 4.7.
Gambar 4.7 Tampilan ukuran data yang dapat disisipkan
Tekan tombol proses yang terletak di sebelah kanan jendela utama program untuk melakukan steganografi. Pada saat mengolah terdapat tampilan progress bar yang menandai program sedang berlangsung, dan setelah selesai maka akan ditampilkan juga waktu yang dibutuhkan untuk mengolah. Seperti yang ditunjukkan pada Gambar 4.8.
53
Gambar 4.8 Tampilan progress bar
4.1.4 Menyimpan ke dalam format GIF Setelah
selesai
melakukan
steganografi,
citra
hasil
steganografi
ditampilkan pada menu utama program dengan mengklik output. Citra asli dan citra hasil tidak ditampilkan dalam satu tampilan, namun dapat dipilih dengan mengklik input gambar dan data untuk melihat citra asli dan mengklik output untuk memilih citra hasil. Seperti yang ditunjukkan pada Gambar 4.9.
(a)
(b)
Gambar 4.9 Tampilan citra asli (a) dan citra hasil steganografi (b)
Pada jendela utama program bagian output terdapat tombol simpan di bagian kiri bawah yang berfungsi untuk menyimpan citra hasil steganografi. Citra yang disimpan dalam format GIF.
4.1.5 Mengambil data dari citra GIF Jika kita ingin mengambil citra hasil steganografi dengan cara mengklik Buka file pada jendela menu utama. Citra yang telah disimpan dalam format GIF, jadi program hanya dapat mengambil berkas citra dalam format GIF. Pada
54
Gambar 4.10 merupakan jendela informasi jika citra yang dibuka selain dalam format GIF.
Gambar 4.10 Jendela informasi hanya berkas GIF
Program juga memberitahukan jika citra GIF yang di buka tidak mengandung data penyisipan. Pada Gambar 4.11 memberikan informasi bahwa berkas citra yang dibuka tidak berisi data sisipan. Program menanyakan password terlebih dahulu jika ingin membuka berkas citra steganografi yang telah disimpan, seperti terlihat pada Gambar 4.12.
Gambar 4.11 Jendela Informasi citra tidak terdapat data sisipan
Gambar 4.12 Konfirmasi password
4.2
Uji Coba Dengan Data Sisipan di bawah Kapasitas Maksimal Citra Pada uji coba ini diuji tingkat keberhasilan dan waktu yang dibutuhkan
untuk melakukan steganografi yaitu setiap citra diuji dengan data uji berupa data teks, data audio dan video. Citra yang akan diujikan adalah citra 1, citra2, citra 3, citra 4 seperti ditunjukkan pada Gambar 4.13.
55
(a) citra 1
(b) citra 2
(c) citra 3
(d) citra 4 Gambar 4.13 Citra uji
4.2.1 Uji Coba Dengan Data Uji Teks Dokumen (*.txt) Untuk citra1 dan citra2 data yang akan disisipkan berupa data teks. Citra1 berukuran 600 360 piksel dengan ukuran berkas 45 KB diuji dengan 3 (tiga) data uji berkas teks dokumen *.txt yaitu Duji1.txt, Duji2.txt, dan Duji3.txt. Hasil uji coba tersebut ditunjukkan pada Tabel 4.1.
Tabel 4.1 Hasil pengujian dengan data uji teks dokumen (*.txt)
Pengujian
Nama Data Uji
Ukuran berkas
Waktu proses
Ukuran berkas hasil steganografi
1
Duji1.txt
2 KB
0,73 detik
103 KB
2
Duji2.txt
4 KB
0,67 detik
106 KB
3
Duji3.txt
21 KB
0,70 detik
134 KB
Dari Tabel 4.1 terlihat bahwa citra1.jpg diuji dengan tiga data uji dengan hasil semua data uji tersebut berhasil disisipkan kedalam citra. Waktu yang dibutuhkan untuk mengolahnya di bawah 1 detik. Hal ini disebabkan oleh ukuran citra uji kecil berukuran 600 360 piksel, dan data yang diuji mempunyai ukuran
56
berkas yang kecil pula. Ukuran berkas citra steganografi untuk data teks menjadi dua kali ukuran citra semula. Pengaruh dari perubahan ukuran berkas steganografi menjadi dua kali citra uji karena pada pemampatan GIF ukuran citra yang mempengaruhi hasil pemampatan.
4.2.2 Uji Coba Dengan Data Uji Teks Dokumen (*.doc, *.xls, *.ppt, *.pdf) Citra2 berukuran 1371 886 piksel dengan ukuran berkas 76 KB diuji dengan 4 (empat) data uji berupa teks dokumen yaitu Duji4. xls, Duji5.doc, Duji6.ppt, Duji7.pdf. Hasil uji coba tersebut ditunjukkan pada Tabel 4.2.
Tabel 4.2 Hasil pengujian dengan data uji teks dokumen (*.doc, *.xls, *.ppt, *.pdf)
Pengujian
Nama Data Uji
Ukuran berkas
Waktu proses
Ukuran berkas hasil steganografi
1
Duji4.xls
30 KB
1,73 detik
86 KB
2
Duji5.doc
40 KB
1,75 detik
91 KB
3
Duji6.ppt
101 KB
2,09 detik
162 KB
4
Duji7.pdf
120 KB
2 detik
239 KB
Dari Tabel 4.2 terlihat bahwa citra2.jpg diuji dengan empat data uji dengan hasil semua data uji tersebut berhasil disisipkan ke dalam citra. Waktu yang dibutuhkan untuk mengolahnya juga cepat antara 1 sampai 2 detik. Untuk Duji4 dan Duji5 waktu yang dibutuhkan kurang dari 2 detik oleh ukuran berkas kurang dari 100 KB. Untuk Duji6 dan Duji7 waktu yang dibutuhkan lebih dari 2 detik. Walaupun citra uji memiliki ukuran 1371 x 886 piksel tetapi waktu yang dibutuhkan untuk menyisipkan cepat oleh data uji memiliki ukuran berkas tidak terlalu besar. Untuk hasil berkas citra steganografi pada pengujian pertama dan kedua hasil berkas citra berubah tidak terlalu besar, namun pada pengujian tiga berubah menjadi dua kali ukuran semula. Pada pengujian ke empat citra hasil steganografi menjadi tiga kali ukuran citra uji. Perubahan hasil dipengaruhi oleh ukuran citra uji yang dimampatkan ke dalam format GIF.
57
4.2.3 Uji Coba Dengan Data Uji Citra (*.jpg, *.GIF, *.PNG) Citra 3 berukuran 1371 886 piksel dengan ukuran berkas 317 KB diuji dengan 3 (tiga) data uji berupa citra yaitu Duji8.jpg, Duji9.GIF, Duji10.PNG. Hasil uji coba tersebut seperti ditunjukkan pada Tabel 4.3.
Tabel 4.3 Hasil pengujian dengan data citra (*.jpg, *.GIF, *.PNG)
Pengujian
Nama Data Uji
Ukuran berkas
Waktu proses
Ukuran berkas hasil steganografi
1
Duji8.jpg
61 KB
3,28 detik
622 KB
2
Duji9.GIF
113 KB
3,56 detik
654 KB
3
Duji10.PNG
79 KB
3,21 detik
712 KB
Dari Tabel 4.3 terlihat bahwa citra3.jpg diuji dengan tiga data uji berupa data citra dengan hasil semua data uji tersebut berhasil disisipkan ke dalam citra. Waktu yang dibutuhkan untuk mengolahnya antara 3 sampai 4 detik. Citra uji memiliki ukuran 1371 886 piksel termasuk ukuran citra diatas resolusi citra SVGA (800 600) piksel, maka waktu yang dibutuhkan cukup lama. Dari hasil citra steganografi ukuran berkas menjadi dua kali. Ketika dimampatkan ke dalam format GIF ukuran citra yang mempengaruhi hasil berkas citra steganografi.
4.2.4 Uji Coba Dengan Data Uji Audio dan Video (*.mp3, *.rm, *.3gpp) Citra 4 berukuran 4205 3154 piksel dengan ukuran berkas 693 KB diuji dengan 3 (tiga) data uji berupa audio dan video yaitu Duji11.mp3, Duji12.rm, Duji13.3gpp. Hasil uji coba tersebut seperti ditunjukkan pada Tabel 4.4.
Tabel 4.4 Hasil pengujian dengan data uji audio dan video (*.mp3, *.rm, *.3gpp)
Pengujian
Nama Data Uji
Ukuran data
Waktu proses
Ukuran berkas hasil steganografi
1
Duji11.mp3
62 KB
31,73 detik
4,94 MB
2
Duji12.rm
445KB
35,56 detik
5,56 MB
3
Duji13.3gpp
929 KB
34 detik
6,38 MB
58
Dari tabel 4.1 terlihat bahwa citra4.jpg diuji dengan tiga data uji dengan hasil semua data uji tersebut berhasil disisipkan kedalam citra. Waktu yang dibutuhkan untuk mengolahnya sangat lama. Hal ini disebabkan oleh ukuran citra uji besar berukuran 4205 3154 piksel, dan data yang diuji adalah data audio video yang mempunyai ukuran berkas besar yaitu hampir 1 MB. Dalam menyisipkan data audio dan video ukuran berkas hasil steganografi menjadi tujuh kali ukuran berkas semula untuk data Duji11. Citra hasil berkas steganografi untuk data uji Duji12 berubah menjadi delapan kali ukuran semula, dan untuk data uji Duji13 ukuran citra hasil steganografi menjadi sembilan kali ukuran berkas citra semula. Hal ini disebabkan dalam pemampatan citra hasil steganografi ukuran dari citra uji yang mempengaruhi hasil pemampatan.
4.3
Uji Coba Dengan Data Sisipan Diatas Kapasitas Maksimal Citra dan pengujian Maksimal Citra Stego Pengujian dengan data uji melebihi kapasitas maksimal bertujuan menguji
program dapat berlangsung atau tidak jika data uji yang akan disisipkan ke dalam citra melebihi kapasitas yang dapat ditampung citra uji. Citra uji yaitu citra2.jpg dengan data uji Duji14.mp3, Duji15.jpg, Duji16.jpg. Hasil uji coba ini ditunjukkan pada tabel 4.5.
Tabel 4.5 Hasil pengujian dengan data uji diatas kapasitas daya tampung citra
Nama citra
Pengujian
Nama Data Uji
Ukuran Citra
Ukuran Data Sisipan
Citra2.jpg
1
Duji14.mp3
76 KB
283 KB
2
Duji15.jpg
76 KB
463 KB
3
Duji16.jpg
76 KB
173 KB
Dari tabel 4.5 program tidak berhasil menyisipkan data ke dalam citra karena ukuran berkas citra lebih kecil dari ukuran berkas data sisipan. Program
59
akan menampilkan jendela informasi kesalahan seperti pada Gambar 4.6. Hal ini disebabkan oleh daya tampung berkas data yang disisipkan untuk citra2.jpg hanya sebesar 76 KB saja. Jadi program tidak bisa melanjutkan proses penyisipan data ke dalam citra. Tanggapan program untuk pengujian kapasitas daya tampung citra, maka akan muncul jendela kesalahan seperti pada Gambar 4.14. Pada Gambar 4.15 merupakan tampilan utama program jika terdapat kesalahan.
Gambar 4.14 Tampilan kesalahan data melebihi kapasitas
Gambar 4.15 Tampilan tanggapan program utama data melebihi kapasitas
Untuk pengujian terakhir yaitu pengujian maksimal citra stego. Dalam pengujian ini akan diuji sampai berapa besar ukuran citra yang mampu di proses pada program penyisipan data ini. Pengujian yang dilakukan untuk ukuran citra
60
4800 3600, 6400 4800, 6800 5000, 6900 5175. Hasil uji coba ini ditunjukkan pada tabel 4.6. Tabel 4.6 Hasil pengujian maksimal citra stego
Pengujian
Ukuran citra
Ukuran berkas citra
Keterangan
1
4800 3600
1,37 MB
Mampu dibuka program
2
6400 4800
2,03 MB
3
6800 5000
2,13 MB
4
6900 5175
2,23 MB
Mampu dibuka program Mampu dibuka program Tidak Mampu dibuka program
Dari tabel 4.6 terlihat bahwa untuk resolusi 4800 3600, 6400 4800, 6800 5000 piksel dapat diproses oleh program Delphi. Untuk resolusi diatas itu yaitu 6900 5175 piksel tidak dapat diproses oleh program Delphi tidak mampu untuk resolusi yang terlalu besar. Memori yang diperlukan untuk membuka ukuran tersebut adalah terlalu besar. Tanggapan program untuk pengujian maksimal citra stego, maka akan muncul jendela kesalahan seperti pada Gambar
4.16. Pada Gambar 4.17
merupakan tampilan utama program jika terdapat kesalahan.
Gambar 4.16 Tampilan kesalahan maksimal citra stego
61
Gambar 4.17 Tampilan tanggapan program utama maksimal citra stego
4.4
Uji Coba Keberhasilan Pengambilan Data Hasil Steganografi Pengujian keberhasilan pengambilan data hasil steganografi bertujuan
untuk menguji data hasil steganografi dapat diambil kembali atau tidak. Setelah citra hasil steganografi disimpan ke dalam format GIF, akan dilakukan pengambilan data yang telah disisipkan.. Proses pengambilan ini memiliki fungsi berkebalikan dengan proses steganografi atau bisa disebut dengan desteganografi. Citra GIF yang telah disimpan dalam folder Gb_hasil
dengan nama berkas
Gbhasil1, Gbhasil2, Gbhasil3, Gbhasil4, Gbhasil5, Gbhasil6, Gbhasil7, Gbhasil8, Gbhasil9, Gbhasil10, Gbhasil11, Gbhasil12, Gbhasil13. Hasil uji coba ini ditunjukkan pada tabel 4.7.
62
Tabel 4.7 Pengujian keberhasilan data hasil steganografi
Nama citra
Ukuran
Nama Data
Jenis Data
Hasil
Steganografi
berkas data
Sisipan
sisipan
Desteganografi
Gbhasil1.gif
103 KB
Duji1.txt
Teks
Duji1.txt
Gbhasil2.gif
106 KB
Duji2.txt
Teks
Duji2.txt
Gbhasil3.gif
134 KB
Duji3.txt
Teks
Duji3.txt
Gbhasil4.gif
86 KB
Duji4.xls
Teks
Duji4.xls
Gbhasil5.gif
91 KB
Duji5.doc
Teks
Duji5.doc
Gbhasil6.gif
162 KB
Duji6.ppt
Teks
Duji6.ppt
Gbhasil7.gif
239 KB
Duji7.pdf
Teks
Duji7.pdf
Gbhasil8.gif
622 KB
Duji8.jpeg
Citra
Duji8.jpeg
Gbhasil9.gif
654 KB
Duji9.PNG
Citra
Duji9.PNG
Gbhasil10.gif
712 KB
Duji10.gif
Citra
Duji10.gif
Gbhasil11.gif
4,94 MB
Duji11.mp3
Audio
Duji11.mp3
Gbhasil12.gif
5,56 MB
Duji12.rm
Video
Duji12.rm
Gbhasil13.gif
6,38 MB
Duji13.3gpp
Video
Duji13.3gpp
Dari tabel 4.7 terlihat bahwa proses pengambilan data hasil steganografi atau hasil desteganografi berhasil diambil oleh program dan tidak berubah baik ukuran data maupun jenis data. Data yang telah disisipkan ke dalam citra dengan hasil akhir berupa berkas citra berformat GIF berhasil diambil oleh program sesuai dengan bentuk format aslinya. Data sisipan berupa teks, citra, audio, dan video hasil destegnografi pada program sama persis dengan format aslinya. Yang perlu diperhatikan adalah saat memberi nama data kita harus memberikan format data tersebut apakah dalam bentuk teks, citra, atau audio dan video. Dengan menambahkan format data (*.txt, *.doc, *.xls, *.ppt, dan lain sebagainya), seperti ditunjukkan pada Gambar 4.18. Jika tidak memberikan nama format belakang, maka berkas yang telah disimpan tidak dikenali program. Seperti ditunjukkan pada Gambar 4.19.
63
Gambar 4.18 Tampilan dialog menyimpan berkas
Gambar 4.19 Tampilan berkas tidak dikenali program
64
BAB V PENUTUP
5.1
Kesimpulan Penelitian tentang aplikasi penyisipan data ke dalam citra termampat
berformat GIF dengan bahasa pemrograman Delphi menghasilkan kesimpulan berikut ini. 1.
Program dapat menyisipkan semua data, namun data sisipan tidak boleh melebihi 27 KB untuk citra1, 151 KB untuk citra2, 163 KB untuk citra3, dan 1,67 MB untuk citra4.
2.
Pengujian citra dengan data sisipan teks (*.txt) dibutuhkan waktu rata-rata 1 detik, data sisipan teks (*.doc, *.xls, *. Ppt, *.pdf) dibutuhkan waktu rata-rata 2 detik. Data sisipan berupa citra dibutuhkan waktu rata-rata 3 detik. Data sisipan berupa audio dan video dibutuhkan waktu rata-rata 35 detik.
3.
Citra yang mampu ditampilkan program maksimal berukuran 6800 5000 piksel.
4.
Citra hasil Steganografi berformat GIF dan dihasilkan perubahan nilai intensitas warnanya.
5.
Pada hasil Desteganografi data sisipan kembali menjadi data semula tanpa ada perubahan jenis data.
5.2
Saran
Berikut adalah saran-saran yang berkaitan dengan penelitian yang telah dilakukan. 1.
Perlu dilakukan penelitian lanjutan untuk cira termampat tak berugi lainnya seperti PNG sehingga dapat diketahui perbedaan dalam keandalan penyisipan data.
2.
Perlu dilakukan penelitian lanjutan untuk steganografi pada audio maupun video.
65
DAFTAR PUSTAKA [1]
Achmad, B. dan K. Firdausy, Teknik Pengolahan Citra Digital, Andi Publishing, Yogyakarta, 2005.
[2]
Ziv. J. and A. Lempel, "Compression of Individual Sequences via VariableRate Coding," IEEE Transactions on Information Theory, vol. 24, no. 5, September, 1978.
[3]
Munir, R., Pengolahan Citra Digital dengan Pendekatan algoritmik, Informatika, Bandung, 2004.
[4]
Robi’in, B., Pemrograman Grafis Multimedia Menggunakan Delphi, Andi Offset,Yogyakarta , 2004.
[5]
Bender, W., D. Gruhl, and N. Morimoto, Techniques for Data Hiding, Massachusetts Institute of Technology, Media Laboratory Cambridge, Massachusetts USA, San Jose CA, February, 1995.
[6]
Octaviano, S., Aplikasi Steganografi Menggunakan Metode Pensinyalan LSB (Least Significant Bit) pada File Gambar dengan Format BMP, Skripsi S-1, Universitas Diponegoro, Semarang, 2004
. [7]
Linawati dan H. Panggabean, Perbandingan kinerja algoritma kompresi huffman, LZW, dan DMC pada berbagai tipe file, Integral, vol 9 no 1, Maret, 2004.
[8]
Guillermito, Easily Breaking a very weak Steganography Software, http://www.guillermito2.net/stegano/camouflage.html, 16 September 2002.
[9]
Armyta, D., Studi Mengenai Aplikasi Steganografi Camouflage Beserta Pemecahan Algoritmanya, http://www.informatika.org/~rinaldi/Kriptografi/2006-2007/makalah12006/makalah1-007.pdf, 2006.
[10] Tien, L., Destegging Tutorial, http://www.unfiction.com/dev/tutorial, 2002. [11] Mangarae, A., Steganography FAQ, www.infosecwriters.com/text_resources/pdf/Steganography_AMangar ae.pdf, 18 Maret 2006. [12] Poli, L., Penerapan Steganografi dengan Citra Digital Sebagai File Penampang, Tugas Akhir Jurusan Teknik Informatika, 1998.
66
[13] Zhao, J. and E. Koch, Embedding Robust Labels Into Images For Copyright Protection, Germany,Vienna, Agustus 1995. [14] Daryanto, T., Standar-Standar Kompresi Pada Gambar, www.bl.ac.id/dosen/tri_daryanto/kompresi.PDF, Maret 2004. [15] Wikipedia, Steganography, http://en.wikipedia.org/wiki/Steganography, 3 Mei 2007. [16] ---, A Stegography implementation in Delphi, http://www.itte.no/download/steganography.zip, 6 April 2004.
67
BIODATA MAHASISWA
Nama
: ARIF NUR BUDI SETIYO
NIM
: L2F 304 217
Konsentrasi
: Elektronika dan Telekomunikasi
Tempat/Tgl. Lahir : Semarang / 02 November 1981 Alamat
: Jl. Pucang Anom IX No 7. Pucang Gading. Mranggen
No. Telp/HP
: 024 70180109 / 0815 7577 5849
Alamat e-mail
:
[email protected] [email protected] [email protected]
Nama Orang Tua : Bambang Sumaryo Alamat Orang Tua: Jl. Pucang Anom IX No : 7. Pucang
Gading.
Mranggen.
Demak No. Telp/HP
: 024 76743888
IP Kumulatif
: 3,09
Tanggal Lulus
: 19 Juni 2007
Masa Studi
:
Semarang, 20 Juni 2007
Arif Nur Budi Setiyo
68
LAMPIRAN SENARAI PROGRAM
69
LAMPIRAN unit fmainform;
interface
uses Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls, Forms, Dialogs, ComCtrls, Menus, ExtCtrls, StdCtrls, ExtDlgs,GIFIMAGE, IdComponent,
IdTCPConnection,
IdTCPClient,
IdSMTP,IdBaseComponent, IdMessage,jpeg;
type
TDataRek=record id:string[3]; pass:string[10]; namafile:string[15]; size:integer; data:array of byte; end; TMainForm = class(TForm) MainMenu1: TMainMenu; Input1: TMenuItem; Bukafilegambar1: TMenuItem; Bukafiledata1: TMenuItem; N1: TMenuItem; INPUT2: TMenuItem; OUTPUT1: TMenuItem; SimpansebagaiGIF1: TMenuItem; Bantuan1: TMenuItem; entangprogram1: TMenuItem; N2: TMenuItem; Keluarkesistem1: TMenuItem; PageControl1: TPageControl; StatusBar1: TStatusBar;
IdMessageClient,
70
TabSheet1: TTabSheet; TabSheet2: TTabSheet; GroupBox1: TGroupBox; GroupBox2: TGroupBox; ScrollBox1: TScrollBox; Image1: TImage; GroupBox3: TGroupBox; ScrollBox2: TScrollBox; Image2: TImage; Timer1: TTimer; OpenPictureDialog1: TOpenPictureDialog; SavePictureDialog1: TSavePictureDialog; OpenDialog1: TOpenDialog; INPUTDECODE1: TMenuItem; Bukafile1: TMenuItem; Label4: TLabel; Edit4: TEdit; Label5: TLabel; Edit5: TEdit; Edit6: TEdit; Label6: TLabel; Label7: TLabel; Button2: TButton; Button3: TButton; SaveDialog1: TSaveDialog; Button1: TButton; entanganda1: TMenuItem; PB1: TProgressBar; Label1: TLabel; procedure Bukafilegambar1Click(Sender: TObject); procedure Bukafiledata1Click(Sender: TObject); procedure SimpansebagaiGIF1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure PageControl1Change(Sender: TObject); procedure Keluarkesistem1Click(Sender: TObject); procedure entangprogram1Click(Sender: TObject); procedure Bukafile1Click(Sender: TObject);
71
procedure Edit4Change(Sender: TObject); procedure Button3Click(Sender: TObject); procedure entanganda1Click(Sender: TObject); private { Private declarations } public { Public declarations } hasprocess:boolean; adagambar:boolean; mygif:TGIFImage; modedecode:boolean; maxchar:integer; ext:tdatarek; end;
var MainForm: TMainForm;
implementation
uses faboutform, splash;
{$R *.dfm} // prosedur untuk mengambil data dari file ke record agar mudah dikonversi ke bits procedure loaddata(var d:TDataRek;fn:string); var f:file;
// tipe f: file (untuk membuka file)
begin assignfile(f,fn); // akses file fn reset(f,1);
// reset file untuk dibaca
setlength(d.data,filesize(f));
//
siapkan
tempat
untuk
menampung isi file blockread(f,d.data[0],filesize(f)); // baca isi file ke tempat penampung d.namafile:=ExtractFileName(fn);
//
simpan
(namanya saja) d.size:=filesize(f); closefile(f);
// simpan ukuran file
// tutup file
juga
namafile
72
d.id:='###';
// beri tanda
end; function datatobits(x:tdatarek):tbits; var n,i,j:integer; b:^byte; begin result:=tbits.create;
// persiapkan kelas hasil (kelas
tbits) b:=@x;
// arahkan pointer b ke data x
result.Size:=8*(sizeof(x)-4)+8*(high(x.data)+1);
//
siapkan
jumlah data yang harus dikonversi ke bit n:=0;
// inisialisasi
// convert header for i:=1 to sizeof(x)-4 do begin
// untuk i = 1 s/d ukuran
header x for j:=0 to 7 do begin // untuk setiap bit (ibyte=8bit) result.Bits[n]:=(b^ and (1 shl j))>0;
// simpan bit
inc(n); // majukan n end; inc(b); end; // convert data for i:=0 to high(x.data) do begin //untuk i= 0 sampai jumlah data dari file yg disisipkan for j:=0 to 7 do begin // untuk setiap bit (ibyte=8bit) result.Bits[n]:=(x.data[i] and (1 shl j))>0; // simpan bit inc(n); // majukan n end; end; end; procedure TMainForm.FormCreate(Sender: TObject); begin adagambar:=true; // inisialisasi hasprocess:=false;
//
tanda
bahwa
gambar
dan
data
belum
diproses mygif:=TGIFImage.Create; // komponen untuk mengesave file GIF modedecode:=false; // mode sekarang = buka file
73
maxchar:=image1.Width*image1.Height div 8; // maksimum ukuran data yg disipkan end;
procedure TMainForm.Bukafilegambar1Click(Sender: TObject); begin if
OpenPictureDialog1.Execute
then
begin
//
buka
dialog
membuka gambar, bila sukses lanjutkan ke blok berikut button3.Visible:=false;
// hilangkan tombol simpan data
button2.Visible:=true; // tampilkan tombol proses modedecode:=false; // mode = menyisipkan image1.picture.LoadFromFile(openpicturedialog1.FileName);
//
load gambar dan tampilnkan maxchar:=image1.Width*image1.Height div 8; // hitung maksimum data yg bisa disisipkan adagambar:=true; // sudah ada gambar hasprocess:=false; // belum diproses StatusBar1.SimpleText:='Silahkan
ketik
atau
ambil
file
data(teks) yang akan disisipkan. Maksimal '+inttostr(maxchar)+' karakter.'; GroupBox1.Caption:='
Gambar
(maksimal
'+inttostr(maxchar)+'
byte dapat disisipkan) '; end; end;
procedure TMainForm.Bukafiledata1Click(Sender: TObject); var f:file; begin if OpenDialog1.execute then begin // buka file dialog untuk membuka data yg akan disisipkan StatusBar1.SimpleText:='Gambar
akan
segera
diproses
setelah
anda melihat output.'; hasprocess:=false; // belum proses edit5.text:=opendialog1.FileName; // tampilkan nama filenya assignfile(f,opendialog1.FileName); // akses ke file itu reset(f,1); // buka untuk dibaca edit6.text:=inttostr(filesize(f)); closefile(f); // tutup file
// tampilkan ukuran file
74
if strtoint(edit6.text)>maxchar then begin edit5.text:=''; // kosongkan namafile dan ukurannya edit6.text:=''; Application.MessageBox('Ukuran file lebih besar dari data yg bisa ditampung, jadi file ditolak !','Eror',0) end; end else begin edit5.text:=''; // kosongkan namafile dan ukurannya edit6.text:=''; end; end;
procedure TMainForm.SimpansebagaiGIF1Click(Sender: TObject); begin if not hasprocess then begin // jika belum diproses keluar Application.MessageBox('Gambar
belum
diproses
!','Kesalahan',0); exit; // keluar prosedure ini end; if
SavePictureDialog1.execute
then
//
buka
dialog
untuk
menyimpan file GIF mygif.SaveToFile(savepicturedialog1.filename); // simpan file GIF end;
procedure TMainForm.Timer1Timer(Sender: TObject); begin SimpansebagaiGIF1.visible:=adagambar and hasprocess and (not modedecode); // jika gambar output siap, tampilkan tombol simpan Bukafiledata1.Enabled:=(not
modedecode);
//
kalau
sedang
menyampur menu buka (decode) di non aktifkan end;
procedure TMainForm.PageControl1Change(Sender: TObject); // Fungsi ini menciptakan palet 128 warna dasar, kembar // jadi warna ke 0 dan ke 128 adalah sama, 1 dan 129 sama dst.
function mypalet:HPALETTE;
75
var i,r,g,b
: integer;
Pal
: tMaxLogPalette;
begin Pal.palVersion := $0300; // inisialisasi palet Pal.palNumEntries := 256; // jumlah warna palet i:=0; // mulai dari warna ke 0 for r := 0 to 3 do for g := 0 to 7 do for b := 0 to 3 do begin // buat data palet dengan warna tertentu with (Pal.palPalEntry[i]) do begin peRed := r*255 div 3; // merah peGreen := g*255 div 7; // hijau peBlue
:=
b*255 div 3; // biru
peFlags := PC_NOCOLLAPSE; // end; // buat data palet dengan warna yg sama dengan diatas tapi untuk nomor warna+128 with (Pal.palPalEntry[i+128]) do begin peRed := r*255 div 3; peGreen := g*255 div 7; peBlue
:=
b*255 div 3;
peFlags := PC_NOCOLLAPSE; end; inc(i); // increment nomor warna yg akan dibuat paletnya end; Result := CreatePalette(pLogPalette(@Pal)^); // panggil fungsi buat palet end;
var btmpp,btmp:tbitmap; n,y,x:integer; p:^byte; dr:tdatarek; data:tbits; tt:tdatetime;
76
begin // jika gambar belum diproses dan mode sekarang adaalh encode tt:=now; pb1.visible:=true; if (not modedecode) and adagambar and (not hasprocess) and (edit5.text<>'') then begin // buat bitmap sesuai gambar input dengan warna palet yang kita buat btmpp:=tbitmap.create; // inisialisasi btmpp.Width:=image1.Width; // set lebar btmpp.height:=image1.Height; // set tinggi btmpp.PixelFormat:=pf24bit; // set format warna btmpp.Canvas.Draw(0,0,image1.picture.Graphic);
//
kopi
gambar dari output
btmp:=ReduceColors(btmpp,rmPalette,dmFloydSteinberg,0,mypa let); // proses reduksi warna dengan palet yg kita buat btmpp.free; // bebaskan data proses // konversi teks input ke bits loaddata(dr,edit5.text); // ambil data dari file yg akan disisipkan dr.pass:=edit4.text; // simpan pasword data:=datatobits(dr); // konversi data ke bits // lakukan penyisipan data ke gambar n:=0; // for y:=0 to btmp.Height-1 do begin // loping vertikal p:=btmp.ScanLine[y];
// inisialisasi lokasi data warna
untuk baris ke y for x:=0 to btmp.Width-1 do begin // looping horisintal // untuk setiap pixel di input sisipkan 1 bit data ke bit 7 if (n
77
btmp.free; // buang data proses // tampilkan gambar hasil image2.Picture.Assign(mygif); hasprocess:=true; // sudah proses StatusBar1.SimpleText:='Gambar
sudah
selesai
diproses,
bisa disimpan sebagai GIF'; end; tt:=(now-tt)*(24*60*60); label1.caption:='Waktu proses :'+format('%5.5f detik',[tt]); pb1.visible:=false; end;
procedure TMainForm.Keluarkesistem1Click(Sender: TObject); begin if
Application.MessageBox('Benar
mau
keluar
?','Konfirmasi',MB_YESNO)=id_NO then exit; close; end;
procedure TMainForm.entangprogram1Click(Sender: TObject); begin aboutform.showmodal; end;
procedure TMainForm.Bukafile1Click(Sender: TObject); var x,y:integer; p:^byte; b:byte; n:integer; id:string[5]; db:^byte; dn:integer; tt:tdatetime; begin // mendecode gambar GIF untuk mengambil data yg disisipkan if OpenPictureDialog1.Execute then begin // buka file open dialog tt:=now;
78
if pos('.gif',lowercase(openpicturedialog1.FileName))=0 then begin // jika tidak ada kata .gifnya, tolak application.MessageBox('Hanya file GIF','Informasi',0); exit; end; edit5.text:=''; // kosongkan tampilan nama file dan ukurannya edit6.text:='';// inisialisasi modedecode:=true; // mode = decode image1.picture.LoadFromFile(openpicturedialog1.FileName);
//
buka file gambar image2.picture.Assign(image1.Picture);
//
tampilkan
jug
di
output adagambar:=true; // gambar ada hasprocess:=true; // sudah diproses n:=0; // counter untuk bit (1-8) b:=0; // penampung bit (byte) // load file yang akan didecode mygif.LoadFromFile(openpicturedialog1.FileName); id:=''; // db:=@ext; // pointer ke lokasi penyimpan bit dn:=0; // jml data yg sukses for y:=0 to mygif.height-1 do begin p:=mygif.Bitmap.ScanLine[y]; for x:=0 to mygif.Width-1 do begin // baca tiap-tiap pixel apakah bit ke 7 bernilai 1 if p^>=128 then b:=b+(1 shl n); inc(p); n:=n+1; // untuk setiap 8 pixel, gabungkan menjadi 1 karakter ASCII if n=8 then begin // jika udah terkumpul 8 bit n:=0; // simpan di teks hanya apabila masih 24 piksel pertama if length(id)<3 then id:=id+chr(b); // simpan bits if dn<sizeof(tdatarek)-4 then db^:=b; // simpan di header if
(dn>=sizeof(tdatarek)-4)
4+ext.size) then db^:=b; // simpan di data inc(db); // majukan penyimpan
and
(dn<sizeof(tdatarek)-
79
inc(dn); // majukan sumber if dn=sizeof(tdatarek)-4 then begin // jika ukuran file sudah diketahui setlength(ext.data,ext.size); // siapkan penampung data db:
[email protected][0]; // siapkan pointer ke data end; b:=0; // kosongkan b end; end; if (length(id)=3) and (id<>#3'##') then break; // jika id tidak sama dengan ### berarti tidak ada sisipannya end; // tampilkan hasil tt:=(now-tt)*(24*60*60); label1.caption:='Waktu proses :'+format('%5.5f detik',[tt]); if id<>#3'##' then application.MessageBox('Gambar ini tidak mengandung data !','Informasi',0) else begin edit4.text:=inputbox('Keamanan','Masukkan kata sandi',''); // tanyakan password if
edit4.text<>ext.pass
then
application.MessageBox('Kata
sandi anda salah !','Informasi',0) else begin button2.Visible:=false; // tombol proses disembunyikan button3.Visible:=true; // tombol simpan ditampilkan edit4.Enabled:=false; // edit 4 tidak bisa diedit edit5.text:=ext.namafile; // simpan nama file edit6.text:=inttostr(ext.size); // ukuran file StatusBar1.SimpleText:='Silahkan simpan data yang tersimpan di gambar ini.'; GroupBox1.Caption:=' Gambar Yang akan didecode '; end; end; end; end;
procedure TMainForm.Edit4Change(Sender: TObject); begin
80
hasprocess:=false;
//
kalau
password
diganti
harus
proses
ulang StatusBar1.SimpleText:='Gambar
akan
segera
diproses
setelah
anda melihat output.'; end;
procedure TMainForm.Button3Click(Sender: TObject); var f:file; begin SaveDialog1.FileName:=edit5.text; // nilai awal saat membuka dialog if savedialog1.Execute then begin // buka dialog assignfile(f,savedialog1.filename); // buka akses ke file rewrite(f,1);
// siapkan untuk ditulisi ulang
blockwrite(f,ext.data[0],ext.size); // tulis data closefile(f);
// tutup file
end; end;
procedure TMainForm.entanganda1Click(Sender: TObject); begin splashform.show; end;
end.