Anda di halaman 1dari 32

LAPORAN PRAKTIKUM FINAL

KEAMANAN JARINGAN KOMPUTER


IMAGE STEGANOGRAPHY DENGAN METODE LSB (LEAST
SIGNIFICANT BIT)

Disusun oleh :
Nama : Wahyu Ramadhan
NIM : 1457301017
Kelas : 4.2 / Teknik Informatika
Pembimbing : Muhammad Rizka, S.S.T, M.Kom

POLITEKNIK NEGERI LHOKSEUMAWE


JURUSAN TEKNOLOGI INFORMASI DAN KOMPUTER
PRODI TEKNIK INFORMATIKA
2017
LEMBAR PENGESAHAN

No Praktikum : 01 / KJK/ 4.2/ TI/ 2017


Judul Praktikum : Image Steganography dengan Metode LSB
Nama Praktikan : Wahyu Ramadhan
NIM : 1457301017
Kelas : 4.2
Jurusan : Teknologi Informasi dan Komputer
Prodi : Teknik Informatika
Tanggal Praktikum : 05 Desember 2017
Tanggal Penyerahan : 27 Desember 2017

Nilai :
Keterangan :

Buket Rata, 27 Desember 2017


Pembimbing

Muhammad Rizka, S.S.T, M.Kom


NIP. 19881009 201504 1 001

ii
DAFTAR ISI

LEMBAR JUDUL
LEMBAR PENGESAHAN .................................................................................... ii
DAFTAR ISI .......................................................................................................... iii
1.1 TUJUAN PRAKTIKUM ............................................................................. 1
1.2 DASAR TEORI ........................................................................................... 1
1.2.1 Pengertian Kriptografi .......................................................................... 1
1.2.2 Tujuan Kriptografi ................................................................................ 1
1.2.3 Steganografi .......................................................................................... 2
1.2.4 Least Significant Bit (LSB) .................................................................. 4
1.3 ALAT DAN BAHAN PRAKTIKUM ......................................................... 5
1.4 LANGKAH PRAKTIKUM ......................................................................... 5
1.5 HASIL PRAKTIKUM ............................................................................... 19
1.6 ANALISA PEMBAHASAN...................................................................... 22
1.7 ANALISA PROGRAM ............................................................................. 24
1.8 KESIMPULAN .......................................................................................... 27
DAFTAR PUSTAKA ........................................................................................... 28

iii
LAPORAN PRAKTIKUM FINAL
IMAGE STEGANOGRAPHY DENGAN METODE LSB (LEAST
SIGNIFICANT BIT)

1.1 TUJUAN PRAKTIKUM


1. Mahasiswa memahami pengertian algoritma Steganography dan LSB.
2. Mahasiswa mampu membuat program algoritma Steganography dan LSB.
3. Mahasiswa mampu menganalisa program Steganography dan LSB.

1.2 DASAR TEORI


1.2.1 Pengertian Kriptografi
Kriptografi merupakan ilmu sekaligus seni untuk menjaga keamanan pesan
(Cryptography is the art and science of keeping messages secure) selain itu ada
pengertian tentang kriptografi yaitu kriptografi merupakan ilmu yang mempelajari
teknik-teknik matematika yang berhubungan dengan aspek keamanan informasi
seperti kerahasiaan, integritas data, serta otentikasi. Kata “seni” di dalam definisi
di atas maksudnya adalah mempunyai cara yang unik untuk merahasiakan pesan.
Kata “graphy” di dalam “cryptography” itu sendiri sudah menyiratkan sebuah
seni (Munir, 2006).

1.2.2 Tujuan Kriptografi


Menurut (Munir, 2006) Ada empat tujuan mendasar dari ilmu kriptografi
yang juga merupakan aspek keamanan informasi, yaitu:
1. Convidentiality (kerahasiaan), yaitu memberikan kerahasiaan pesan dan
menyimpan data dengan menyembunyikan data dengan menyembunyikan
informasi lewat teknik-teknik enkripsi.
2. Message intergrity (integritas data), yaitu memberikan jaminan bahwa dari
setiap bagian tidak mengalami perubahan dari saat data dibuat/ dikirim sampai
dengan saat data tersebut di buka.

1
3. Non-repudiation (nirpenyangkalan), yang memberikan cara untuk
membuktikan bahwa suatu dokumen dating dari setiap seseorang apabila ia
mencoba menyangkal memiliki dokumen tersebut.

