Modifikasi Least Significant Bit(LSB) Menggunakan Persamaan Kuadrat Pada Kunci Steganografi

(1)

SKRIPSI

Mega Kartika Sari 071402058

PROGRAM STUDI S1 TEKNOLOGI INFORMASI

FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA

MEDAN 2014


(2)

SKRIPSI

Diajukan untuk melengkapi tugas dan memenuhi syarat memperoleh ijazah Sarjana Teknologi Informasi

MEGA KARTIKA SARI 071402058

PROGRAM STUDI TEKNOLOGI INFORMASI

FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA

MEDAN 2014


(3)

Judul : MODIFIKASI LEAST SIGNIFICANT BIT(LSB) MENGGUNAKAN PERSAMAAN KUADRAT PADA KUNCI STEGANOGRAFI

Kategori : SKRIPSI

Nama : MEGA KARTIKA SARI

Nomor Induk Mahasiswa : 071402058

Program Studi : SARJANA (S-1) TEKNOLOGI INFORMASI

Departemen : TEKNOLOGI INFORMASI

Fakultas : ILMU KOMPUTER DAN TEKNOLOGI

INFORMASI

Diluluskan di

Medan, 7 Februari 2014 KomisiPembimbin :

Pembimbing 2 Pembimbing 1

Syahriol Sitorus, S.Si, M.Si M. Anggia Muchtar, ST.MM.IT NIP : 197103101997031004 NIP : 198001102008011010

Diketahui/Disetujuioleh

Program Studi S1 TeknologiInformasi Ketua,

Prof. Dr. OpimSalimSitompul, M.Sc. NIP: 196108171987011001


(4)

MODIFIKASI LEAST SIGNIFICANT BIT(LSB) MENGGUNAKAN PERSAMAAN KUADRAT PADA KUNCI STEGANOGRAFI

SKRIPSI

Saya mengakui bahwa skripsi ini adalah hasil karya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing disebutkan sumbernya.

Medan, 7 Februari 2014

Mega Kartika Sari 071402058


(5)

Puji dan syukur penulis panjatkan kepada Allah SWT Yang Maha Pengasih dan Maha Penyayang, dengan segala rahmat dan karunia-Nya penulis dapat menyelesaikan tugas akhir ini dalam waktu yang telah ditetapkan.

Dalam penyelesaian tugas akhir ini, tidak terlepas dari bantuan dan kerja sama serta doa dan dukungan dari berbagai pihak, untuk itu penulis sampaikan ucapan terima kasih sedalam-dalamnya dan penghargaan kepada :

1. Dekan dan Pembantu Dekan Fakultas Ilmu Komputer dan Teknologi Informasi Universitas Sumatera Utara

2. Ketua dan Sekretaris Departemen Bapak Prof. Dr. Opim Salim Sitompul, M.Sc dan Bapak Drs. Sawaluddin, M.Sc yang telah memberikan dukungan, arahan dan bantuannya dalam menyelesaikan tugas akhir ini.

3. Seluruh dosen Departemen Teknologi Informasi dan Ilmu Komputer USU yang telah mengajarkan dan memberikan dukungan serta bantuannya dalam menyelesaikan tugas akhir ini.

4. Kepada Bapak Syahriol Sitorus,S.Si.,M.Si dan Bapak M.Anggia Muchtar, ST.MM.IT selaku pembimbing yang selalu memberikan arahan, bimbingan, keluangan waktu serta dukungan dalam menyelesaikan tugas akhir ini beserta Bapak Dr.Syahril Efendi,S.Si.,M.I.T dan Bapak Sajadin Sembiring, S.Si. M.Comp.Sc yang bersedia menguji seminar hasil dan sidang sarjana penulis.

5. Kepada kedua orang tua, Ibu Siti Marlia dan Ayah Napsirul yang selalu memberi doa, dorongan serta motivasi untuk menyelesaikan tugas akhir ini dan juga membantu dalam pembiayaan selama perkuliahan.

6. Untuk kakak penulis Tuti Armayanti,Amd,Abang M.Yusuf Abioso,Amd dan adik – adik penulis Yeni Marlina yang telah memberikan bantuan doa dan dorongan dalam menyelesaikan tugas akhir ini.

7. Sahabat penulis, Ana,Dini,Septi,Yayuk,Rozi,M.Ridwan anak-anak TA, abang-kakak senior, adik-adik junior, dan seluruh teman-teman seperjuangan yang tidak dapat disebutkan namanya.

Semoga segala kebaikan dan bantuannya dibalas oleh Allah SWT dan semoga tugas akhir ini dapat bermanfaat bagi semua pihak yang memerlukannya.


(6)

DAFTAR ISI

ABSTRAK ... i

ABSTRACT ... ii

DAFTAR ISI ... iii

BAB 1 PENDAHULUAN ... 1

1.1. Latar Belakang ... 2

1.2. Rumusan Masalah ... 2

1.3. Batasan Masalah... 3

1.4. Tujuan Penelitian ... 3

1.5. Manfaat Penelitian... 4

1.6. Metode Penelitian ... 4

BAB 2 TINJAUAN PUSTAKA... 5

2.1 Steganografi 5

2.2 Media Penampung(cover objec) 7

2.3 Pengertian Citra Digital 8

2.3.1 Format File Citra Digital 10

2.3.1.1 Format Data Bitmap 11

2.4 ModeWarna 11

2.5 MenghitungNilaiRGB 12

