PERANCANGAN APLIKASI PENGIRIMAN PESAN RAHASIA MENGGUNAKAN STEGANOGRAFI DAN KRIPTOGRAFI DENGAN TEKNIK SUBSTITUSI BERBASIS MOBILE
NASKAH PUBLIKASI
diajukan oleh Ronald Arie Bowo Supardi 09.11.3165
kepada JURUSAN TEKNIK INFORMATIKA SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER AMIKOM YOGYAKARTA 2013
i
ii
Designing Sending Secret Messages Application Using Steganography And Cryptography With Substitution Technique Based on Mobile Perancangan Aplikasi Pengiriman Pesan Rahasia Menggunakan Steganografi Dan Kriptografi Dengan Teknik Substitusi Berbasis Mobile Ronald Arie Bowo Supardi Ema Utami Jurusan Teknik Informatika STMIK AMIKOM YOGYAKARTA
ABSTACT
Information is easy to come by at this time, including for the delivery of the message, it has started being a means to send a message so we can easily send and receive messages. All the convenience it will be very influential when data or the message we send is confidential and only certain people are allowed to know the message, especially if the data that will tell us it is a state secret it will be very harmful to national defense and security. How that can be used to secure messages, including by making their own encryption and steganography. Encryption is the process used to create the message or plaintext into messages disguised meaning or ciphertext so that people could not understand the meaning of the message. As for the steganography is the process of hiding data in digital files so that people do not think that if the digital file no message. If both of these processes in combination then the message will be more secure. For that need to be made an application to store the message in the picture with the encryption process first. This application is an application to send a picture but the picture was inserted messages that have been encrypted first. In making this application I use the Java programming language and uses encryption algorithms that created by myself. Keywords: Steganography Application, Cryptography Application, Steganography and Cryptography, Secret Messages, Cryptography With Substitution
iii
1
1.
PENDAHULUAN
Informasi saat ini sangat mudah didapat termasuk untuk pengiriman pesan, sekarang sudah mulai banyak sarana untuk mengirimkan pesan sehingga kita bisa dengan mudah mengirim dan menerima pesan. Di jaman yang serba cangih sepertini alat untuk mengirim pesan sudah banyak termasuk medianya seperti facebook dan twitter sehingga kita bisa mengirim pesan dengan cepat begitupun sebaliknya kita bisa menerima pesan dengan cepat pula. Dengan mudahnya kita mengirim pesan sehingga kita bisa mengirim berita dengan cepat walau kita mengirim pada orang yang tempatnya jauh. Dari semua kemudahan itu tentu akan sangat berpengaruh ketika kita akan mengirim pesan yang isinya hanya orang-orang tertentu saja yang boleh mengetahui isinya. Salah satu yang harus benar-benar dijaga adalah pesan yang bersifat rahasia negara karena jika pesan itu tersebar maka akan mengancam persatuan dan keamanan negara. Salah satu cara yang biasa di gunakan adalah dengan enkripsi dan steganografi. Enkripsi adalah proses untuk menyamarkan makna dari pesan sehingga orang yang tidak berkepentingan tidak bisa mengetahui makna dari pesan tersebut. Sedangkan steganografi adalah cara atau proses untuk menyisipakan pesan dalam suatu file digital sehingga pesan yang dikirim akan aman dan tidak mencurigakan. Proses enkripsi membuat pesan yang tersamarkan maknanya namun masih berbentuk tulisan oleh karena itu walau pesan itu telah di enkripsi tetap akan menimbulkan kecurigaan sehingga dapat meicu orang yang ingin tau makna pesan untuk mencari makna sebenarnya dari pesan tersebut. Untuk memperkuat keamanan pesan yaitu dengan menggabungkan steganografi dan kriptografi sehingga orang tidak akan curiga jika dalam sebuah file tersimpan pesan
dan pesan tersebut sudah terenkripsi sehingga orang akan tetap
mengira jika file itu tidak mengandung pesan rahasia.
2
Berdasarkan latar belakang di atas penulis mencoba untuk membuat aplikasi berbasis mobile yang bisa mengirimkan pesan menggunakan media gambar. Penelitian ini juga sebagai tugas akhir untuk menyelesaikan studi
pada program S1 Teknik
Informatika dengan judul “Perancangan Aplikasi Pengiriman Pesan Rahasia Menggunakan Steganografi Dan Kriptografi Dengan Teknik Substitusi Berbasis Mobile”.
2. 2.1
LANDASAN TEORI Pengertian Citra Digital Citra digital merupakan sebuah larik (array) yang berisi nilai-nilai real maupun 1
komplek yang direpresentasikan dengan deretan bit tertentu . Suatu citra dapat didefinisikan sebagai fungsi f(x,y) berukuran M baris dan N kolom , dengan x dan y adalah koordinat spasial, dan amplitudo f di titik koordinat (x,y) 2
dinamakan intensitas atau tingkat keabuan dari citra pada titik tersebut . Apabila nilai x, y, dan nilai amplitudo f secara keseluruhan berhingga (finite) dan bernilai diskrit maka dapat 3
dikatakan bahwa citra tersebut adalah citra digital .
2.2
Terminologi Steganografi Steganography merupakan suatu cabang ilmu yang mempelajari tentang bagai 4
mana menyembuyikan suatu informasi “rahasia” di dalam suatu informasi lainnya . Perbedaan steganograpy dengan cryptography terletak pada bagaimana proses 5
penyembunyian data dan hasil akhir dari proses tersebut . Cryptography melakukan proses pengacakan data aslinya sehingga menghasilkan data terenkripsi yang benarbenar acak dan berbeda dengan aslinya, sedangkan steganography menyembunyikan 1
Darma Putra, Pengolahan Citra Digital, hal 19 Ibid 3 Ibid 4 Dony Ariyus, Kriptografi Keamanan Data dan Komunikasi, hal 149 5 Ibid 2
3
dalam data lain yang akan ditumpanginya tanpa mengubah data yang ditumpanginya tersebut
sehingga
data
yang
ditumpanginya
sebelum
dan
sesudah
proses
6
penyembunyian hampir sama .
2.3
Terminologi Kriptografi Kriptografi berasal dari bahasa Yunani yaitu crypto dan graphia. Crypto berarti
rahasia dan graphia berarti tulisan. Secara terminology kriptografi berarti ilmu dan seni 7
untuk menjaga keamanan pesan .
2.4
Sejarah Android Android adalah sebuah sistem operasi berbasis linux untuk perangkat mobile
yang mencakup sistem operasi, middleware dan aplikasi. Awalnya Google Inc. membeli Android Inc. yang merupakan pendatang baru yang membuat piranti lunak untuk ponsel 8
atau smartphone . Google
Inc. membeli Android Inc. kemudian mengembangkan
android dan dibentuklah Open Handset Alliance konsorsium dari 34 perusahaan peranti lunak, peranti keras dan telekomunikasi , termasuk Google, HTC, Motorola, Qualcomm, 9
T-Mobile, dan Nvidia . Pada saat perilisan perdana Android, 5 November 2007 , Android bersama Open Handset Alliance menyatakan mendukung pengembangan open source pada perangkat 10
mobile . Di lain pihak, Google merilis kode-kode Android di bawah lisensi Apache, 11
sebuah lisensi perangkat lunak dan open platform perangkat seluler .
6
Ibid Dony Ariyus, Pengantar Ilmu Kriptografi Teori Analisis dan Implementasi, hal 13 8 Nazruddin Safaat H, Android Pemrograman Aplikasi Mobile Smartphone dan Tablet PC Berbasis Android, hal 1 9 Ibid, hal 1-2 10 Ibid, hal 2 11 Ibid, hal 2 7
4
3. 3.1
ANALISIS DAN PERCANGAN Analisis Sistem
3.1.1.1
Kebutuhan Fungsional Kebutuhan Functional adalah jenis kebutuhan yang berisi proses-proses apa 12
saja yang nantinya dilakukan oleh sistem . Kebutuhan fungsional juga berisi informasi13
informasi apa saja yang harus ada dan dihasilkan oleh sistem . Berikut adalah kebutuhan fungsional yang dimiliki oleh aplikasi yang akan di buat: 1.
Sistem harus dapat melakukan penyembunyian pesan pada gambar. a. Pengguna bisa menyisipkan pesan ke dalam gambar
2.
Sistem harus dapat membaca pesan yang ada pada gambar . a. Pengguna bisa membaca data yang telah di sisipkan pesan sebelumnya.
3.
Sistem harus bisa mengenkripsi pesan sebelum disisipkan. a. Pesan yang dikirim oleh pengguna di enkripsi dulu sehingga lebih aman.
4.
Sistem harus bisa membatasi pengguna lain sehingga tidak bisa mengakses. a. Pengguna harus login sebelum menggunakan aplikasi. b. Admin bisa menonaktifkan id pengguna jika diperlukan.
5.
Sistem harus bisa mengirim gambar yang telah di sisipkan data. a. Pengguna
bisa
mengirimkan
data
yang
sudah
di
sisipkan
menggunakan internet.
12
Hanif Al Fatta , Analisis dan Perancangan Sistem Informasi untuk Keunggulan Bersaing Perusahaan dn Organisasi Modern, hal 63 13 Hanif Al Fatta , Analisis dan Perancangan Sistem Informasi untuk Keunggulan Bersaing Perusahaan dn Organisasi Modern, hal 63
pesan
5
3.1.1.2
Kebutuhan Non-Fungsional Kebutuhan Non-Fungsional adalah tipe kebutuhan yang berisi properti perilaku 14
yang dimiliki oleh sistem . Berikut adalah kebutuhan Non-Fungsional yang ada pada aplikasi yang akan dibuat: 1. Operasional a. Digunakan pasa sistem operasi Android dengan versi minimal 2.2 b. Kebutuhan memori 256MB RAM c.
Membutuhkan koneksi internet
2. Sekuriti a. Aplikasi telah dilengkapi oleh password 3. Informasi a. Digunakan untuk menginformasikan apabila password yang dimasukkan oleh pengguna salah. b. Digunakan jika ada pengguna mengirimkan data ke pengguna lain. 4. Kinerja a. Untuk penggunaan gambar sebaiknya tidak terlalu besar agar lebih cepat dalam mengirim dan memproses data.
3.2
Perancangan Sistem
3.2.1 3.2.1.1
Perancangan UML Use case diagram Berikut adalah gambaran interaksi antara aplikasi dan aktor yang ada pada
aplikasi ini:
14
Hanif Al Fatta , Analisis dan Perancangan Sistem Informasi untuk Keunggulan Bersaing Perusahaan dn Organisasi Modern, hal 63
6
Gambar 3.2-1 Gambar Rancangan Use Case Diagram 3.2.1.2
Class Diagram Berikut ini adalah class diagram yang digunakan untuk menggambarkan struktur
kelas yang ada pada aplikasi ini:
7
Gambar 3.2-2 Rancangan Class Diagram
8
4. 4.1
IMPLEMENTASI DAN PEMBAHASAN Implementasi
4.1.1 4.1.1.1
Ujicoba Sistem dan Program Black box Testing Disini penulis mencoba untuk melakukan testing yang berfokus pada persyaratan
fungsional perangkat lunak. Cara yang dilakukan oleh penulis adalah dengan menjalankan aplikasi yang telah dibuat sehingga bisa terlihat kekurangan dari program ini. Beberapa kategori yang akan di uji adalah sebagai berikut : 1. Fungsi –fungsi yang tidak benar atau hilang 2. Kesalahan kinerja 3. Kesalahan tampilan 4. Kesalahan dalam struktur data Berikut adalah tabel Black Box Testing yang terdapat pada program ini yang telah dibuat oleh penulis :
Tabel 4.1-1 Testing Input Normal No
Pengguna
Fungsi
Skenario
Hasil
Status
1
Biasa
Login
Memasukan ID dan
Masuk dalam
Sukses
Password
aplikasi
Buat pesan
Pilih gambar, tulis
Gambar
gambar
pesan yang akan di
sukses
sisipkan , masukkan no
terkirim
2
Biasa
Sukses
telepon tujuan , kemudian gambar di upload 3
Biasa
Notifikasi
Ketika pesan datang
Notifikasi
pesan datang
makan akan muncul
muncul
Sukses
9
notifikasi
setelah program di jalankan
4
5
Biasa
Biasa
Lihat pesan
Melihat semua pesan
Pindah ke
datang
datang yang belum
form baca
terbaca
pesan
Memilih gambar yang
Pesan yang
mengandung pesan,
ada di
atau jika telah memilih
gambar akan
pesan datang tinggal di
tampil
Baca pesan
Sukses
Sukses
tekan tombol baca 6
7
Admin
Admin
Login
Memasukkan id dan
Masuk
password admin
Aplikasi
Lihat List
Setelah Login masuk ke
Tab di tekan
Pengguna
List pengguna bisa
akan muncul
melihat berdasarkan
list
status atau
berdasarkan
menggunakan
status
pencarian
List
Sukses
Sukses
pencarian tampil 8
Admin
Tambah
Admin menambahkan
Pengguna
Pengguna
pengguna dengan
tambah
Sukses
memasukan data pengguna 9
4.1.2
Admin
Ubah data
Admin mengisi form
Database
pengguna
dengan data baru
diperbaharui
Sukses
Pemeliharaan System Tahap pemeliharaan system ini akan menentukan sistem akan berjalan lama
atau tidak. Seiring berjalannya waktu tentu kita tidak tahu apa yang akan terjadi pada system yang ada sehingga untuk mengurangi kemungkinan buruk di masa mendatang. Adapun tahapan-tahapan untuk memelihara program ini sehingga tetap berjalan maksimal dan tidak menimbulkan permasalahan di kemudian hari, diantaranya :
10
1. Backup data admin sehingga ketika ada sesuatu pada admin data bisa dipertahankan. 2. Pengguna yang mengganti nomor telepon segera memberitahu admin sehingga pengirim bisa mengirimkan pesan dengan tepat ke tujuan. 3. Jika user di nonaktifkan bisa menghubungi admin untuk mengaktifkan pengguna. 4. Jangan sampai pengguna memberi tahu password yang dimiliki. 5. Pendataan pengguna secara berkala untuk menjaga keamanan aplikasi ini.
4.2
Pembahasan
4.2.1 4.2.1.1
Pembahasan Listing Program Class Kriptografi Pada class ini terdapat dua fungsi utama yaitu enkripsi dan deskripsi. Fungsi
enkripsi adalah untuk membuat pesan terenkripsi dan untuk fungsi deskripsi adalah untuk mendekript pesan yang telah terenkripsi. package com.ronald.stegano_kripto.kripto; public class kriptografi { // membuat tabel enkripsi String[][] tabelEnkripsi = { {"A", "B", "C", "D", "E", "F", "G", "H", "I"},// 0 {"J", "K", "L", "M", "N", "O", "P", "Q", "R"},// 1 {"S", "T", "U", "V", "W", "X", "Y", "Z", "a"},// 2 {"b", "c", "d", "e", "f", "g", "h", "i", "j"},// 3 {"k", "l", "m", "n", "o", "p", "q", "r", "s"},// 4 {"t", "u", "v", "w", "x", "y", "z", "!", "@"},// 5 {"#", "$", "%", ":", "&", "*", "(", ")", "_"},// 6 {"+", "=", "-", "1", "2", "3", "4", "5", "6"},// 7 {"7", "8", "9", "0", ".", ",", "?", " ", "/"}};// 8 // 0 1 2 3 4 5 6 7 8 public String enkripsi(String pesan) { String chiperText; int jumlahBarisPesan; String[] PesanTabelEnkrip;
11
String[] arrayKata = pesan.split("(?!^)"); int jumlahKarakter = arrayKata.length; jumlahBarisPesan = (int) Math.ceil(pesan.length() / 8); jumlahBarisPesan = jumlahBarisPesan + 1; String[][] prosesEnkrip1 = new String[8][jumlahBarisPesan]; String[][] prosesEnkrip2 = new String[8][]; String[][] prosesEnkrip3 = new String[jumlahBarisPesan * 2][8]; String[] prosesEnkrip4 = new String[jumlahBarisPesan * 2]; String[][] prosesEnkrip5 = new String[jumlahBarisPesan * 2][4]; String[][] prosesEnkrip6 = new String[jumlahBarisPesan * 2][4]; String[] prosesEnkrip7 = new String[jumlahBarisPesan * 2]; // membuat pesan kosong untuk di isi pesan enkripsi PesanTabelEnkrip = new String[jumlahBarisPesan * 8]; for (int i = 0; i < jumlahBarisPesan * 8; i++) { PesanTabelEnkrip[i] = "78"; }
for (int p = 0; p < jumlahKarakter; p++) { for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { if (arrayKata[p].equals(tabelEnkripsi[i][j])) { PesanTabelEnkrip[p] = String.valueOf(j) + String.valueOf(i); i = 9; j = 9; } } } } int batas = 0; for (int i = 0; i < 8; i++) { for (int j = 0; j < jumlahBarisPesan; j++) { if (batas < PesanTabelEnkrip.length) { prosesEnkrip1[i][j] = PesanTabelEnkrip[batas]; batas++; } else { i = 8; j = jumlahBarisPesan; } } } // berbeda dengan PHP for (int i = 0; i < 8; i++) { prosesEnkrip2[i] = implode(prosesEnkrip1[i]).split("(?!^)"); } // transpose for (int i = 0; i < jumlahBarisPesan * 2; i++) { for (int j = 0; j < 8; j++) { prosesEnkrip3[i][j] = prosesEnkrip2[j][i];
12
} } // membuat matrik baru for (int i = 0; i < jumlahBarisPesan * 2; i++) { prosesEnkrip4[i] = implode(prosesEnkrip3[i]); for (int j = 0; j < 4; j++) { prosesEnkrip5[i][j] = prosesEnkrip4[i].substring(j * 2,j * 2 + 2); } } // penambahan data for (int i = 0; i < jumlahBarisPesan * 2; i++) { for (int j = 0; j < 4; j++) { prosesEnkrip6[i][j] = String.valueOf(Integer.parseInt(prosesEnkrip5[i][j]) + j); if (Integer.parseInt(prosesEnkrip6[i][j]) < 10) { prosesEnkrip6[i][j] = "0" + prosesEnkrip6[i][j]; } } } for (int i = 0; i < jumlahBarisPesan * 2; i++) { prosesEnkrip7[i] = implode(prosesEnkrip6[i]); } chiperText = implode(prosesEnkrip7); return chiperText; } public String dekripsi(String kata) { String plainText; String[] arrayKata = kata.split("(?!^)"); String[] arrayKata2 = new String[arrayKata.length / 2]; int panjangKarakter = arrayKata2.length; int jumlahBarisKata = (int) Math.ceil(kata.length() / 8); String[][] prosesDekrip1 = new String[panjangKarakter][4]; String[][] prosesDekrip2 = new String[panjangKarakter][8]; String[][] prosesDekrip3 = new String[8][jumlahBarisKata]; String[] prosesDekrip4 = new String[8]; String[][] prosesDekrip5 = new String[8][panjangKarakter]; String[] prosesDekrip6 = new String[panjangKarakter]; String[] prosesDekrip7 = new String[panjangKarakter]; int index = 0; for (int i = 0; i < arrayKata.length; i += 2) { arrayKata2[index] = arrayKata[i] + arrayKata[i + 1]; index++; } //mengurangi nilai data index = 0;
13
for (int i = 0; i < jumlahBarisKata; i++) { for (int j = 0; j < 4; j++) { prosesDekrip1[i][j] = String.valueOf(Integer.parseInt(arrayKata2[index]) - j); if (Integer.parseInt(prosesDekrip1[i][j]) < 10) { prosesDekrip1[i][j] = "0" + prosesDekrip1[i][j]; } index++; } }
//membuat array per karakter for (int i = 0; i < jumlahBarisKata; i++) { prosesDekrip2[i] = implode(prosesDekrip1[i]).split("(?!^)"); } //membalik for (int i = 0; i < 8; i++) { for (int j = 0; j < jumlahBarisKata; j++) { prosesDekrip3[i][j] = prosesDekrip2[j][i]; } } //mebuat matrik baru for (int i = 0; i < 8; i++) { prosesDekrip4[i] = implode(prosesDekrip3[i]); for (int j = 0; j < jumlahBarisKata/2; j++) { prosesDekrip5[i][j] = prosesDekrip4[i].substring(j*2, j*2+2); } } index = 0; while (index < panjangKarakter) { for (int j = 0; j < 8; j++) { for (int i = 0; i < jumlahBarisKata/2; i++) { prosesDekrip6[index] = prosesDekrip5[j][i]; index++; } } }
//konfersi ke karakter for (int i = 0; i < panjangKarakter; i++) {
prosesDekrip7[i] = tabelEnkripsi[Integer.parseInt(prosesDekrip6[i].substring(1, 2))][Integer.parseInt(prosesDekrip6[i].substring(0, 1))]; } plainText = implode(prosesDekrip7); return plainText;
14
} public String implode(String[] pesan) { String imploded = ""; for (int i = 0; i < pesan.length; i++) { imploded += pesan[i]; } return imploded; } }
5.
PENUTUP
5.1
Kesimpulan Setelah tahapan-tahapan penelitian dilakukan kesimpulan yang dapat diambil
dalam penelitian kali ini adalah : 1. Pengamanan pesan dapat menggunakan kriptografi yang membuat pesan tersamarkan pesannya namun untuk memaksimalkan pengamanan pesan dapat menambahkan steganografi yaitu dengan menyisipkan pesan ke dalam gambar. 2. Proses penyembunyian pesan diawali dengan prosess kripto grafi yang menghasilkan angka yang panjangnya bisa lebih dari dua kali panjang pesan setelah itu setiap angka di sisipkan ke dalam gambar dengan mengganti nilai value angka terakhir dari warna gambar. 3. Untuk memberi keamanan pada aplikasi android maka digunakan sistem login yang prosesnya ada pada server , pengguna bisa mengirimkan pesan mengunakan aplikasi ini ke tujuan dengan menggunakan internet dan server sebagai penampung, tersedia service untuk mengetahui pesan datang dan setiap muncul notifikasi pengguna akan di arahkan untuk login kembali kemudian bisa memilih pesan yang dikirimkan.
15
4. Server berguna untuk menambah, menonaktif dan mengaktifkan pengguna, dan pesan yang dikirim akan disimpan di server untuk di download oleh pengguna yang dituju.
5.2
Saran Pada penulisan Skripsi ini tentu masih banyak kekurangan , dan mungkin dapat
disempurnakan oleh penelitian-penelitian berikutnya. Untuk lebih menyempurnakan program ini penulis memberikan beberapa saran diantaranya : 1. Pengunaan service pada aplikasi ini akan membuat aplikasi ini berjalan terus sehingga akan memakan daya dan bandwidth walau pun oleh penulis sudah dibuat seminimal mungkin namun dapat di perbaiki oleh pengembang berikutnya dengan menggunakan push notification sehingga dari server yang akan memberikan pesan ke ponsel. 2. Penulis membatasi pada file Bitmap (.bmp) sehingga untuk pengembangan berikutnya bisa ditambahkan tipe file lain sehingga akan lebih fleksibel. 3. Server ketika di kirim pesan terus menerus akan menyebabkan penumpukan data sehingga untuk pengembangannya server bisa membuat penghapusan data secara otomatis. 4. Data nomor telepon yang ada pada smart phone bisa digunakan untuk validasi pengguna sehingga pengguna tidak bisa login dengan user berbeda di Handphone berbeda.
16
6.
DAFTAR PUSTAKA
Ariyus, D. (2006). KRIPTOGRAFI KEAMANAN DATA DAN KOMUNIKASI. Yogyakarta: GRAHA ILMU. Ariyus, D. (2008). Pengantar Ilmu Kriptografi Teori, Analisis dan Implementasi. Yogyakarta: ANDI OFFSET. Fatta, H. A. (2007). Analisis dan Perancangan Sistem Informasi untuk Keunggulan Bersaing Perusahaan dn Organisasi Modern. Yogyakarta: C.V. ANDI OFFSET. H, N. S. (2011). Android Pemrograman Aplikasi Mobile Smartphone dan Tablet PC Berbasis Android. Bandung: Informatika. Hermawan, B. (2004). Menguasai JAVA 2 & Object Oriented Programming. Yogyakarta: ANDI. Kusrini, M. (2007). Strategi Perancangan dan Pengolahan Basis Data. Yogyakarta: C.V ANDI OFFSET. Putra, D. (2010). Pengolahan Citra Dgital. Yogyakarta: C.V ANDI OFFSET. Raharjo, B. (2011). Belajar Otodidak Membuat Database Menggunakan MySQL. Bandung: INFORMATIKA. Sakur, S. B. (2010). PHP 5 Pemrograman Berorientasi Objek - Konsep & Implementasi . Yogyakarta: ANDI. SIREGAR, A. A. (2010). IMPLEMENTASI LEAST SIGNIFICANT BIT . Jurnal Skripsi . Yasin, V. (2012). REKAYASA PERANGKAT LUNAK BERORIENTASI OBJEK Pemodelan, Arsitektur dan Perancangan (Modeling, Architecture and Design). Jakarta: Mitra Wacana Media.