4. Auntentication (autentikasi), yang memberikan dua layanan. Yang pertama


mengidentifikasi keaslian dari suatu pesan dan memberikan jaminan
keotentikannya. Kedua, untuk meguji identitas seseorang apabila ia akan
memasuki sebuah sistem.

2
1.2.3 Steganografi
Steganografi adalah suatu teknik untuk menyembunyikan informasi yang
bersifat pribadi dengan sesuatu yang hasilnya akan tampak seperti informasi
normal lainnya. Media yang digunakan umumnya merupakan suatu media yang
berbeda dengan media pembawa informasi rahasia, dimana disinilah fungsi dari
teknik steganografi yaitu sebagai teknik penyamaran menggunakan media lain
yang berbeda sehingga informasi rahasia dalam media awal tidak terlihat secara
jelas.
Steganografi biasanya sering disalahartikan dengan kriptografi karenanya
keduanya sama-sama bertujuan untuk melindungi informasi yang berharga.
Perbedaan yang mendasar antara keduanya yaitu steganografi berhubungan
dengan informasi tersembunyi sehingga tampak seperti tidak ada informasi
tersembunyi sama sekali. Jika seseorang mengamati obyek yang menyimpan
informasi tersembunyi tersebut, maka dia tidak akan menyangka bahwa terdapat
pesan rahasia dalam obyek tersebut, dan karenanya dia tidak akan berusaha
memecahkan informasi dari obyek tersebut.
Kata steganografi berasal dari bahasa Yunani, yaitu dari kata Stegos
(covered/tersembunyi) dan Graptos (writing/tulisan). Steganografi di dunia
modern biasanya mengacu pada informasi atau suatu arsip yang telah
disembunyikan ke dalam suatu arsip citra digital, audio, atau video. Teknik
Steganografi ini telah banyak digunakan dalam strategi peperangan dan
pengiriman sandi rahasia sejak jaman dahulu kala. Dalam perang Dunia II, teknik
steganografi umum digunakan oleh tentara Jerman dalam mengirimkan pesan
rahasia dari atau menuju Jerman, (Morkel, dkk, 2005).

3
Semakin pentingnya nilai dari sebuah informasi, maka semakin
berkembang pula metode-metode yang dapat digunakan untuk melakukan
penyisipan informasi yang didukung pula dengan semakin berkembangnya media
elektronik. Berbagai macam media elektronik kini telah dapat digunakan untuk
melakukan berbagai fungsi steganografi dengan berbagai macam tujuan dan
fungsi yang diharapkan oleh penggunanya. Sebagai fungsi yang umum,
steganografi digunakan untuk memberikan cap khusus dalam sebuah karya yang
dibuat dalam format media elektronik sebagai identifikasi, (Johnson, dkk, 1998).

Gambar 1.1 Fokus disiplin ilmu penyisipan informasi


(Chedad et al, 2010)

Dua teknik lain yang sangat erat kaitannya dengan steganografi adalah
watermarking dan fingerprinting. Kedua teknik ini berfokus pada perlindungan
hak cipta dengan menyisipkan informasi hak cipta pada media lain dan
memberikan ijin kepada pihak ketiga untuk mengetahui keberadaan informasi
yang disisipkan tersebut. Hal ini berbeda dengan steganografi yang menjaga
informasi yang disisipkan pada media lain agar tidak terlihat oleh pihak ketiga.
Jika ada pihak ketiga yang ingin menghack isi informasi tersembunyi tersebut,
maka tujuan mereka adalah berbeda. Jika pada watermarking dan fingerprinting,
maka mereka berusaha menghilangkan informasi yang disisipkan, sedangkan jika
pada steganografi, maka mereka berusaha sebatas mendeteksi keberadaan
informasi tersembunyi, (Morkel , 2005).