2.6 LeastSignificantBit(L 13

2.7 LeastSignificant Bit(LSB) Dengan Persamaan Kuadrat 14

2.8 PerhitunganFidelity 16

BAB 3 ANALISIS DAN PERANCANGAN ... 17

3.1. Analisis Masalah ... 17

3.2. Analisis Sistem 18

3.2.1 Analisis Persyaratan Fungsional ... 18

3.2.2 Analisis Persyaratan Non-Fungsional ... 18


(7)

3.3.1. Use Case Diagram ... 19

3.3.2. Activity Diagram Untuk Use Case Insertion ... 21

3.3.3. Activity Diagram Untuk Use Case Extraction ... 22

3.3.4. Activity Diagram Untuk Use Case Fidelity 23

3.4 Diagram Alir ( flow chat) ... 24

3.5 Perancangan ... 27

3.5.1. Rancangan Menu Utama ... 27

3.5.2. Rancangan Insertion ... 28

3.5.3. Rancangan Extraction ... 29

BAB 4 IMPLEMENTASI DAN PENGUJIAN SISTEM... 30

4.1. Pembahasan Algoritma ... 30

4.1.1. Pembahasan Algoritma Least Significant Bit(LSB) ... 30

4.1.1.1. Baca Nilai Piksel 30

4.1.1.2 Hitung Nilai Red Green Blue ... 31

4.1.1.3 HitungNilaiBinerSetiapKarakter 33

4.1.2 Least Significant Bit(LSB) Menurut Persamaan Kuadrat 35

4.1.3.1 Perhitungan Nilai Mean Squed Error (MSE) 39

4.2. Pengujian Sistem ... 40

4.2.1 Proses Penyisipan Pesan ... 41

4.2.2 Proses Ekstaksi Pesan 42

BAB 5 KESIMPULAN DAN SARAN ... 43

5.1. Kesimpulan ... 43

5.2. Saran ... 44

DAFTAR PUSTAKA ... 45 LAMPIRAN KODE PROGRAM ...


(8)

DAFTAR TABEL

Hal

Tabel 3.1 Spesifikasi Use Case Insertion 21

Tabel 3.2 Spesifikasi Use Case Extraction 22 Tabel 3.3 Spesifikasi Use Case Hitung Fidelity 23


(9)

DAFTAR GAMBAR

Hal

Gambar 2.1 Proses Steganografi 6

Gambar 2.2 Kordinat pada Citra 8

Gambar 2.3 Kombinasi Warna GRB 11

Gambar 2.4 Contoh Grafik Fungsi Kuadrat 13

Gambar 2.5 Persamaan Kuadrat dengan nilai a>0 14 Gambar 2.5 Persamaan Kuadrat dengan nilai a<0 14

Gambar 3.1 Use Case Sistem 19

Gambar 3.2 Insertion Activity Diagram 20

Gambar 3.3 Activity Diagram Extraction 22

Gambar 3.4Activity Diagram Perhitungan Fidelity 23 Gambar 3.5 Flowchart Penyisipan LSB Persamaan Kuadrat 24 Gambar 3.6 Flowchart Ekstraksi

Gambar 3.7 Flowchart Menghitung MSE

25 26

Gambar 3.8 Rancangan Menu Utama 27

Gambar 3.9 Rancangan Insertion 28

Gambar 3.10 Rancangan Extraction 29

Gambar 4.1 Citra Cover ( 512x236 piksel ) 30 Gambar 4.2 Sample Citra Cover ( 5x5 piksel ) 31 Gambar 4.3 Nilai Piksel pada Data Bitmap 31

Gambar 4.4 Matriks RGB Citra Cover 32

Gambar 4.5 Bit MSB dan LSB dibarisan Bit didalam Byte 34 Gambar 4.6 Citra Cover 5x5 piksel dalam bentuk biner 34 Gambar 4.7Citra Stego 11x18 piksel dalam bentuk biner 36 Gambar 4.8 Matriks Citra Cover dan Citra Stego 39 Gambar 4.9 Tampilan Menu Utama Sistem 40 Gambar 4.10 Form Penyisipan LSB Menurut Persamaan Kuadrat 41


(10)

BAB I PENDAHULUAN

1.1 Latar Belang

Kerahasiaan dan keamanan saat melakukan pertukaran data adalah hal yang sangat penting dalam komunikasi data, baik untuk tujuan keamanan bersama, maupun untuk privasi individu. Mereka yang menginginkan agar datanya tidak diketahui oleh pihak-pihak yang tidak berkepentingan selalu berusaha menyiasati cara mengamankan informasi yang akan dikomunikasikannya.

Seringkali seseorang yang ingin mengirimkan pesan kepada orang lain, tidak ingin pesan tersebut diketahui oleh orang lain. Hal ini menyebabkan orang yang ingin mengirimkan pesan tersebut semakin lama atau jenuh untuk melakukannya dan menginginkan sesuatu yang lebih mudah dan aman untuk mengirim pesan tersebut. Salah satu hal yang dapat digunakan untuk mengatasi permasalahan ini adalah dengan mengembangkan aplikasi yang mampu menyamarkan pesan tersebut pada suatu media yang dapat diakses oleh semua orang. Teknik ini disebut dengan Steganografi, dimana semua orang bisa menampilkan atau membuka File tersebut, namun tidak menyadari bahwa media tersebut telah disisipi pesan oleh pengirim.

Salah satu metode umum yang biasa digunakan adalah dengan metode Least Significant Bit (LSB). Metode ini adalah bagian dari barisan data biner yang mempunyai nilai paling kecil. Teknik penyisipan pesan dengan metode LSB ialah dengan meyisipkan pesan rahasia yang sudah diubah kedalam bentuk biner kedalam barisan paling kanan dari barisan bit file penampung.

Seiring berkembangnya dunia multimedia pada saat sekarang ini, teknik LSB sudah diketahui oleh orang banyak sehingga perlu pengembangan untuk menambah efektifitas penyisipan pesan, oleh karena itu penulis akan mengembangkan metode LSB dengan menambahkan Persamaan Linear variable tunggal sebagai kunci dalam proses penyisipannya. Proses ini disebut juga dengan Modifikasi Least Significant Bit (LSB)dengan Persamaan kuadrat pada proses Penyisipannya.


(11)

Penggunaan suatu metode dalam penyembunyian pesan rahasia terkadang dapat merusak citra penampungnya. Oleh karena itu dibutuhkan parameter untuk melihat bagus atau tidaknya motode penyisipan yang dipakai, seperti keacakan penyisipan file dan ketahanan file penampung setelah mengalami perubahan (scaling).

1.2 Rumusan Masalah

Berdasarkan latar belakang, maka yang menjadi rumusan masalah pada penelitian ini adalah bagaimana teknik penyisipan pesan yang menggunakan metode Least Significant Bit (LSB) dengan menambahkan kunci penyisipan menggunakan persamaan kuadrat.

1.3Batasan Masalah

Batasan masalah yang menjadi acuan dalam pengerjaan skripsi ini adalah:

1. Penelitian ini membahas pengembangan steganografi yang mampu menyembunyikan pesan data *.txt kedalam file Citra *.BMP.

2. Media penampung yang digunakan adalah file Citra dengan Format *.BMP. 3. Pengamanan data dilakukan dengan Memodifikasi Algoritma LSB.

4. Parameter penelitian ini adalah keacakan penyisipan file pesan dan daya tahan file image dengan menghitung nilai Mean Squared Error (MSE).

1.4Tujuan Penelitian

Penelitian ini bertujuan untuk:

1. Mengetahui hasil penyisipan modifikasi Least Significant Bit (LSB) dengan menambahkan Persamaan kuadrat pada kunci penyisipannya.


(12)

1.5Manfaat Penelitian

Dari penelitian ini diharapkan:

1. Menambah Literatur pengamanan pesan dengan teknik Steganografi menggunakan Persamaan kuadrat pada metode LSB (Least Significant Bit) dan menambah pengetahuan tentang teknik steganografi.

2. Memperoleh aplikasi yang dapat menganalisis dan membandingkan teknik steganografi menggunakan metode LSB dan MLSB menggunakan Persamaan kuadrat.

1.6Metode Penelitian

Tahapan yang dilakukan dalam penelitian ini adalah: 1. Studi Literatur

Penulisan tugas akhir ini di awali dengan melakukan pembelajaran literatur pada sejumlah buku, artikel, paper, jurnal, makalah, maupun situs internet mengenai steganografi.

2. Analisis dan Perancangan Sistem

Pada tahap ini akan dilaksanakan perancangan antarmuka dan perancangan sistem dengan menerapkan Persamaan kuadrat pada metode Least Significant Bit (LSB). 3. Implementasi Sistem

Pada tahap ini akan dilaksanakan pengkodean ( coding ). 4. Pengujian Sistem

Dalam tahap ini dilakukan pengujian terhadap sistem yang telah dibangun, seperti malakukan ujicoba Program.

5. Dokumentasi

Dalam tahapan ini dilakukan penyusunan laporan dari hasil perancangan sistem dalam format penulisan penelitian.


(13)

1.7Metode Penelitian

Skripsi ini terdiri dari lima bab, dengan sitematika sebagai berikut:

BAB 1 PENDAHULUAN

Menjelaskan mengenai latar belakang pemilihan judul skripsi, perumusan masalah, batasan masalah, tujuan penelitian, manfaat penelitian, metodologi, dan sistematika penulisan.

BAB 2 LANDASAN TEORI

Membahas teori yang berkaitan dengan Algoritma LSB dan Persamaan kuadrat, proses.

BAB 3 ANALISIS DAN PERANCANGAN SISTEM

Menjelaskan tentang analisis kebutuhan perangkat lunak serta perancangan aplikasi penyisipan dan ekstraksi suatu pesan pada citra cover.

BAB 4 IMPLEMENTASI PROGRAM

Membahas tentang implementasi dari perangkat lunak dan mengulas analisis hasil pengujian yang telah dilakukan terhadap aplikasi.

BAB 5 PENUTUP

Memuat kesimpulan skripsi yang merupakan jawaban dari rumusan masalah dan saran yang berguna untuk melengkapi dan menyempurnakan skripsi ini untuk pengembangan selanjutnya.


(14)

BAB 2

LANDASAN TEORI

2.1 Steganografi

Kata steganografi berasal dari bahasa yunani yang terdiri dari steganos (tersembunyi) graphen (menulis), sehingga bisa diartikan sebagai tulisan yang tersembunyi. Steganografi adalah ilmu yang mempelajari teknik penyembunyian pesan rahasia dalam pesan yang lainnya, sehingga orang tidak akan tahu bahwa terdapat pesan yang rahasia di dalam pesan yang mereka baca.

Hampir semua jenis berkas dapat digunakan untuk steganografi, tetapi format berkas yang cocok untuk steganografi ini adalah yang memiliki Redudancy yang tinggi. Redudancy adalah jumlah bit berlebih dari sebuah objek yang menghasilkan akurasi jauh lebih besar dari yang kita butuhkan untuk penggunaan menampilkan objek.

Watermaking merupakan suatu bentuk dari steganografi. Yang membedakan steganografi dengan watermaking, watermaking merupakan cara penyembunyian pesan ke dalam wadah penampung dan wadah penampung mampu menghadapi proses pengolahan sinyal digital namun tidak merusak wadah penampung sehingga seolah-olah tidak ada perbedaan antara wadah penampung sebelum dan sesudah proses penyembunyian. Sedangkan steganografi memiliki prinsip dasar lebih mengkonsentrasikan pada kerahasian pesannya bukan pada keutuhan wadahnya.

Ada dua proses utama dalam steganografi digital yaitu penyisipan (insertion/embeding) dan ekstraksi (extraction/decoding) pesan. Pesan (embed) dapat berupa plaintext, ciphertext, citra, atau apapun yang dapat ditempelkan ke dalam bit-stream.


(15)

Embedding merupakan proses menyisipkan embed ke dalam berkas yang masih asli yang belum dimodifikasi, yang disebut media cover (cover object). Kemudian media cover dan embed yang ditempelkan membuat media stego (stego object). Extraction adalah proses menguraikan pesan yang tersembunyi dalam media stego. Ringkasnya, steganografi adalah teknik menanamkan embed message pada suatu cover object, dimana hasilnya berupa stego object.

Gambar 2.1 Proses Steganografi

Pihak yang terkait dengan steganografi antara lain embeddor, extractor, dan

stegoanalyst. Embeddor adalah pelaku yang melakukan penyisipan

(embedding),extractor adalah pelaku yang melakukan ekstraksipadastego object, danstegoanalyst adalah pelaku yang melakukan steganalisis. Steganalisis merupakan ilmu dan seni untuk mendeteksi embed yang tersembunyi dalam steganografi.

Penilaian sebuah metode steganografi yang baik dapat dinilai dari beberapa faktor yaituimperceptibility, fidelity, recovery, dan robustness. Karakteristik metode steganografi yang baik adalah memiliki imperceptibility tinggi, fidelity tinggi, recovery maksimum dan robustness tinggi.

1. Imperceptibility

Keberadaan embed dalam media penampung tidak dapat dideteksi. 2. Fidelity

Mutu media penampung setelah ditambahkan embed tidak jauh berbeda dengan mutu media penampung sebelum ditambahkan embed.


(16)

embed yang telah disisipkan dalam media penampung harus dapat diungkap kembali. Hal ini merupakan syarat mutlak dalam sebuah metode steganografi, karena ada banyak cara penyisipan embed yang tidak terdeteksi namun sulit dalam pembacaan kembali.

4. Robustness

Embed yang disembunyikan harus tahan terhadap berbagai operasi manipulasi yang dilakukan pada media penampung. Bila pada media penampung dilakukan operasi-operasi manipulasi, maka embed yang disembunyikan seharusnya tidak rusak (embed masih utuh, tetap bisa diekstrak kembali).

2.2 Media Penampung (Cover Object)

Cover object merupakan media untuk menampung embed pada steganografi. Suatu embed dapat mempunyai hubungan atau bahkan tidak mempunyai hubungan sama sekali dengan media penampung (untuk kasus komunikasi rahasia) atau embedjuga dapat berupa menyediakan info penting tentang media, seperti informasi autentifikasi, judul, tanggal dan waktu pembuatan, hak cipta, nomor seri kamera digital yang digunakan untuk mengambil gambar, informasi mengenai isi dan akses terhadap citra dan lain sebagainya.

Steganografi digital menggunakan media digital sebagai media penampung, seperti teks, citra, audio dan video. Semua berkas yang ada dalam komputer dapat digunakan sebagai media penampung, asalkan berkas tersebut mempunyai bit-bit data redudan yang dapat dimodifikasi. Hal ini juga berlaku untuk media penyisip (embed). Adapun jenis-jenis media penampung adalah:

1. Citra

Format citra sangat sering digunakan di dalam teknik steganografi, karena citra merupakan format berkas yang sangat sering digunakan pada proses pertukaran data. Format citra bitmap true color atau BMP adalah salah satu jenis file citra yang sangat baik jika digunakan di dalam teknik steganografi, karena citra BMP merupakan citra asli yang belum mengalami perubahan (convert), sehingga citra BMP sangat kokoh jika dilakukan penyisipan pesan dan memiliki kapasitas yang banyak.


(17)

2. Teks

Dalam metode steganografi yang menggunakan teks sebagai media penampung, teks yang telah disisipi embed tidak boleh mencurigakan untuk orang yang melihatnya. Contoh berkas yang berupa teks adalah file dengan format .txt, .doc, .docx , dan sebagainya.

3. Audio

Format audio atau suarajuga sering dipilih karena berkas dengan format audio berukuran relatif besar sehingga dapat menampung embeddalam jumlah yang besar pula.

4. Video

Format video memiliki ukuran berkas yang relatif sangat besar namun jarang digunakan karena ukurannya yang terlalu besar sehingga mengurangi kepraktisannya dan juga kurangnya algoritma yang mendukung format ini.

2.3 Pengertian Citra Digital

Citra digital adalah gambar dua dimensi yang dapat ditampilkan pada layar monitor komputer sebagai himpunan berhingga (diskrit) nilai digital yang disebut pixel (picture elemen). Citra digital tersusun dalam bentuk raster (grid atau kisi). Setiap kotak yang terbentuk disebut pixel (picture element) dan memiliki koordinat (x,y). Pixel merupakan suatu elemen citra yang memiliki nilai yang menujukkan intensitas warna. Citra digital dapat didefenisikan sebagai Fungsi dua variabel f(x,y), dimana x dan y adalah koordinat spasial dan nilai f(x,y) merupakan intensitas citra suatu titik. Piksel(0,0) terletak pada sudut kiri atas pada citra, indeks x begerak ke kanan dan indeks y bergerak ke bawah. Konvensi ini dipakai merujuk pada cara penulisan larik yang digunakan dalam pemrograman komputer.

Gambar 2.2 Koordinat pada citra Titik original (0,0)


(18)

Suatu citra digital diperoleh dari penangkapan kekuatan sinar yang dipantulkan oleh objek. Citra digital tersusun atas sejumlah berhingga elemen, masing-masing memiliki lokasi dan nilai/intensitas tertentu. Elemen-elemen ini disebut elemen gambar, elemen citra, pels, dan juga piksel yang dinyatakan dalam bilangan bulat. Tingkat ketajaman atau resolusi warna pada citra digital tergantung pada jumlah bit yang digunakan oleh komputer untuk merepresentasikan setiap pikseltersebut. Tipe yang sering digunakan untuk merepresentasikan citra digital adalah 8-bit citra (256 colors (0 untuk hitam - 255 untuk putih)), tetapi dengan kemajuan teknologi perangkat keras grafik, kemampuan tampilan citra digital di komputer hingga 32 bit (232 warna). Selain citra digital, juga terdapat jenis citra yang lain yakni citra analog. Citra analog adalah citra yang terdiri dari sinyal – sinyal frekuensi elektromagnetis yang belum dibedakan sehingga pada umumnya tidak dapat ditentukan ukurannya. Analog berhubungan dengan hal yang kontinu dalam satu dimensi, contohnya adalah bunyi diwakili dalam bentuk analog, yaitu suatu getaran gelombang udara yang kontinu dimana kekuatannya diwakili sebagai jarak gelombang. Hampir semua kejadian alam boleh diwakili sebagai perwakilan analog seperti bunyi, cahaya, air, elektrik, angin dan sebagainya.

Citra digital dapat dibagi menjadi 3 macam berdasarkan warna-warna penyusunnya :

1. Citra biner (monochrome), atau disebut juga binary image, yaitu citra yang setiap pikselnya hanya memiliki kemungkinan dua warna, yaitu berwarna hitam (0) atau berwarna putih (1). Oleh karena itu, setiap piksel pada citra biner hanya membutuhkan media penyimpanan sebesar 1bit.

2. Citra grayscale (citra keabuan), citra ini terdiri atas warna abu-abu. Setiap piksel citra greyscale merepresentasikan derajat keabuan atau intensitas warna putih. Untuk pengubahan warna image menjadi greyscale dapat dilakukan dengan memberikan bobot untuk masing-masing warna dasar red green blue atau dengan membuat nilai rata-rata dari ketiga warna dasar tersebut.

3. Citra berwarna (true color), yaitu citra yang nilai pikselnya merepresentasikan warna tertentu. Setiap piksel pada citra berwarna memiliki warna yang merupakan kombinasi dari tiga warna dasar red green dan blue.Setiap komponen warna memiliki intensitas sendiridengan nilai minimum 0 dan nilai maksimum


(19)

255 (8-bit). Hal ini menyebabkansetiap pixel pada citra RGB membutuhkan media penyimpanan 3 byte. Jumlahkemungkinan kombinasi warna citra RGB adalah = lebih dari 16 juta warna.

2.3.1 Format File Citra Digital

Citra digital dapat disimpan dalam berbagai format. Format citra digital yang akan digunakan akan mempengaruhi kualitas dari gambar dan kompatibilitas dengan berbagai aplikasi. Misalnya format citra GIF, format ini hanya mendukung sejumlah warna sebanyak 256 (8 bit) saja, oleh sebab itu sangat tidak cocok untuk citra fotografi karena biasanya citra fotografi kaya akan warna. Saat ini tersedia banyak format grafik dan format baru tersebut yang sudah dikembangkan, diantaranya yang terkenal adalah BMP dan JPEG.

2.3.1.1Format Data Bitmap

Pada format bitmap, citra disimpan sebagai suatu matriks dimana masing-masing elemennya digunakan untuk menyimpan informasi warna untuk setiap piksel. Jumlah warna yang dapat disimpan ditentukan dengan satuan bit-per-piksel. Semakin besar ukuran bit-per-piksel dari suatu bitmap, semakin banyak pula jumlah warna yang dapat disimpan. Format bitmap ini sangat cocok digunakan untuk menyimpa citra seperti foto, lukisan, dan frame video karena memiliki banyak variasi dalam bentuk dan warna.

Pada citra bitmap jumlah warna yang dapat disimpan ditentukan oleh banyaknya bit yang digunakan untuk menyimpan setiap titik dari bitmap yang menggunakan satuan bpp (bit per piksel). Dalam Windows dikenal bitmap dengan 1, 8, 16, dan 24 bit per piksel. Jumlah warna maksimum yang dapat disimpan dalam suatu bitmap adalah sebanyak 2n, dimana n adalah banyaknya bit yang digunakan

untuk menyimpan satu titik dari bitmap.

Citra bitmap memiliki kelebihan untuk memanipulasiwarna, tetapi untuk mengubah objek lebih sulit. Tampilan bitmap mampumenunjukkan kehalusan gradiasi bayangan dan warna dari sebuah gambar. Olehkarena itu, bitmap merupakan media


(20)

elektronik yang paling tepat untuk gambar –gambar dengan perpaduan gradiasi warna yang rumit,seperti foto, Kamera Digital,video capture, dan lain-lain.

2.4 Mode Warna

Mode warna RGB menghasilkan warna menggunakan kombinasi dari tiga warna primer red (merah), green (hijau), blue (biru). RGB dimulai dengan warna hitam (ketiadaan semua warna) dan menambahkan merah, hijau, biru terang untuk membuat putih. Kuning diproduksi dengan mencampurkan merah, hijau. warna cyan dengan mencampurkan hijau dan biru. warna magenta dari kombinasi merah dan biru.

Kombinasi warna RGB dapat dilihat pada Gambar 2.3

Gambar 2.3 Kombinasi Warna RGB

Warna campuran (selain dari putih) dihasilkan dengan menambahkan warna komponen RGB individual dengan berbagai tingkat saturasi, dengan tingkatan mulai dari 0.0 hingga 1.0 (0 berarti tidak menggunakan warna tersebut; 1 berarti menggunakan warna tersebut pada saturasi penuh).

Warna didefenisikan dengan memasukkan intensitas untuk setiap komponen dalam matriks. Tiap komponen memiliki matriksnya sendiri-sendiri dan matriks tersebut bisa dijumlahkan. Sebagai contoh, untuk menghasilkan merah saturasi sempurna, masukan (1,0,0) : 100% merah 0% hijau dan 0% biru. Pada saat ketiga komponen warna tersebut dikombinasikan dalam 100% saturasi (1,1,1) hasilnya adalah putih (seperti diperlihatkan berikut):


(21)

2.5 Menghitung Nilai RGB

Menghitung nilai RGB citra cover adalah sama dengan menghitung RGB citra embed, dimana setiap pikselnya mengandung 24-bit kandungan warna atau 8-bit untuk masing-masing warna dasar (R, G, dan B), dengan kisaran nilai kandungan antara 0 (00000000) sampai 255 (11111111) untuk tiap warna yang dapat ditulis sebagai berikut.

Red: RGB (255, 0, 0)……….………….…………..………... (2.1)

Green: RGB (0, 255, 0)... .………..……….... (2.2)

Blue: RGB (0, 0, 255)…..……….………... (2.3)

Dari nilai triplet RGB persamaan (2.1) sampai (2.3) di atas dapat dikonversikan ke dalam nilai desimal seperti dibawah ini:

Red: 255*2560 + 0*2561 + 0*2562 = 255 + 0 + 0 = 255 ………..…... (2.4) Green: 0*2560 + 255*2561 + 0*2562= 0 + 65,280 + 0 = 65,280 ………... (2.5) Blue: 0*2560 + 0*2561 + 255*2562 = 0 + 0 + 16,711,680 = 16,711,680... (2.6) Rumus dasar mencari nilai RGB citra adalah:

R = COLOR AndRGB(255, 0, 0)….……….…... (2.7)

G = (COLOR AndRGB(0, 255, 0)) / 256...……..……….…... (2.8) B = ((COLOR AndRGB(0, 0, 255)) / 256) / 256 ….……….… (2.9)

Dari persamaan (2.4) sampai (2.6) diatas, rumus RGB pada persamaan (2.7) sampai (2.9) menjadi:

Nilai R = c and 255………... (2.10) Nilai G = (c and65,280)/256 ..………...………..…... (2.11) Nilai B = ((c and16,711,680)/256)/256 ………...………... (2.12)

2.6 Least Significant Bit (LSB)

Metode yang digunakan dalam merancang perangkat lunak ini adalah modifikasi dari metode Least Significant Bit (LSB). Oleh karena itu ada baiknya jika kita mengetahui cara kerja metode LSB. Cara kerja metode ini adalah dengan mengganti bit terakhir


(22)

setiap nilai piksel dengan bit-bit pesan rahasia (embed). Sebelum melakukan penyisipan embed ke dalam citra penampung, terlebih dahulu nilai piksel dari citra penampung dan embed harus diubah ke dalam biner.

2.7 Least Significant Bit (LSB) dengan Persamaan kuadrat.

Penyisipan pesan dengan Metode LSB dengan Persamaan kuadrat dilakukan dengan menyisipkan 1 bit embed ke dalam 1 byte LSB citra penampung (citra cover). Namun sebelum data embed disisipkan, terlebih dahulu dilakukan modifikasi dengan menambahkan kunci pada proses penyisipannya yaitu Persamaan kuadrat. Bentuk umum dari Persamaan kuadrat adalah:

f(x) = ax2 + bx + c

Jika suatu fungsi f pada himpunan bilangan real ditentukan oleh f(x)= dengan

a,b,c Є R dan a ≠ 0, maka fungsi tersebut dinamakan persamaan kuadrat. Grafik persamaan kuadrat berupa parabola.

Gambar 2.4 Contoh Grafik FungsiKuadrat

Sifat-sifat yang dikembangkan oleh persamaan kuadrat f(x) = ax2 + bx + c adalah sebagai berikut:

1. Sumbu simetri dan titik puncak atau sering disebut dengan titik ekstrim.


(23)

3. Jika a>0 maka kurva akan terbuka keatas

a. X1 ≠ X2 b. X1 = X2 c. Imajiner

Gambar 2.5 Persamaan kuadrat dengan Nilai a>0

4. Jika a<0 maka kurva akan terbuka kebawah

a. X1 ≠ X2 b. X1 = X2 c. Imajiner

Gambar 2.5 Persamaan kuadrat dengan Nilai a<0

Ket:

Jika D = b2 – 4ac adalah deskriminan (pembeda) akar akar persamaan, maka persamaan kuadrat dapat dibedakan menjadi:

a. D > 0 Persamaan kuadrat mempunyai dua akar real berbeda (X1 ≠ X2) b. D = 0 Persamaan kuadrat mempunyai dua akar real yang sama (X1 = X2)


(24)

c. D < 0 Persamaan kuadrat mempunyai dua akar yang tidak real ( imajiner)

5. Didalam proses perhitungan grafik persamaan kuadrat setiap titik potong disebut dengan dominan. Titik pootng sumbu x diperoleh jika f(x)= 0, sehingga ada atau tidaknya titik potong terhadap sumbu x, tergantung pada besarnya diskriminan (D= b2- 4ac)

Metode LSB menggunakan Persamaan kuadrat dapat disebut juga dengan kombinasi antara Kriptografi dan Steganografi, karena menggunakan private key pada proses penyisipannya. Setiap aspek yang memiliki nilai Confidensiality dapat disebut dengan kriptografi. Confidensiality adalah setiap objek yang tidak untuk diumbar atau dibocorkan kepada subjek yang seharusnya tidak berhak untuk mengetahuinya.

2.8 Perhitungan Fidelity

Salah satu kriteria metode steganografi yang baik adalah dengan terpenuhinya fidelity. Pengukuran fidelitydapat diketahui dengan menghitung nilai Mean Squared Error (MSE) merupakan nilai rata-rata kuadrat dari error citra.

Nilai MSE menunjukkan perbandingan piksel yang rusak dengan piksel aslinya. Semakin besar nilai MSE, maka semakin besar kerusakan citra hasil pengolahan dan sebaliknya, semakin kecil nilai MSE maka nilai piksel hasil pengolahan makin mendekati citra aslinya.


(25)

BAB 3

ANALISIS DAN PERANCANGAN SISTEM

3.1 Analisis Masalah

Masalah dalam sistem ini adalah bagaimana agar sistem ini dapat membantu pengguna sistem untuk melakukan pengamanan data (data security). Dalam sistem ini terdapat dua pengguna yaitu ekstraktor dan embeddor dimana keduanya memiliki peran sesuai kebutuhan.

Yang menjadi masalah utama penelitian ini adalah bagaimana kinerja algoritman LSB menggunakan persamaan kuadrat sebagai kunci. Metode ini akan diteliti dan ditentukan apakah memenuhi kriteria steganografi yang baik.

1. User1 (embeddor) : Adalah seseorang yang melakukan proses penyisipan, penguraian, dan perhitungan Fidelity. Dengan kedua parameter fidelity maka User1 dapat menentukan kelayakan stego Image dapat disampaikan atau tidak kepada User2 (extractor).

2. User2 (extractor) : adalah seseorang yang melakuakan proseses ekstraksi atau penguraian, yaitu penguraian kembali pesan rahasia yang sudah disisipkan.

3. Proses : Sistem ini akan berjalan dengan meneliti penggunaan persamaan kuadrat pada proses steganografi dengan Least Significant Bit (LSB) dapat dilakukan atau tidak.

4. Sistem : sistem ini akan menunjukkan hasil yang dapat dikatakan baik atau tidak dengan meneliti sesuai kriteria steganografi yang baik.


(26)

3.2 Analisis Sistem

Sebelum dilakukan tahap perancangan sebuah sistem, perlu dilakukan analisis sistem yang akan dibangun. Tahapan analisis sistem bertujuan untuk melihat kebutuhan yang dibutuhkan oleh sistem yang akan dibuat serta menentukan kegiatan yang harus dilakukan oleh sistem sehingga menghasilkan output seperti yang diharapkan oleh user.

3.2.1 Analisis persyaratan fungsional

persyaratan fungsional adalah aktifitas dan layanan yang harus diberikan atau disediakan oleh sebuah sistem. Persyaratan fungsional yang harus disediakan oleh sistem adalah sebagai berikut:

1. Data yang digunakan adalah citra dengan format *.BMP sebagai citra cover dan file embed dengan format *.txt sebagai pesan rahasia.

2. Sistem dapat menentukan maksimal karakter yang dapat disisipkan kedalam citra cover dan menghitung koordinat penyisipan pesan kedalam citra cover.

3. sistem dapat menghitung nilai fidelity dari stego image yang ditetapkan sebagai parameter perbandingan antara kedua algoritma yang digunakan yaitu LSB dengan persamaan kuadrat pada kunci.

3.2.2 Analisis persyaratan non-fungsional

persyaratan nonfungsional berkaitan dengan fitur, karakterisitik, dan batasan lainnya yang menetukan apakah sistem memuaskan atau tidak. Persyaratan non-fungsional terhadap sistem ini adalah:

1. Performa:

Sistem harus dapat melakukan proses steganografi sesuai dengan kedua algoritma yaitu LSB serta dapat menunjukkan algoritma dapat berjalan atau tidak.

2. Mudah Digunakan:

Sistem harus dibuat sesederhana mungkin agar tidak menyulitkan penggunanya.


(27)

Sistem tidak membutuhkan perangkat keras lainnya sebagai bantuan 4. Dokumentasi:

Sistem dapat menyimpan stego image 5. Manajemen Kualitas:

Sistem dapat menghasilkan tampilan yang baik dan proses yang relative cepat.

3.3 Pemodelan Prangkat lunak

Perancangan perangkat lunak dibuat menggunakan bahasa pemrograman Matlab 2009 dengan proses membuat tampilan GUI. Perancangan aplikasi yang dibuat pada dasarnya mengikuti metode algoritma LSB yang disajikan oleh penulis. Program yang dibuat berdasarkan langkah demi langkah untuk menyelesaikan teknik Hiding File atau steganografi.

Tiga proses yang dominan di dalam sistem ini adalah Insertion , Extraction dan Perhitungan Fidelity. Insertion adalah proses awal dari sistem yaitu inputan citra penampung. Setelah itu inputan data txt yang menjadi pesan rahasia kemudian setelah data berhasil disisipkan citra akan dihitung nilai ketahanannya dengan perhitungan MSE yang menjadi parameter kelayakan penelitian. Proses yang terakhir adalah ekstraksi, yaitu menguraikan kembali Plaintext atau pesan rahasia dari stego image.

3.3.1 Use Case diagram

Use Case diagram adalah diagram pemodelan setiap aspek dan kegitan di dalam sistem. Sebuah Use Case diagram dapat menggambarkan semua kegiatan di dalam satu sistem yang berjalan, selain itu Use Case juga menggambarkan semua aktor yang melakukan aktifitas di dalam sistem.


(28)

Berikut adalah gambar dari rancangan Use Case diagram.

Gambar 3.1 Use Case sistem

Use Case diagram yang ditunjukkan pada Gambar 3.2 tedapat tiga aktor yaitu User1 sebagai embeddor dan User2 sebagai extractor. User1 memiliki peranan dalam melakukan penyisipan dan penguraian serta mengukur ketahanan file ketika akan melakukan pertukaran data kepada User2 yaitu citra yang sudah disisipi pesan (stego image) . User2 hanya memiliki satu peranan yaitu melakukan penguraian untuk mendapatkan pesan rahasia yang ada sudah disisipkan. Untuk lebih jelas kegiatan sistem dapat dilihat pada keterangan activity diagram berikut ini.

3.3.2 Activity Diagram untuk Use Case Insertion


(29)

Gambar 3.2 Insertion activity diagram


(30)

Tabel 3.1 Spesifikasi Use Case Insertion Name Insertion

Actors User1

Description Use Case ini mendeksripsikan proses Insertion Preconditions User menggunakan aplikasi steganografi

Post Conditions

User dapat melihat hasil Insertion

Kegiatan User Respon sistem

Success Scenario

1. User memilih menu Insertion .

2. User memilih Citra cover, memilih file

embed dan

mengeksekusi tombol Proses.

3. User dapat melihat Citra stego.

1. Sistem menampilkan halaman Insertion

2. Sistem melakukan random kunci.

3. Sistem melakukan proses Insertion dan menampilkan hasil Insertion (Citra stego).


(31)

3.3.3 Activity Diagram untuk Use Case Extraction

Activity diagram untuk Use Case extraction dapat dilihat seperti pada Gambar 3.3

Gambar 3.3 activity diagram extraction Spesifikasi Use Case Extraction dapat dilihat sebagai berikut:

Tabel 3.2 Spesifikasi Use Case Extraction

Name Extraction

Actors User1 dan User2

Description Use Case ini mendeksripsikan proses mendeteksi citra embed dari dalam citra stego

Preconditions User menggunakan aplikasi steganografi Post Conditions User dapat melihat hasil Extraction

Kegiatan User Respon sistem

Success Scenario

1. User memilih menu Extraction.

2. User memilih citra

stego, menggunakan

kunci dan mengeksekusi tombol Extract.

3. User dapat melihat citra embed hasil ekstraksi.

1. Sistem menampilkan halaman Extraction. 2. Sistem melakukan proses

ekstraksi dan menampilkan hasil ekstraksi (Citra embed ).


(32)

3.3.4 Activity Diagram untuk Use Case Fidelity

Activity diagram untuk Use Case extraction dapat dilihat seperti pada Gambar 3.4

Gambar 3.4 Activity Diagram Perhitungan Fidelity Spesifikasi Use Case Hitung fidelity dapat dilihat pada Tabel 3.3

Tabel 3.3 Spesifikasi Use Case Hitung fidelity

Name Hitung MSE

Actors User1

Description Use Case ini mendeksripsikan proses perhitungan MSE Preconditions User sudah melakukan proses Insertion

Post Conditions User dapat mengetahui nilai MSE

Kegiatan User Respon sistem

Success Scenario

1. User memilih menu Hitung MSE/BER.

2. User memilih citra coverdan memilih citra stego,kemudian

mengeksekusi tombol Hitung.

3. User dapat melihat hasil perhitungan nilai MSE

1. Sistem menampilkan halaman Hitung MSE 2. Sistem melakukan proses

perhitungan dan menampilkan hasil perhitungan MSE


(33)

3.4 Diagram Alir (Flow Chart)

Flowchart proses penyisipan dengan metode LSB persamaan kuadrat dapat dilihat pada gambar 3.8.

Gambar 3.5 Flowchart Penyisipan LSB Persamaan kuadrat Ya

Bangkitkan kunci dengan F(x) = ax2 + bx + c

Mulai

Input citra cover

Input karakter txt

Gantikan 1bit LSB citra cover dengan 1bit karakter pesan

Konversikan setiap piksel citra ke nilai Biner

Masih ada data embed?

Selesai Tidak Tampilkan citra Stego Konversikan data embed ke

Nilai Biner Hitung Jumlah Piksel

citra cover (n)

Hitung maksimal karakter pesan txt


(34)

Flowchart proses ekstraksi embed dengan metode LSB menurut Persamaan kuadrat

Gambar 3.6 Flow Chart Ekstraksi Mulai

Input Stego image

Hitung nilai Piksel citra Stego

Ambil 1bit LSB

Masih ada Plaintext

Selesai

Tidak

Konversikan ke dalam nilai biner setiap Piksel citra Stego

Tampilkan Plaintext


(35)

Flowchart menghitung nilai MSE dapat dilihat seperti pada gambar berikut.

Gambar 3.7 Flow Chart Menghitung MSE Mulai

Input citra Cover dan Stego

MSE =

Nilai MSE

Hitung jumlah kuadrat selisih Nilai Grayscale , dimana

S= I (x,y) – I’(xy) Hitung Nilai Piksel

Hitung Nilai RGB Piksel Hitung Dimensi (X,Y)


(36)

3.5 Perancangan

Rancangan antar muka adalah rancangan tampilan sistem yang akan dibentuk oleh penulis pada penelitian ini, berikut adalah rancangan sistem:

3.5.1 Rancangan Menu Utama

Rancangan Menu Utama merupakan tampilan yang pertama kali muncul saat program dijalankan. Pada rancangan ini terdapat menu embed, ekstrak dan keluar. Button Embed berfungsi untuk masuk ke dalam halaman Insertion dan perhitungan fidelity, button ekstrak befungsi untuk masuk ke dalam halaman ekstraksi

Gambar 3.8 Rancangan Menu Utama 3.5.2 Rancangan Insertion

Rancangan button pilih gambar, berfungsi untuk mengunjungi directory penyimpanan citra (browse files) yang diperlukan sistem. Rancangan button cek berfungsi untuk menghitung kapasistas citra cover dan menghitung maksimal karakter yang dapat disisipkan kedalam citra cover. Rancangan button pilih txt, berfungsi untuk mengunjungi directory penyimpanan file txt yang akan disisipkan. Rancangan button Proses berfungsi untuk melakukan proses penyisipan. Rancangan button MSE berfungsi untuk melakukan perhitungan nilai MSE setelah penyisipan selesai.

menu embed ekstrak keluar

Modifikasi Least Significant BIT (LSB) Menggunakan Persamaan Kuadrat Pada Kunci

Steganografi

nama (nim) Tampilan logo fasilkom/Ti


(37)

Rancangan button keluar berfungsi untuk keluar dari laman User dan berpindah kelaman Menu. Tampilan Edit Text “a” berfungsi untuk menampilkan nilai konstanta a (kunci). Tampilan Edit Text “b” berfungsi untuk menampilkan nilai konstanta b (kunci). Tampilan Edit Text “c” berfungsi untuk menampilkan nilai konstanta c (kunci).

Gambar 3.9 Rancangan Insertion

3.5.3 Rancangan Extraction

Rancangan button Extract berfungsi melakukan pengeluaran Insertion pesan txt dari dalam citra stego citra. Rancangan button Browse Stego adalah tombol untuk melakukan pemangilan file citra stego dari memori komputer dan menampilkannya pada picture box, rancangan button SaveEmbed adalah untuk menyimpan file embed hasil ekstraksi, tombol Bersih adalah untuk melakukan pembersihan tampilan dan tombol Keluar untuk menutup tampilan dan mengembalikan kelaman Menu.

Tampilan Citra cover

waktu xxxxx xxxxx

Tampilan Citra stego

Proses Bersih

Pilih txt

Keluar MSE

cek

Ukuran xxxxx save Pilih gambar

Kembali Tampilan karakter txt

a b

xxx xxx


(38)

Gambar 3.10 Rancangan Extraction

Tampilan Citra Stego

alamat File xxxxxxxxxxxxx x

Browse Stego

Tampilan karakter Plaintext

Nama File xxxxxxxxxxxxx Extract

Save Embed

Bersih


(39)

BAB 4

IMPLEMENTASI DAN PENGUJIAN SISTEM

4.1 Pembahasan Algoritma

Tahap ini akan membahas bagaimana kerja teknik algoritma pada sistem yang dibangun. Berikut adalah pembahasan teknik algoritma yang digunakan

4.1.1 Pembahasan Algoritma Least Significant Bit (LSB)

Sistem ini melakuan penyisipan dengan modifikasi Least Significant Bit (LSB) Persamaan kuadrat. Sebelum melakukan penyisipan dengan algoritma ini terlebih dahulu akan dilakukan proses – proses pendukung sebagai berikut

4.1.1.1 Baca Nilai Piksel

Sebelum melakukan Penyisipan, terlebih dahulu dilakukan pembacaan dan penghitungan nilai biner dari masing-masing piksel pada citra cover. Sebagai contoh diberikan citra warna berdimensi 512 x 365 piksel seperti pada Gambar 4.1


(40)

Citra pada Gambar 4.1 di atas dilakukan pembacaan nilai piksel dari masing-masing komponen warna RGB-nya. Sebagai contoh diberikan cuplikan citra 5 x 5 piksel yang berasal dari citra cover yang dapat dilihat seperti pada Gambar 4.2

Gambar 4.2 Sample Citra cover (5 x 5 piksel)

Citra pada Gambar 4.2 di atas dilakukan pembacaan nilai piksel pada data bitmap Citra cover (5 x 5 piksel) seperti pada Gambar 4.3

Gambar 4.3 Nilai Piksel pada Data Bitmap 4.1.1.2 Hitung Nilai Red Green Blue

Untuk mencari masing-masing nilai R, G dan B dilakukan dengan rumus sebagai berikut:

Nilai R = C(i,j) and255………...………...…… (4.1) NilaiG= (C(i,j) and 65280) / 256.………...……...…... (4.2) Nilai B = (C(i,j) and16711680) / 256/256..….………...…... (4.3)

Piksel (0,0) Piksel (0,1) Piksel (0,2) Piksel (i,j) 0001011100100000001 00101010110010100000101000001 101010101010100010100111 ...

Piksel (1,0) Piksel (1,1) Piksel (1,2) Piksel (i,j) 0010001100100011001 00000010110100100110001001100 100111101001110110100100 ...

Piksel (2,0) Piksel (2,1) Piksel (2,2) Piksel (i,j) 0101001001011010010 01100010100110100100101000101 101010111010001110100011 ...

Piksel (3,0) Piksel (3,1) Piksel (3,2) Piksel(i,j) 01100110011100000 10111110111001001100010010 10110 101101101010110010011101 Piksel (4,0) Piksel (4,1) Piksel (4,2) Piksel (i,j)

(0,1) (0,2) (0,3) (0,4)

(1,0) (1,1) (1,2) (1,3) (1,4) (0,0)

(2,0) (2,1) (2,2) (2,3) (2,4)

(3,0) (3,1) (3,2) (3,3) (3,4)


(41)

Dimana C(i,j) adalah nilai piksel citra pada kordinat (i,j) dalam biner. Maka dilakukan perhitungan nilai R, G, B pada Gambar 4.2 di atas:

1. Nilai piksel (0,0)=000101110010000000100101.

Nilai R = 000101110010000000100101and 11111111 =00100101 = 37 (dec) Nilai G = (000101110010000000100101and 1111111100000000)/100000000 = 00100000= 32(dec).

Nilai B= (000101110010000000100101and111111110000000000000000)/ 100000000/100000000 = 00010111= 23(dec).

2. Nilai piksel (0,1)=010110010100000101000001.

Nilai R = 010110010100000101000001and 11111111 =01000001 = 65 (dec)

Nilai G = (010110010100000101000001and 1111111100000000)/100000000 = 01000001= 65(dec).

Nilai B = (010110010100000101000001and 111111110000000000000000)/ 100000000/100000000 = 01011001= 89(dec).

R=37 G=32 B=23 R=65 G=65 B=89 R=167 G=168 B=170 R=171 G=147 B=153 R=160 G=130 B=141 R=32 G=35 B=35 R=76 G=76 B=90 R=164 G=157 B=158 R=181 G=170 B=179 R=204 G=203 B=199 R=76 G=90 B=82 R=69 G=73 B=83 R=163 G=163 B=171 R=186 G=190 B=189 R=177 G=184 B=162 R=95 G=112 B=102 R=86 G=98 B=114 R=157 G=172 B=182 R=167 G=182 B=184 R=174 G=186 B=187 R=74 G=84 B=93 R=121 G=134 B=152 R=173 G=187 B=194 R=184 G=196 B=207 R=202 G=214 B=227


(42)

Pencarian nilai piksel terus dilanjutkan sampai dengan piksel (4,4) dihitung dengan cara yang sama seperti diatas. Dari hasil perhitungan nilai RGB citra di atas dimasukkan pada matriks citra cover RGB seperti pada Gambar 4.3

4.1.1.3 Hitung Nilai BinerSetiap Karakter

File yang digunakan sebagai pesan yang akan disisipkan berformat *.txt. Misalkan

karakter pesan yang akan disisipkan adalah “RAHASIA”. Setiap karakter dari pesan

akan dilakukan perhitungan nilai binernya. Untuk mempermudah proses perhitungan kita dapat menggunakan tabel ASCII sebagai bantuan untuk menentukan nilai biner dari masing-masin karakter pesan “H”. Dengan demikian, nilai biner masing masing karakter dapat kita liha pada table 4.1

Tabel 4.1 Tabel Nilai Biner Pesan

Karakter Pesan Nilai Biner Berdasarkan Table ASCII

“H” 0100 1000

Dari tabel 4.1 dapat kita ketahui jumlah total dari bit pesan yang akan disisipkan adalah 56 bit. Dengan demikian dibutuhkan 56 piksel atau lebih agar seluruh pesan dapat disisipkan kedalam citra penampungnya, karena dengan teknik LSB dan LSB menurut Persamaan kuadrat setiap 1 piksel citra hanya dapat menampung 1 bit pesan yang akan disisipkan.

Penyembunyian data dilakukan dengan mengganti bit-bit data yang tidak terlalu berpengaruh didalam segmen citra dengan bit-bit data rahasia atau pesan rahasia pada susunan bit didalam sebuah byte (1 byte = 8 bit).

Urutan bit didalam sebuah byte terdapat satu buah bit yang sangat berarti yaitu disebut dengan Most Significant Bit (MSB) dan terdapat juga satu bit yang tidak berarti yang disebut dengan Least Significant Bit (LSB).


(43)

Gambar 4.5 Bit MSB dan LSB dibarisan bit didalam byte

Langkah – langkahpenyisipanalgoritma LSB adalahsebagaiberikut; 1. Input cover citra

2. Baca nilai Piksel citra, kemudian ubah kedalam bentuk biner 3. Hitung maksimal pesan yang dapat disisipkan

4. Input teks dan ubah kebentuk biner

5. Gantikan 1 bit LSB dari piksel cover image dengan 1 bit embed. 6. Petakan menjadi citra baru (stego image).

Dengan Algoritma LSB setiap byte dari citra penampung dapat disisipkan 1bit pesan secara berurutan sampai karakter pesan selesai disisipkan. Berikuta dalah citra dalam bentuk biner dengan dengan kapasitas 5x5 piksel yang belum disisipi pesan.

Gambar 4.6 Citra Cover 5x5 Piksel dalam Bentuk Biner

karakter yang akan disisipkan adalah karakter “H” dengan nilai biner “0100

1000”, dengan demikian ada 8 piksel yang akan disisipi pesan. Berikut adalah proses


(44)

Gambar 4.7 Citra Stego 5x5 Piksel dalam Bentuk Biner

Teknik penyisipan dilakukan pada bit-bit terakhir atau paling kanan disetiap barisan bit didalam byte pada citra penampungnya. Metode LSB sudah banyak dilakukan didalam teknik steganografi, sehingga membutuhkan pengembangan atau modifikasi, untuk pengembangannya dapat berupa penambahan kunci maupun merubah teknik penyisipannya.

4.1.2Least Significant Bit (LSB) Menurut Persamaan kuadrat

Teknik penyisipan menggunakan algoritma LSB menurut Persamaan kuadrat bertujuan untuk menentukan letak penyisipan suatu teks kedalam sebuah citra cover. Penyisipan pesan menggunakan metode LSB menurut Persamaan kuadrat dilakukan dengan menyisipkan 1 bit embed kedalam 1 byte cover citra dengan menggatikan 1 bit LSB dengan 1 bit pesan. Proses penyisipan dimulai dengan menghitung letak koordinat penyisipannya dengan fungsi kudrat f(x) = ax2 + bx + c. Nilai konstanta a,b, dan c dibangkitkan sistem dengan nilai yang teteap.

Langkah – langkah yang dilakukan dalam proses Penyisipan menggunakan metode LSB menurut Persamaan kuadrat adalah sebagai berikut:

1. Input cover citra

2. Baca nilai Piksel citra, kemudian ubah kedalam bentuk biner 3. Bangkitkan kunci (a=1, b=1, dan c=1)

4. Input teks dan ubah kebentuk biner

5. Tentukan letak koordinat penyisipan dengan menggunakan Persamaan kuadrat


(45)

6. Gantikan 1 bit LSB dari piksel cover image dengan 1 bit embed. 7. Petakan menjadi citra baru (stego image).

Berikut adalah citra cover 11x18 piksel yang disiapkan untuk menyisipkan

karakter “H” dengan nilai biner “0100 1000”, dengan demikian ada 8 piksel yang akan disisipi pesan. Berikut adalah proses Insertion LSB. Maka hasil penyisipannya sebagai berikut.

Gambar 4.8 Citra Cover 11x18 Piksel dalam Bentuk Biner

Setelah itu dilakukan proses pembangkitan kunci (a, b, dan c) secara otomatis oleh sistem. Kemudian dilakukan perhitungan letak penyisipan kedalam citra cover dengan menghitung nilai xmax berdasarkan persamaan persamaan kuadrat.

Maka pesan yang dapat disisipkan pada citra cover 10x18 piksel adalah sebanyak 8 bit . Input karakter yang akan disisipkan kedalam cover citra pada gambar 3.5 diatas. Kita asumsikan karakter yang akan disisipkan adalah karakter “A” dengan nilai biner “0100 0001”, dengan demikian ada 8 piksel yang akan disisipi pesan. Berikut adalah proses Insertion LSB menurut Persamaan kuadrat.


(46)

Penyelesaiannya sebagai berikut, sistem membangkitkan konstanta yang bernilai a=1, b=1 dan c=1 (private key), penyelesaian:

1. Dimulai penyisipan 1 bit pertama yaitu x = 0, maka : f(x) = ax2 + bx+c

f(x) = 1(0) + 1(0)+1 f(x) = 1

letak koordinat penyisipan bit pertama adalah {0,1} 2. Penyisipan 1 bit kedua yaitu x = 1

f(x) = ax2 + bx+c f(x) = 1(1)2 + 1(1)+1 f(x) = 3

Letak koordinat penyisipan 1 bit kedua adalah {1,3} 3. Penyisipan 1 bit ketiga yaitu x = 2

f(x) = ax2 + bx+c f(x) = 1(2)2 + 1(2)+1 f(x) = 7

Letak koordinat penyisipan 1 bit ketiga adalah {2,7} 4. Penyisipan 1 bit keempat yaitu x = 3

f(x) = ax2 + bx+1 f(x) = 1(3)2 + 1(3)+1 f(x) = 13

Letak koordinat penyisipan bit pertama adalah {3,13}. 5. Dimulai penyisipan 1 bit kelima yaitu x = 4, maka :

f(x) = ax2 + bx+c f(x) = 1(4)2 + 1(4)+1 f(x) = 21

letak koordinat penyisipan bit kelima adalah {4,21} 6. Penyisipan 1 bit keenam yaitu x = 5

f(x) = ax2 + bx+1 f(x) = 1(5)2 + 1(5)+1 f(x) = 31


(47)

7. Penyisipan 1 bit ketujuh yaitu x = 6 f(x) = ax2 + bx+1

f(x) = 1(6)2 + 1(6)+1 f(x) = 43

Letak koordinat penyisipan 1 bit ketujuh adalah {6,43} 8. Penyisipan 1 bit kedelapan yaitu x = 7

f(x) = ax2 + bx+1 f(x) = 1(7)2 + 1(7)+1 f(x) = 57

Letak koordinat penyisipan bit kedelapan adalah {7,57}.

Setelah semua koordinat penyisipan selesai dihitung, kemudian gantikan 1 bit LSB dengan 1 bit pesan sesuai dengan koordinat peletakannya masing – masing. Dari

hasil perhitungan koordinat diatas dapat kita ketahui bahwa pesan “0100 0001” dapat

disisipkan pada koordinat piksel cover citra urutan {(0,1), (1,3), (2,7), (3,13), (4,21), (5,31), (6,43) dan (7,57)}.

4.1.3 Perhitungan Fidelity

Salah satu parameter yang digunakan adalah ketahan file (fidelity) metode yang digunakan untuk melihat ketahanan cover adala perhitungan MSE dan BER, sebagai berikut.

4.1.3.1 Perhitungan Nilai Mean Squed Error(MSE)

Untuk mengukur ketahanan metode LSB adalah dengan melakukan perhitungan MSE citra stego dengan menggunakan persamaanberikutini:

MSE=

...(4.5)


(48)

30 73 168 157 143 30 65 167 137 157 34 80 159 176 202 33 71 137 189 193 82 75 165 188 183 69 64 189 161 160 103 99 170 177 182 97 125 167 162 191 83 135 184 195 214 83 135 184 195 214

Gambar 4. 8 Matriks Citra Cover dan Citra Stego

MSE =

MSE =

MSE =

0+64+1+400+196+1+81+484+169+81+169+121 +576+729+529+36+676+9+225+81+0+0+0+0+0

MSE =

4627 MSE = 0,18508

4.2 Pengujian Sistem

Pengujian dilakukan pada citra *.BMP sebagai citra penampung yang akan disisipi file teks yang berformat *.txt dengan panjang karakter sesuai dengan citra yang dipilih oleh User. Parameter yang digunakan untuk membandingkan kedua metode ini juga akan dihitung setelah proses insertion selesai.

4.2.1 Tampilan menu utama

Pada sistem yang dibangun terdapat dua fungsi menu utama yaitu fungsi embed dan fungsi esktrak. Fungsi embed berfungsi untuk melakukan proses penyisipan teks


(49)

kedalam sebuah citra cover, sedangkan menu ekstrak berfungsi mengekstrak kembali teks yang telah disisipi pada citra cover.

Gambar 4.9 Tampilan Menu Utama Sistem

4.2.1 Proses penyisipan pesan

Padatahap insertion langkah yang pertama sekali dilakukan adalah mengimputkan citra penampung. Kemudian dilakukan pengecekan terhadap banyak karakter yang dapat disisipkan kedalam citra tersebut. Setelah itu diinputkan file teks yang telah berisi pesan rahasia yang banyak karakternya sesuai dengan kapasitas citra. Selanjutnya dilakukan proses insertion yang akan menghasilkan citra yang sudah disisipkan pesan rahasia (stego image) yang kemudian disimpan di dalam file directory.


(50)

Gambar4.10 Form Penyisipan LSB menurut Persamaan Kuadrat

4.2.2 Proses Ekstraksi Pesan

Pada tahap ekstraksi langkah pertama yang dilakukan adalah menginputkan stego image yang telah disimpan di dalam direktori penyimpanan, kemudian lakukan proses penguraian pesan yang terdapat pada stego image tersebut. Kemudian system akan menampilkan file teks yang tersisip pada citra. Proses ekstraksi dapat dilihat pada gambar 4.11.


(51)

(52)

BAB 5

KESIMPULAN DAN SARAN

5.1 Kesimpulan

Berdasarkan keseluruhan proses yang telah dilakukan secara teori maupun pengujian sistem, maka kesimpulan yang dapat diambil adalah

1. Steganografi file teks kedalam citra dapat dilakukan dengan metode LSB menurut Persamaan kuadrat dengan terlebih dahulu mengolah karakter dan matriks citra.

2. Penyisipan file teks kedalam citra menggunakan algoritma LSB membutuhkan daya penampung yang sangat besar, hal ini dikarenakan letak koordinat penyisipan bit-bit pesan terlebih dahulu dihitung menggunakan rumus Persamaan kuadrat sebelum dilakukan penyisipan.

3. Dari pengujian Fidelity metode LSB menurut Persamaan kuadrat sangat baikdari segi ketahanan dengan nilai Fidelity MSE = 0,00163333

4. Steganografi menggunakan metode LSB menurut persamaan kuadrat telah memenuhi kriteria steganografi yang baik, hal ini dikarenakan hasil penyisipan kedua metode tersebut tidak dapat dilihat dengan kasat mata (imperceptibility) mutu citra dapat dikatakan tidak berubah (fidelity) dan dapat dilakukan penguraian dengan akurat (ekstraksi)

5.2 Saran

Berikut adalah beberapa saran penulis yang dapat digunakan sebagai pertimbangan demi mendapatkan tujuan yang lebih akurat


(53)

1. Objek penampung pada penelitian ini adalah citra dengan format *.BMP, untuk pengembangan selanjutnya dapat dilakukan perubahan dengan menggunakan file citra dengan format yang lain bahkan dapat juga digunakan menggunakan file digital yang lainnya seperti Audio dan Video.

2. Kinerja sistem pada Penelitian ini membutuhkan banyak waktu pada proses penyisipannya, untuk pengembangannya dapat dilakukan penelitian untuk mempercepat proses penyisipan.

3. Algoritma LSB menurut Persamaan kuadrat tidak optimal jika digunakan untuk menyembunyikan file *.txt dengan jumlah karakter yang banyak, karena membutuhkan kapasitas penampung yang sangat besar dan waktu pemrosesan yang sangat lama, untuk pengembangannya dapat dilakukan penetapan kunci atau nilai konstanta a, b, dan c guna memperbanyak karakter yang dapat disisipkan kedalam sebuah cover image.

4. Perlu penelitian lanjutan karena hasil dari bentuk garis yang ditarik dari setiap pixel belum memenuhi harapan, yaitu berbentuk kurva terbuka.


(54)

DAFTAR PUSTAKA

Dony Ariyus. 2008. Pengantar Ilmu Kriptografi. Jogjakarta,Indonesia: Penerbit Andi. Esti Suryani. 2008. Kombinasi Kriptografi dengan Hillcipher dan Steganografi dengan

LSB Untuk Keamanan Data Teks. Jurnal. Magelang, Indonesia : Universitas Muhammadyah Magelang

Henny Hariani Lubis. 2012. Analisis dan Perancangan Pengujian Nilai MSE (Mean Squared Error) pada Proses Penyisipan Label Citra dengan Algoritma Modified Least Significant Bit (LSB) terhadap Modifikasi Nilai Brightness. Medan , Indonesia : Universitas Sumatera Utara

Henry Setyawan. 2009. Implementasi Steganografi Dengan Metode Least Significant Bit. Jurnal. Banda Aceh, Indonesia : Universitas Syiah Kuala.

M. Anggrie Setyawan. 2012. Implementasi Steganografi Pada Citra Digital BMP Menggunakan Java. Skripsi. Bandung, Indonesia : Politeknik Telkom Bandung.

Marghny Mohamed. 2010. Data Hiding by LSB Substitution Using Genetic Optimal Key_Permutation. Journal. Assiut, Egypt : Assiut University

Mark Ryan. 2010. Calculus Essentials for Dummies. Wiley Publishing, Inc.

Mollin, Richard A. 2005. The Guide to Secrecy form ancient to Modern Times. Boca Raton, USA : Taylor & Francis group, LLC.

Mollin, Richard A. 2007. An Introduction to Cryptography, Second Edition. Boca Raton, USA : Taylor & Francis group, LLC.


(55)

Listing Program Menu

function varargout = menu(varargin)

% Begin initialization code - DO NOT EDIT gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @menu_OpeningFcn, ... 'gui_OutputFcn', @menu_OutputFcn, ... 'gui_LayoutFcn', [] , ...

'gui_Callback', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end

% End initialization code - DO NOT EDIT

% --- Executes just before menu is made visible.

function menu_OpeningFcn(hObject, eventdata, handles, varargin) guidata(hObject, handles);

axes(handles.axes1); imshow('usu.png');

handles.output = hObject; guidata(hObject, handles);

% --- Outputs from this function are returned to the command line. function varargout = menu_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;

% --- function Menu_Callback(hObject, eventdata, handles)

% --- function Embed_Callback(hObject, eventdata, handles)

Insertion close(gcbf)

% --- function Ekstrak_Callback(hObject, eventdata, handles)

extractfgsi close(gcbf)

% --- function Keluar_Callback(hObject, eventdata, handles)

choice = questdlg('Exit?','confirm',... 'Yes','No','No'); End


(56)

Listing ProgramPenyisipan function varargout = Insertion(varargin)

% Begin initialization code - DO NOT EDIT gui_Singleton = 1;

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

'gui_OpeningFcn', @Insertion_OpeningFcn, ... 'gui_OutputFcn', @Insertion_OutputFcn, ... 'gui_LayoutFcn', [] , ...

'gui_Callback', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end

% End initialization code - DO NOT EDIT

% --- Executes just before Insertion is made visible.

function Insertion_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;

% Update handles structure guidata(hObject, handles);

% --- Outputs from this function are returned to the command line. function varargout = Insertion_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;

function inputtext_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function inputtext_CreateFcn(hObject, eventdata, handles)

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

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

% --- Executes on button press in mse.

function mse_Callback(hObject, eventdata, handles) R1_s = handles.citra(:,:,:);

R2_s = handles.formasi(:,:,:);

dR_s = abs(double(R1_s) - double(R2_s)); mse_s=(dR_s(:).^2);

p=length(mse_s);


(57)

set(handles.MSEhsl,'String',mse2);

% --- Executes on button press in browse.

function browse_Callback(hObject, eventdata, handles)

[nama_file,nama_path] = uigetfile({'*.bmp';},'Buka Citra'); if ~isequal(nama_file,0) awal=(fullfile(nama_path,nama_file)); handles.citra=imread(awal); guidata(hObject,handles); axes(handles.cover); imshow(handles.citra); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% end

% --- Executes on button press in browsetext.

function browsetext_Callback(hObject, eventdata, handles) [nama_file,nama_path] = uigetfile({'*.txt';},'Buka Citra'); if ~isequal(nama_file,0) awal=(fullfile(nama_path,nama_file)); handles.tulis=fileread(awal); l=double(handles.tulis); j=dec2bin(l); [apa ini]=size(j) if apa > handles.kar

errordlg('text melampaui kapaitas ','Error'); return end guidata(hObject,handles); set(handles.inputtext,'String',handles.tulis); end

% --- Executes on button press in cek.

function cek_Callback(hObject, eventdata, handles) handles.m=1; set(handles.A,'String',handles.m); handles.b=1; set(handles.B,'String',handles.b); handles.c=1; set(handles.C,'String',handles.c); [bbb kk zz]=size(handles.citra); jum=bbb*kk*zz; lipat=bbb*3; bar=reshape(handles.citra,jum,1); p=dec2bin(bar); %nilai konstanta x1=1; y1=1;

%misahin per kolom a=1;

semua=lipat*kk*8; skalar=8*kk; %tentuin y


(58)

for yuyu=1:lipat

rumus=(handles.m*(yuyu*yuyu))+(handles.b*yuyu)+handles.c;%ax^2+bx+c if rumus <= kk

barisasli(a)=kk*yuyu+rumus; a=a+1; end end [ko l]=size(barisasli); ss1=1; barisasli; %proses biasa for tt=1:lipat*kk for uu=1:8

if ss1<=l && barisasli(ss1)==tt && uu==8 ss1=ss1+1; end end end bit=ss1-1; % set(handles.text5,'String',bit); handles.kar=floor(bit/7); guidata(hObject,handles); set(handles.size,'String',handles.kar);

% --- Executes on button press in save.

function save_Callback(hObject, eventdata, handles) [file,path]=uiputfile('*.bmp','save');

Name=fullfile(path,file); imwrite(handles.formasi,Name);

% --- Executes on button press in proses.

function proses_Callback(hObject, eventdata, handles) tic

[bbb kk zz]=size(handles.citra); jum=bbb*kk*zz; lipat=bbb*3; bar=reshape(handles.citra,jum,1); p=dec2bin(bar); handles.p=p; handles.tulis=(get(handles.inputtext,'String')); l=double(handles.tulis); j=dec2bin(l);

savefile = 'varfungsikuadratfile.mat'; [rr cc]=size(j) %nilai konstanta x1=1; y1=1; m=handles.m; b=handles.b;

%misahin per kolom a=1;

semua=lipat*kk*8; skalar=8*kk;


(59)

%tentuin y

%koor y tanpa baris for yuyu=1:lipat

rumus=(handles.m*(yuyu*yuyu))+(handles.b*yuyu)+handles.c;%ax^2+bx+c if rumus <= kk

barisasli(a)=kk*yuyu+rumus; a=a+1; end end [ko l]=size(barisasli); ss2=1; barisasli; %proses biasa for tt=1:lipat*kk for uu=1:8 gambarbaru(tt,uu)=p(tt,uu);

if ss2<=l && barisasli(ss2)==tt && uu==8 && x1<=rr gambarbaru(tt,8)=j(x1,y1); y1=y1+1; ss2=ss2+1; if y1>cc x1=x1+1; y1=1; end end end end p; j; gambarbaru; handles.gambarbaru=gambarbaru; [be le lu]=size(handles.citra); [jj1 kk1]=size(gambarbaru); g=bin2dec(gambarbaru); kok=toc; handles.g=g; handles.formasi=uint8(reshape(g,be,le,lu)); axes(handles.stego); imshow(handles.formasi); guidata(hObject,handles); set(handles.waktu,'String',kok); m=handles.m; b=handles.b; c=handles.c;

save(savefile, 'rr', 'cc','m','b','c');

% --- Executes on button press in kembali.

function kembali_Callback(hObject, eventdata, handles) close(gcbf)

menu

% --- Executes on button press in bersih.

function bersih_Callback(hObject, eventdata, handles) cla(handles.cover,'reset');


(60)

set(handles.cover,'xtick',[],'ytick',[],'Xcolor','w','Ycolor','w'); set(handles.inputtext,'String',''); set(handles.size,'String',''); set(handles.waktu,'String',''); set(handles.A,'String',''); set(handles.B,'String',''); set(handles.C,'String',''); clear all; clc;

% --- Executes on button press in keluar.

function keluar_Callback(hObject, eventdata, handles) choice = questdlg('Exit?','confirm',...

'Yes','No','No'); % Handle response switch choice case 'Yes' close all; end % --- function Untitled_1_Callback(hObject, eventdata, handles)

% --- function Untitled_2_Callback(hObject, eventdata, handles)

% --- function Untitled_3_Callback(hObject, eventdata, handles)

% --- function Untitled_4_Callback(hObject, eventdata, handles)

% --- function Menu_Callback(hObject, eventdata, handles)

menu

close(gcbf)

% --- function Embed_Callback(hObject, eventdata, handles)

% --- function Ekstrak_Callback(hObject, eventdata, handles)

extractfgsi close(gcbf)

% --- function Exit_Callback(hObject, eventdata, handles)

choice = questdlg('Exit?','confirm',... 'Yes','No','No');

% Handle response switch choice case 'Yes' close all; end

function A_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function A_CreateFcn(hObject, eventdata, handles)

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


(61)

end

function B_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function B_CreateFcn(hObject, eventdata, handles)

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

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

function C_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function C_CreateFcn(hObject, eventdata, handles)

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

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

function MSEhsl_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function MSEhsl_CreateFcn(hObject, eventdata, handles)

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

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

Ekstraksi function varargout = extractfgsi(varargin)

% Begin initialization code - DO NOT EDIT gui_Singleton = 1;

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

'gui_OpeningFcn', @extractfgsi_OpeningFcn, ... 'gui_OutputFcn', @extractfgsi_OutputFcn, ... 'gui_LayoutFcn', [] , ...

'gui_Callback', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end

% End initialization code - DO NOT EDIT

% --- Executes just before extractfgsi is made visible.

function extractfgsi_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;


(62)

% Update handles structure guidata(hObject, handles);

% --- Outputs from this function are returned to the command line.

function varargout = extractfgsi_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;

function edit1_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function edit1_CreateFcn(hObject, eventdata, handles)

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

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

% --- Executes on button press in pushbutton1.

function pushbutton1_Callback(hObject, eventdata, handles) [nama_file,nama_path] = uigetfile({'*.bmp';},'Buka Citra'); if ~isequal(nama_file,0) awal1=(fullfile(nama_path,nama_file)); handles.citra=imread(awal1); guidata(hObject,handles); axes(handles.axes1); imshow(handles.citra); ok=imfinfo(awal1); set(handles.edit1,'String',ok.Filename); end

% --- Executes on button press in pushbutton2.

function pushbutton2_Callback(hObject, eventdata, handles) load('varfungsikuadratfile.mat', 'rr', 'cc','m','b','c'); [bbb kk zz]=size(handles.citra);

jum=bbb*kk*zz; lipat=bbb*3; bar=reshape(handles.citra,jum,1); p=dec2bin(bar); handles.p=p; %nilai konstanta x1=1; y1=1;

%misahin per kolom a=1;

semua=lipat*kk*8; skalar=8*kk; %tentuin y

%koor y tanpa baris for yuyu=1:lipat

pisah=(a/lipat)*jum;

rumus=((m*(yuyu*yuyu))+(b*yuyu)+c)*8;%rumus ax^2+bx+c if rumus <=skalar


(63)

koory=barisbaru+rumus; %membagi koor dengan baris hslbg=(koory/(skalar)); hslbg=floor(hslbg); hsl=mod(koory,skalar); hslak=hsl/8; oppp(yuyu)=round((kk*hslbg)+hslak); a=a+1; end end [ko l]=size(oppp); ss2=1; b1=1; k1=1; for a=1:l

if b1<=rr && k1<=kk

pesanmlsb(b1,k1)=p(oppp(a),8); k1=k1+1; if k1>=8 b1=b1+1; k1=1; end end end g=bin2dec(pesanmlsb); h=char(g); lol=transpose(h); handles.lol=lol; guidata(hObject,handles); set(handles.listbox1,'String',lol);

% --- Executes on button press in pushbutton3.

function pushbutton3_Callback(hObject, eventdata, handles) [file,path]=uiputfile('*.txt','save');

Name=fullfile(path,file); dlmwrite(Name,handles.lol);

warndlg('file telah tersimpan','!! Simpan !!')

% --- Executes on button press in pushbutton4.

function pushbutton4_Callback(hObject, eventdata, handles) cla(handles.axes1,'reset'); set(handles.axes1,'xtick',[],'ytick',[],'Xcolor','w','Ycolor','w'); set(handles.edit1,'String',''); set(handles.edit2,'String',''); set(handles.listbox1,'String',''); clear all; clc;

% --- Executes on button press in pushbutton5.

function pushbutton5_Callback(hObject, eventdata, handles)

% --- Executes on selection change in listbox1.

function listbox1_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function listbox1_CreateFcn(hObject, eventdata, handles)


(64)

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

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

function edit2_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function edit2_CreateFcn(hObject, eventdata, handles)

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

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

% --- function menu_Callback(hObject, eventdata, handles)

menu

% --- function embed_Callback(hObject, eventdata, handles)

Insertion close(gcbf)

% --- function ekstrak_Callback(hObject, eventdata, handles)

extractfgsi close(gcbf)

% --- function keluar_Callback(hObject, eventdata, handles)

choice = questdlg('Exit?','confirm',... 'Yes','No','No');

% Handle response switch choice case 'Yes' close all; end


(1)

%tentuin y

%koor y tanpa baris for yuyu=1:lipat

rumus=(handles.m*(yuyu*yuyu))+(handles.b*yuyu)+handles.c;%ax^2+bx+c if rumus <= kk

barisasli(a)=kk*yuyu+rumus; a=a+1;

end end

[ko l]=size(barisasli); ss2=1;

barisasli; %proses biasa for tt=1:lipat*kk for uu=1:8

gambarbaru(tt,uu)=p(tt,uu);

if ss2<=l && barisasli(ss2)==tt && uu==8 && x1<=rr gambarbaru(tt,8)=j(x1,y1);

y1=y1+1;

ss2=ss2+1; if y1>cc

x1=x1+1; y1=1; end

end end end p; j;

gambarbaru;

handles.gambarbaru=gambarbaru; [be le lu]=size(handles.citra); [jj1 kk1]=size(gambarbaru); g=bin2dec(gambarbaru); kok=toc;

handles.g=g;

handles.formasi=uint8(reshape(g,be,le,lu)); axes(handles.stego);

imshow(handles.formasi); guidata(hObject,handles);

set(handles.waktu,'String',kok); m=handles.m;

b=handles.b; c=handles.c;

save(savefile, 'rr', 'cc','m','b','c');

% --- Executes on button press in kembali.

function kembali_Callback(hObject, eventdata, handles) close(gcbf)

menu

% --- Executes on button press in bersih.

function bersih_Callback(hObject, eventdata, handles) cla(handles.cover,'reset');


(2)

set(handles.cover,'xtick',[],'ytick',[],'Xcolor','w','Ycolor','w'); set(handles.inputtext,'String','');

set(handles.size,'String',''); set(handles.waktu,'String',''); set(handles.A,'String',''); set(handles.B,'String',''); set(handles.C,'String',''); clear all;

clc;

% --- Executes on button press in keluar.

function keluar_Callback(hObject, eventdata, handles) choice = questdlg('Exit?','confirm',...

'Yes','No','No'); % Handle response switch choice case 'Yes' close all; end

% --- function Untitled_1_Callback(hObject, eventdata, handles)

% --- function Untitled_2_Callback(hObject, eventdata, handles)

% --- function Untitled_3_Callback(hObject, eventdata, handles)

% --- function Untitled_4_Callback(hObject, eventdata, handles)

% --- function Menu_Callback(hObject, eventdata, handles)

menu

close(gcbf)

% --- function Embed_Callback(hObject, eventdata, handles)

% --- function Ekstrak_Callback(hObject, eventdata, handles)

extractfgsi close(gcbf)

% --- function Exit_Callback(hObject, eventdata, handles)

choice = questdlg('Exit?','confirm',... 'Yes','No','No');

% Handle response switch choice case 'Yes' close all; end

function A_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function A_CreateFcn(hObject, eventdata, handles)

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


(3)

end

function B_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function B_CreateFcn(hObject, eventdata, handles)

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

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

function C_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function C_CreateFcn(hObject, eventdata, handles)

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

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

function MSEhsl_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function MSEhsl_CreateFcn(hObject, eventdata, handles)

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

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

Ekstraksi

function varargout = extractfgsi(varargin)

% Begin initialization code - DO NOT EDIT gui_Singleton = 1;

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

'gui_OpeningFcn', @extractfgsi_OpeningFcn, ... 'gui_OutputFcn', @extractfgsi_OutputFcn, ... 'gui_LayoutFcn', [] , ...

'gui_Callback', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end

% End initialization code - DO NOT EDIT

% --- Executes just before extractfgsi is made visible.

function extractfgsi_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;


(4)

% Update handles structure guidata(hObject, handles);

% --- Outputs from this function are returned to the command line.

function varargout = extractfgsi_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;

function edit1_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function edit1_CreateFcn(hObject, eventdata, handles)

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

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

% --- Executes on button press in pushbutton1.

function pushbutton1_Callback(hObject, eventdata, handles) [nama_file,nama_path] = uigetfile({'*.bmp';},'Buka Citra'); if ~isequal(nama_file,0)

awal1=(fullfile(nama_path,nama_file)); handles.citra=imread(awal1);

guidata(hObject,handles); axes(handles.axes1); imshow(handles.citra); ok=imfinfo(awal1);

set(handles.edit1,'String',ok.Filename); end

% --- Executes on button press in pushbutton2.

function pushbutton2_Callback(hObject, eventdata, handles) load('varfungsikuadratfile.mat', 'rr', 'cc','m','b','c'); [bbb kk zz]=size(handles.citra);

jum=bbb*kk*zz; lipat=bbb*3;

bar=reshape(handles.citra,jum,1); p=dec2bin(bar);

handles.p=p; %nilai konstanta x1=1;

y1=1;

%misahin per kolom a=1;

semua=lipat*kk*8; skalar=8*kk; %tentuin y

%koor y tanpa baris for yuyu=1:lipat

pisah=(a/lipat)*jum;

rumus=((m*(yuyu*yuyu))+(b*yuyu)+c)*8;%rumus ax^2+bx+c if rumus <=skalar


(5)

koory=barisbaru+rumus; %membagi koor dengan baris hslbg=(koory/(skalar)); hslbg=floor(hslbg); hsl=mod(koory,skalar); hslak=hsl/8;

oppp(yuyu)=round((kk*hslbg)+hslak); a=a+1;

end end

[ko l]=size(oppp); ss2=1;

b1=1; k1=1; for a=1:l

if b1<=rr && k1<=kk

pesanmlsb(b1,k1)=p(oppp(a),8); k1=k1+1;

if k1>=8 b1=b1+1; k1=1; end

end end

g=bin2dec(pesanmlsb); h=char(g);

lol=transpose(h); handles.lol=lol;

guidata(hObject,handles);

set(handles.listbox1,'String',lol);

% --- Executes on button press in pushbutton3.

function pushbutton3_Callback(hObject, eventdata, handles) [file,path]=uiputfile('*.txt','save');

Name=fullfile(path,file); dlmwrite(Name,handles.lol);

warndlg('file telah tersimpan','!! Simpan !!')

% --- Executes on button press in pushbutton4.

function pushbutton4_Callback(hObject, eventdata, handles) cla(handles.axes1,'reset');

set(handles.axes1,'xtick',[],'ytick',[],'Xcolor','w','Ycolor','w'); set(handles.edit1,'String','');

set(handles.edit2,'String',''); set(handles.listbox1,'String',''); clear all;

clc;

% --- Executes on button press in pushbutton5.

function pushbutton5_Callback(hObject, eventdata, handles)

% --- Executes on selection change in listbox1.

function listbox1_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function listbox1_CreateFcn(hObject, eventdata, handles)


(6)

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

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

function edit2_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function edit2_CreateFcn(hObject, eventdata, handles)

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

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

% --- function menu_Callback(hObject, eventdata, handles)

menu

% --- function embed_Callback(hObject, eventdata, handles)

Insertion close(gcbf)

% --- function ekstrak_Callback(hObject, eventdata, handles)

extractfgsi close(gcbf)

% --- function keluar_Callback(hObject, eventdata, handles)

choice = questdlg('Exit?','confirm',... 'Yes','No','No');

% Handle response switch choice case 'Yes' close all; end