4
1.2.4 Least Significant Bit (LSB)
Metode LSB ini digunakan dalam teknik steganographydikarenakan
tergolong mudah dalam penerapannya. Dasar dari metode ini adalah bilangan
berbasiskan biner atau dengan kata lain angka 0 dan angka 1. Karena data
digital merupakan susunan antara angka 0 dan satu maka proses
penerapannya menjadi mudah. Lebih lanjut lagi, metode ini berhubungan
erat dengan ukuran 1 bit dan ukuran 1 byte. 1bytedata dapat dikatakan terdiri
dari 8 bit data. Dimana bit pada posisi paling kanan lah yang disebut dengan bit
pada posisi LSB (Least Significant Bit).Teknik steganography dengan
menggunakan metode LSB adalah teknik dimana kita mengganti bit pada posisi
LSB pada data dengan bit yang dimiliki oleh data yang akan disembunyikan.
Karena bit yang diganti hanyalah bit yang paling akhir, maka meskipun data
telah berubah, kita tetap tidak akan bisa mengenalinya, karena media stego yang
dihasilkan hampir sama persis dengan media sebelum disisipi oleh data yang ingin
disembunyikan.

Untuk ilustrasi proses penyisipan pesan dengan menggunakan


metode ini adalah sebagai berikut:

Gambar 1.2 Ilustrasi Pesan

dari data diatas akan disisipkan suatu pesan rahasia yang berupa data biner
dengan nilai bit (01001000) maka data atau media penampung akan menjadi Dari:

Gambar 1.3 Pesan yang telah disisipi

penjelasan diatas dapat disimpulkan bahwa metode LSB hanya


mengganti satu nilai dari posisi LSB pada setiap byte data pada media
penampung data yang akan disembunyikan dengan satu bit data dari text
atau data yang akan disembunyikan. Karena bit yang diganti adalah bit

5
dengan nilai paling kanan maka media yang dihasilkan hamper sama persis
dengan media aslinya

1.3 ALAT DAN BAHAN PRAKTIKUM


Alat dan bahan yang digunakan praktikum ini adalah sebagai berikut :
Alat : Laptop Acer (Netbook) Intel Celeron 2Gb Memory
Bahan : Software Netbeans IDE 8.1
Java JDK

1.4 LANGKAH PRAKTIKUM


Langkah-langkah praktikum :
1. Buka aplikasi Netbeans IDE 8.1 yang terdapat di dekstop

Gambar 1.4 Desktop

2. Pilih file, lalu klik new project atau bisa menekan langsung Ctrl + Shift + N di
keyboard

6
Gambar 1.5 New Project

3. Pilih Java, Java Application, klik Next

Gambar 1.6 Java Application

4. Ubah nama project menjadi ImageSteganography, pilih lokasi penyimpanan,


klik Finish

7
Gambar 1.7 New Java Application

5. Didalam project ImageSteganography, terdapat source package yang mana


didalam adalah sumber kode utama dari project ini. Lalu didalam source
terdapat tiga folder java source package yaitu
 Imagesteganography
 Imagesteganography.util
 Imagesteganography.view

Gambar 1.8 Isi Source project

8
6. Di dalam imagesteganography (java source package), terdapat class yang
bernama ImageSteganography.java yang merupakan import dari
MainApp.java.

Gambar 1.9 ImageSteganography.java

7. Di dalam imagesteganography.util, terdapat tiga class java yaitu Encode,


Decode, dan StegoImage yang berkestensi .java. Ketiganya adalah komponen
penting dalam project ini karena disanalah semua sumber kode utama
terprogram. Adapaun pada Encode terdapat list program yang berfungsi untuk
proses awal pada penyandian gambar dan pesan yang disisi pada gambar yang
di input. Berikut listing program Encode.java.
 Encode.java
package imagesteganography.util;
import java.awt.image.BufferedImage;
import java.io.File;
public class Encode extends StegoImage {
public boolean encode(String fileIn, String fileOut, String
message) {
BufferedImage image_orig = getImage(fileIn);
BufferedImage image = user_space(image_orig);

9
image = add_text(image, message);
return (setImage(image, new File(fileOut), "png"));

Keterangan : Encode ini adalah extends dari StegoImage.java artinya source


code Encode.java terdapat juga pada StegoImage.java (perpanjangan program
dari Encode.java). jadi Encode memanggil fungsi dari class lain
(StegoImage.java) yang terdapat proses encode juga didalam class tersebut.

Adapaun pada Decode terdapat list program yang berfungsi untuk


mengembalikan pesan yang telah disisipi di gambar dan diambil untuk
diketahui isi pesan tersebut. Berikut listing program Encode.java.
 Decode.java
package imagesteganography.util;
import java.awt.image.BufferedImage;
import javax.swing.JOptionPane;

public class Decode extends StegoImage {


public String decode(String name) {
byte[] decode;
try {
BufferedImage image = user_space(getImage(name));
decode = decode_text(get_byte_data(image));
return (new String(decode));
} catch (Exception e) {
JOptionPane.showMessageDialog(null,
"Tidak terdapat pesan rahasia pada gambar
tersebut!", "Error",
JOptionPane.ERROR_MESSAGE);
return "";
}
}
}

Keterangan : Decode ini adalah extends dari StegoImage.java artinya source


code Decode.java terdapat juga pada StegoImage.java (perpanjangan program
dari Encode.java). jadi Decode memanggil fungsi dari class lain
(StegoImage.java) yang terdapat proses encode juga didalam class tersebut.

10
Kemudian, pada StegoImage.java adalah source yang paling utama dimana
proses penyandian, penyisipan, proses encoding decoding pesan dilakukan di
class ini. Terdapat juga fungsi-fungsi extends dari Encode.java dan
Decode.java. Selain itu juga terdapat proses dari metode Least Significant Bit.

 StegoImage.java
package imagesteganography.util;

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JOptionPane;

public class StegoImage {


public BufferedImage getImage(String f) {
BufferedImage image = null;
File file = new File(f);
try {
image = ImageIO.read(file);
} catch (IOException ex) {
JOptionPane.showMessageDialog(null,
"Gambar tidak dapat di baca!" + ex,
"Error", JOptionPane.ERROR_MESSAGE);
}
return image;
}
public boolean setImage(BufferedImage image, File file,
String ext) {
try {
file.delete();
ImageIO.write(image, ext, file);
return true;
} catch (IOException e) {
JOptionPane.showMessageDialog(null,

11
"File tidak dapat di simpan!", "Error",
JOptionPane.ERROR_MESSAGE);
return false;
}
}
public BufferedImage add_text(BufferedImage image, String
text) {
byte img[] = get_byte_data(image);
byte msg[] = text.getBytes();
byte len[] = bit_conversion(msg.length);
try {
encode_text(img, len, 0);
encode_text(img, msg, 32);
} catch (Exception e) {
JOptionPane.showMessageDialog(null,
"File tidak dapat disisipi pesan!",
"Error", JOptionPane.ERROR_MESSAGE);
}
return image;
}
public BufferedImage user_space(BufferedImage image) {
BufferedImage new_img = new
BufferedImage(image.getWidth(), image.getHeight(),
BufferedImage.TYPE_3BYTE_BGR);
Graphics2D graphics = new_img.createGraphics();
graphics.drawRenderedImage(image, null);
graphics.dispose();
return new_img;
}
public byte[] get_byte_data(BufferedImage image) {
WritableRaster raster = image.getRaster();
DataBufferByte buffer = (DataBufferByte)
raster.getDataBuffer();
return buffer.getData();
}
public byte[] bit_conversion(int i) {
byte byte3 = (byte) ((i & 0xFF000000) >>> 24);
byte byte2 = (byte) ((i & 0x00FF0000) >>> 16);
byte byte1 = (byte) ((i & 0x0000FF00) >>> 8);

12
byte byte0 = (byte) ((i & 0x000000FF));
return (new byte[]{byte3, byte2, byte1, byte0});
}
public byte[] encode_text(byte[] image, byte[] addition,
int offset) {
if (addition.length + offset > image.length) {
throw new IllegalArgumentException("File tidak
cukup di sisipi pesan!");
}
for (int i = 0; i < addition.length; ++i) {
int add = addition[i];
for (int bit = 7; bit >= 0; --bit, ++offset) {
int b = (add >>> bit) & 1;
image[offset] = (byte) ((image[offset] & 0xFE)
| b);
}
}
return image;
}
public byte[] decode_text(byte[] image) {
int length = 0;
int offset = 32;
for (int i = 0; i < 32; ++i) {
length = (length << 1) | (image[i] & 1);
}
byte[] result = new byte[length];
for (int b = 0; b < result.length; ++b) {
for (int i = 0; i < 8; ++i, ++offset) {
result[b] = (byte) ((result[b] << 1) |
(image[offset] & 1));
}
}
return result;
}
}

13
8. Di dalam imagesteganography.view (java source package), terdapat interface
dari project ImageSteganography (GUI Interface) bernama MainApp.java.
Terdapat dua jendela tab pane yaitu Encoder dan Decoder.
 Tab Encoder

TabPanned

JButton

JButton

JButton

Gambar 1.10 Interface project (Encoder)


Keterangan :
 File Input Path : berfungsi untuk menginput gambar. Menggunakan
swing control Button dan swing windows File Chooser. Berikut
perintah program dari button choose:
private void
btnChooseInputActionPerformed(java.awt.event.ActionEvent
evt) {
chooser = new JFileChooser();
chooser.setDialogTitle("Choose File Image");
int choose = chooser.showOpenDialog(this);
if (choose == JFileChooser.APPROVE_OPTION) {
FileNameMap fileName =
URLConnection.getFileNameMap();
String mimeType =
fileName.getContentTypeFor(chooser.getSelectedFile().get
Path());
if (mimeType != null) {

14
if (mimeType.equals("image/png")) {
txtInputPath.setText(chooser.getSelectedFile().getParent
());
txtInputName.setText(chooser.getSelectedFile().getName()
);
fileIn = chooser.getSelectedFile();
} else {
JOptionPane.showMessageDialog(rootPane, "File Must Image
and Type PNG");
}
} else {
JOptionPane.showMessageDialog(rootPane,
"File Must Image and Type PNG");
}
}
}

 File Input Name : adalah keterangan nama gambar yang telah diinput.
 File Output Name : berfungsi untuk menyimpan hasil gambar yang
nantinya telah di sisipi pesan pada proses encoding. Menggunakan
swing control Button dan swing windows File Chooser. Berikut
perintah program dari button choose:
private void
btnChooseOutputActionPerformed(java.awt.event.ActionEven
t evt) {
chooser = new JFileChooser();
chooser.setDialogTitle("Choose File Image");

chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ON
LY);
int choose = chooser.showOpenDialog(this);
if (choose == JFileChooser.APPROVE_OPTION) {
String out =
chooser.getSelectedFile().toString();
txtOutputPath.setText(out);
}
}

15
 File Output Name : berfungsi untuk memberi nama output gambar hasil
dari proses encoding (steganography). Menggunakan swung controls
TextField.
 Hidden Message : Berfungsi untuk menginput pesan yang akan disisipi
didalam gambar yang telah diinput. Menggunakan swin controls
TextArea.
 Tombol Encode : berfungsi untuk mengaktifkan proses encoding
(steganography) setelah menginput gambar dan memberi pesan yang
disisipi pada gambar. Berikut perintah program Encode :
private void
btnEncodeActionPerformed(java.awt.event.ActionEvent evt)
{
String fileOut = txtOutputPath.getText() +
txtOutputName.getText() + ".png";
String message = txtMessage.getText();
if (fileIn != null && fileIn.isFile()) {
if (txtOutputPath.getText().equals("") ||
txtOutputName.getText().equals("")) {
JOptionPane.showMessageDialog(rootPane,
"Please Fill Data");
} else {
if (!message.equals("")) {
Encode enc = new Encode();
boolean success =
enc.encode(fileIn.getAbsolutePath(), fileOut, message);
if (success) {

JOptionPane.showMessageDialog(rootPane, "Success");
ProcessBuilder p = new
ProcessBuilder("explorer.exe", "/select," + fileOut);
try {
p.start();
fileIn = null;
txtInputPath.setText("");
txtOutputPath.setText("");
txtInputName.setText("");
txtOutputName.setText("");

16
txtMessage.setText("");
} catch (IOException ex) {

Logger.getLogger(MainApp.class.getName()).log(Level.SEVE
RE, null, ex);
}
} else {
JOptionPane.showMessageDialog(rootPane, "Error");
}
} else {
JOptionPane.showMessageDialog(rootPane, "Masukan pesan
rahasia");
}
}
} else {
JOptionPane.showMessageDialog(rootPane,
"Pilih Choose A File!!!");
}
}

9. Di dalam imagesteganography.view (java source package), juga terdapat


interface dari project ImageSteganography (GUI Interface) bernama
MainApp.java. Terdapat juga Decoder.

Gambar 1.11 Interface project (Decoder)

17
Keterangan :
 File Input Path : berfungsi untuk menginput gambar yang telah di
disisipi pesan pada proses encoding (steganography) sebelumnya.
Menggunakan swing control Button dan swing windows File Chooser.
Berikut perintah program dari button choose:
private void
chooseDecoderActionPerformed(java.awt.event.ActionEvent
evt) {
chooser = new JFileChooser();
chooser.setDialogTitle("Choose Stego Image");
int choose = chooser.showOpenDialog(this);
if (choose == JFileChooser.APPROVE_OPTION) {
FileNameMap fileName =
URLConnection.getFileNameMap();
String mimeType =
fileName.getContentTypeFor(chooser.getSelectedFile().get
Path());
if (mimeType != null) {
if (mimeType.equals("image/png")) {

txtDecoderPath.setText(chooser.getSelectedFile().getPare
nt());

txtDecoderName.setText(chooser.getSelectedFile().getName
());
fileStego =
chooser.getSelectedFile();
} else {

JOptionPane.showMessageDialog(rootPane, "File Must Image


and Type PNG");
}
} else {
JOptionPane.showMessageDialog(rootPane,
"File Must Image and Type PNG");
}
}
}

18
 File Input Name : adalah keterangan nama dari gambar yang di input.
 Hidden Messages : berfungsi untuk menampilkan pesan yang disisipi di
gambar lalu dimunculkan di kotak TextArea.
 Button Decoder : berfungsi untuk mengaktifkan proses Decoding
(steganography) setelah menginput gambar yang disisipi pesan yang
nantinya dimunculkan kembali pesan tersebut. Berikut perintah
program Decode :
private void
btnDecoderActionPerformed(java.awt.event.ActionEvent
evt) {
// TODO add your handling code here:
txtDecoderMessage.setText("");
if (fileStego != null && fileStego.isFile()) {
String file = fileStego.getAbsolutePath();
Decode dcd = new Decode();
txtDecoderMessage.setText(dcd.decode(file));
} else {
JOptionPane.showMessageDialog(rootPane,
"Please Choose A File");
}
}

19
1.5 HASIL PRAKTIKUM
a. Berikut adalah tampilan GUI dari project ImageSteganography dengan
metode LSB (Least Significant Bit). Berikut proses Encoder.

Gambar 1.12 Proses Encode

Keterangan : file gambar yang di input bernama lena.png dari direktori D.


Kemudian di simpan di direktori E dengan nama yang sama. Lalu isi pesan yang
disisipkan adalah “secret”.

b. Setelah menekan tombol Encoder, maka akan muncul jendela pop up sukses.
Jika tidak dinputkan gambar beserta pesan yang disisipi, maka akan muncul
jendela seperti berikut

Gambar 1.13 Jendela PopUp

20
c. Kemudian pada tab Decoder, dimana informasi pesan yang disisipi pada
gambar ingin diketahui apa isi pesan tersebut.

Gambar 1.14 Proses Decode

Keterangan : file gambar yang telah di encode tadi kemudian akan di decode
untuk melihat isi pesan yang disisipi. Hasilnya isi pesan tersebut berhasil
dipecahkankan dan benar seperti yang telah diinput sebelumnya pada proses
Encode.

d. Jika gambar yang di decode tidak berisikan pesan yang disisipi, maka sistem
akan muncul jendela pop up seperti dibawah ini :

Gambar 1.15 Jendela PopUp error

21
1.6 ANALISA PEMBAHASAN
a. Berikut adalah gambar yang diinput dan disisipi pesan rahasia didalamnya.

Gambar 1.16 Lena.png


b. Gambar Lena ini menggunakan format pewarnaan grayscale, artinya tiap
pixel dari gambar ini direpresentasikan dengan nilai sepanjang 8 bit.
c. Lalu, misalkan pesan yang ingin disisipi berupa text “secret“, kalau
direpresentasikan ke dalam binary kata “secret“ini menjadi :

character ASCII value (decimal) hexadecimal binary


s 115 73 01110011
e 101 65 01100101
c 99 63 01100011
r 114 72 01110010
e 99 63 01100011
t 116 74 01110100

d. Sesuai dengan namanya, LSB artinya bit yang tidak significant / tidak
mempunyai pengaruh yang besar, maka metode ini mengganti nilai bit ke-
8 gambar Lena untuk menyisipkan data. Kalau dipetakan dari kata
“secret” kira-kira seperti ini (bandingkan dengan table binary
sebelumnya) :

22
 Media

00000000 00000000 00000001 00000001 00000001 00000001 00000001 00000001


00000000 00000000 00000001 00000001 00000001 00000001 00000001 00000001
00000000 00000000 00000001 00000001 00000001 00000001 00000001 00000001
00000001 00000001 00000010 00000010 00000010 00000011 00000011 00000011
00000001 00000001 00000010 00000010 00000010 00000011 00000011 00000011
00000001 00000001 00000010 00000010 00000010 00000011 00000011 00000011

Keterangan : biner diatas adalah biner dari gambar lena.png yang telah
diraster dan nantinya akan disisi pesan.

 Data yang ingin disisipkan

0 1 1 1 0 0 1 1
0 1 1 0 0 1 0 1
0 1 1 0 0 0 1 1
0 1 1 1 0 0 1 0
0 1 1 0 0 0 1 1
0 1 1 1 0 1 0 0

 Hasil akhir (Steganography):

00000000 00000001 00000001 00000001 00000000 00000000 00000001 00000001

00000000 00000001 00000001 00000000 00000000 00000001 00000000 00000001

00000000 00000001 00000001 00000000 00000000 00000000 00000001 00000001

00000000 00000001 00000011 00000011 00000010 00000010 00000011 00000010

00000000 00000001 00000011 00000010 00000010 00000010 00000011 00000011

00000000 00000001 00000011 00000011 00000010 00000011 00000010 00000010

Coba diperhatikan, angka yang sudah ditebalkan (bold) menunjukkan


kalau data tersebut sudah diganti sesuai dengan data yang ingin disisipkan.

23
1.7 ANALISA PROGRAM
a. Get Image

public BufferedImage getImage(String f) {


BufferedImage image = null;
File file = new File(f);
try {
image = ImageIO.read(file);
} catch (IOException ex) {
JOptionPane.showMessageDialog(null,
"Gambar tidak dapat di baca!" + ex, "Error", JOptionPane.ERROR_MESSAGE);
}
return image;
}
 Program di atas berguna untuk mengingput gambar yang akan disisipi pesan.
Terdapat perintah yaitu image = ImageIO.read(file) yang mana
variable image berisi fungsi ImageIO.read atau Image Input Output dan
membaca gambar yang diinput.

b. Set Image
public boolean setImage(BufferedImage image, File file, String ext) {
try {
file.delete();
ImageIO.write(image, ext, file);
return true;
} catch (IOException e) {
JOptionPane.showMessageDialog(null,
"File tidak dapat di simpan!", "Error", JOptionPane.ERROR_MESSAGE);
return false;
}
}
 Program diatas berfungsi untuk menyimpan gambar yang nantinya disisipi
pesan setelah proses encode. Terdapat perintah ImageIO.write(image,
ext, file) yang mana image di tulis (gambar disimpan) setelah di
encoding.

c. Raster Image
public byte[] get_byte_data(BufferedImage image) {
WritableRaster raster = image.getRaster();
DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer();
return buffer.getData();
}

24
 Program diatas berfungsi untuk mengubah gambar menjadi data raster dalam
bentuk angka biner dengan perintah WritableRaster raster =
image.getRaster()

d. User Space
public BufferedImage user_space(BufferedImage image) {
BufferedImage new_img = new BufferedImage(image.getWidth(),
image.getHeight(), BufferedImage.TYPE_3BYTE_BGR);
Graphics2D graphics = new_img.createGraphics();
graphics.drawRenderedImage(image, null);
graphics.dispose();
return new_img;
}
 Program diatas berfungsi untuk mengambil pesan yang telah dirubah menjadi
angka di gambar. Pesan rahasia yang diambil berdasakan nilai biner dari
gambar yang telah di raster serta tinggi dan lebar gambar seperti pada perintah
BufferedImage new_img = new
BufferedImage(image.getWidth(), image.getHeight(),
BufferedImage.TYPE_3BYTE_BGR. Juga pada class Decode.java
terdapat juga perintah decode =
decode_text(get_byte_data(image)) yang artinya pesan diambil
dari nilai biner gambar yang telah disisipi pesan rahasia pada bit ke 8 sebelah
kanan.

e. Bit Conversion
public byte[] bit_conversion(int i) {
byte byte3 = (byte) ((i & 0xFF000000) >>> 24);
byte byte2 = (byte) ((i & 0x00FF0000) >>> 16);
byte byte1 = (byte) ((i & 0x0000FF00) >>> 8);
byte byte0 = (byte) ((i & 0x000000FF));
return (new byte[]{byte3, byte2, byte1, byte0});
}
 Program di atas berfungsi untuk mengkoversikan byte ke bit. Terdapat
beberapa pilihan konversi yaitu ada 24 bit, 16 bit, 8 bit

25
f. Add Text
public BufferedImage add_text(BufferedImage image, String text) {
byte img[] = get_byte_data(image);
byte msg[] = text.getBytes();
byte len[] = bit_conversion(msg.length);
try {
encode_text(img, len, 0);
encode_text(img, msg, 32);
} catch (Exception e) {
JOptionPane.showMessageDialog(null,
"File tidak dapat disisipi pesan!", "Error", JOptionPane.ERROR_MESSAGE);
}
return image;
}
 Program diatas berfungsi untuk menambahkan teks atau pesan rahasia yang
disisipi ke dalam gambar. Terdapat perintah byte img[] =
get_byte_data(image) untuk mengambil byte (data raster/biner) dari
gambar. Kemudian terdapat perintah byte msg[]=text.getBytes()
untuk mengambil byte dari pesan/teks yang ingin sisipi yang diubah menjadi
nilai biner nantinya dengan perintah byte len[]=
bit_conversion(msg.length). Kemudian teks tersebut di encode
menggunakan perintah encode_text(img,len,0) dan
encode_text(img,msg,32)

g. Encode Text
public byte[] encode_text(byte[] image, byte[] addition, int offset) {
if (addition.length + offset > image.length) {
throw new IllegalArgumentException("File tidak cukup di sisipi pesan!");
}
for (int i = 0; i < addition.length; ++i) {
int add = addition[i];
for (int bit = 7; bit >= 0; --bit, ++offset) {
int b = (add >>> bit) & 1;
image[offset] = (byte) ((image[offset] & 0xFE) | b);
}
}
return image;
}
 Perintah diatas merupakan perintah utama untuk melakukan proses encoding
dengan LSB. Terdapat perintah public byte[]
encode_text(byte[] image, byte[] addition, int

26
offset) yang berfungsi melakukan encode teks terhadap byte gambar, dan
penambahan bit baru di gambar dari bit teks. Lalu proses penyisipan biner
(byte) gambar hingga nantinya berada di sebelah kanan pada bit ke 8
menggunakan perintah for (int bit=7; bit>=0; --bit,
++offset).

h. Decoder Text
public byte[] decode_text(byte[] image) {
int length = 0;
int offset = 32;
for (int i = 0; i < 32; ++i) {
length = (length << 1) | (image[i] & 1);
}
byte[] result = new byte[length];
for (int b = 0; b < result.length; ++b) {
for (int i = 0; i < 8; ++i, ++offset) {
result[b] = (byte) ((result[b] << 1) | (image[offset] & 1));
}
}
return result;
}
}
 Perintah diatas berfungsi untuk mengambil bit yang telah di encode kemudian
disatukan kembali (berdasarkan 8 bit) dan melihat isi pesan berdasarkan nilai
biner dari pesan tadi dengan perintah for (int i = 0; i < 8; ++i,
++offset).

27
1.8 KESIMPULAN
Steganography adalah cara yang menarik dan efektif dalam
menyembunyikan pesan rahasia dan telah digunakan selama berabad-abad.
Metode-metode untuk “memperlihatkan” pesan yang disembunyikan (disebut
steganalysis) sudah cukup banyak, tetapi yang sulit adalah menyadari
digunakannya steganography itu dan kunci yang diperlukan untuk ”membuka”
pesan yang ada.

Metode steganografi LSB bekerja dengan cara mengganti bit terakhir atau
bit paling tidak berharga dengan bit text pesan rahasia,

28
DAFTAR PUSTAKA

Munir, R. (2006). Kriptografi. Bandung: Informatika.

Sadikin, R. (2012). Kriptografi untuk Keamanan Jaringan. Yogyakarta: Andi.

Simarmata, J. (2006). Pengamanan Sistem Komputer Edisi I. Yogyakarta: Andi.

Rakhmat, Basuki. Muhammad Fairuzabadi, 2010. “Steganografi Menggunakan


Metode Least Significant Bit Dengan Kombinasi Algoritma Kriptografi
Vigenere dan RC4”.Jurnal Dinamika Informatika.

Thangadurai, K. G.Sudha Devi, 2014. “An analysis of LSB Based Image


Steganography Techniques”. International Conference on Computer
Communication and Informatics (ICCCI)

29

Anda mungkin juga menyukai