LAMPIRAN A: SOURCE CODE PROGRAM CLASS METODE package steganalisis; import java.io.ioexception; public class Metode { public String bitmapinputname; public String bitmapoutputname; public int[] buffer; public int panjangpesan; public String pesan; public int bitmapmsgsize; public String bitmapmsg; private int c, j, p; private int hasil; private int posisi; public void EnhancedLSB() throws IOException { int[] data = bmpimg.getpixeldata(); for(int i = 0, n = data.length; i < n; i++) { int curdata = bmpimg.getcurrentbyte(i); int newcurdata = this.ceklsb(curdata); bmpimg.setcurrentbyte(i, newcurdata); bmpimg.savebitmapfile(this.bitmapinputname + "- analysis.bmp"); private int ceklsb(int adata) { if (adata % 2 == 0) { return 0; return 255; public String Ekstraksi() throws IOException { buffer = bmpimg.getpixeldata(); posisi = 0; panjangpesan = 0; // ambil panjang pesan for (j = 0; j < 8; j++) { this.ambilpanjangpesan(); i++) { pesan = ""; for (int i = 0; i < panjangpesan && posisi < buffer.length;
this.bacapesan(); return pesan; private void ambilpanjangpesan() { int t = buffer[posisi]; // data bitmap di posisi yg sesuai int bit = ((t & 1) == 1? 1 : 0); // apakah bit ke-j bernilai 1 atau 0 panjangpesan += bit << j; ++posisi; // ke posisi berikutnya private void bacapesan() { char karakter = 0; for (j = 0; j < 8 && posisi < buffer.length; j++) { int t = buffer[posisi]; // data bitmap di posisi yg sesuai int bit = ((t & 1) == 1? 1 : 0); // apakah bit ke-j bernilai 1 atau 0 karakter += bit << j; ++posisi; // ke posisi berikutnya pesan += karakter; public boolean apakahbitmap24bitnocompress() throws IOException { int[] buf = bmpimg.buffer; //bitmap BM if (buf[0x0] == 0x42 && buf[0x1] == 0x4D) { // bitmap 24bit int bitperpiksel = buf[0x1c] + (buf[0x1d] << 8); if (bitperpiksel == 24) { //bitmap tidak terkompresi if ((buf[0x1e] + (buf[0x1f] << 8) + (buf[0x20] << 16) + (buf[0x21] << 24)) == 0) { //bitmap tdk terkompresi return true; //bitmap terkompresi // bitmap bukan 24 bit // bukan bitmap public boolean SisipLSB() throws IOException { Bitmap bmpimg = new Bitmap();
bmpimg.readbitmapfile(this.bitmapinputname); buffer = bmpimg.getpixeldata(); int imgsize = bmpimg.bfsize; int curp = 0; if((bitmapmsgsize*8+8) <= imgsize) { //simpan panjang pesan for (j = 0, p = 0; j < 8 && p < buffer.length; j++, p++){ this.sisippanjangpesan(); int adata = hasil; bmpimg.setcurrentbyte(p, adata); ++curp; //ke posisi berikutnya for (int i = 0; i < bitmapmsgsize; i++) { // 1 karakter pada pesan, terdiri dari 8 bit c = bitmapmsg.charat(i); // 8 bit pada 1 karakter pesan tersebut ditempatkan ke dalam 8 byte data bitmap for (j = 0, p = curp; j < 8 && p < buffer.length; j++, p++) { this.sisippesan(); int adata = hasil; // tulis ke BMP output bmpimg.setcurrentbyte(p, adata); ++curp; // ke posisi berikutnya bmpimg.savebitmapfile(this.bitmapoutputname); return true; // tempat tidak cukup private int sisippanjangpesan() { int t = buffer[p]; // data bitmap di posisi yg sesuai int bit = ((bitmapmsgsize & (1 << j)) == (1 << j)? 1 : 0); // apakah bit ke-j bernilai 1 atau 0 hasil = (bit == 1? (t 0x1) : (t & (0xFF << 1))); // sisipkan ke LSB private int sisippesan() { int t = buffer[p]; // data bitmap di posisi yg sesuai int bit = ((c & (1 << j)) == (1 << j)? 1 : 0); // apakah bit ke-j pada pesan bernilai 1 atau 0 hasil = (bit == 1? (t 0x1) : (t & (0xFF << 1))); // sisipkan ke LSB
LAMPIRAN B: SOURCE CODE PROGRAM CLASS BITMAP package steganalisis; import java.io.fileinputstream; import java.io.fileoutputstream; import java.io.ioexception; public class Bitmap { FileInputStream fin; FileOutputStream fout; int[] buffer; int[] biheader; int[] bfheader; int[] bufdata; // Bitmap file header int bfsize; public void getfileheader() { bfsize = buffer[0x2] + (buffer[0x3] << 8) + (buffer[0x4] << 16) + (buffer[0x5] << 24); bfheader = new int[14]; for(int a = 0, b = 14; a < b; a++) { bfheader[a] = buffer[a]; public void getinfoheader() { biheader = new int[40]; for(int a = 14, b = 54, c = 0; a < b; a++, c++) { biheader[c] = buffer[a]; public int[] getpixeldata() { bufdata = new int[buffer.length - 54]; for(int a = 54, b = buffer.length, c = 0; a < b; a++, c++) { bufdata[c] = buffer[a]; return bufdata; public void setfileheader() throws IOException { for(int a = 0, b = bfheader.length; a < b; a++) { fout.write(bfheader[a]); public void setinfoheader() throws IOException { for(int a = 0, b = biheader.length; a < b; a++) { fout.write(biheader[a]);
public void setpixeldata() throws IOException { for(int a = 0, b = bufdata.length; a < b; a++) { fout.write(bufdata[a]); public int getcurrentbyte(int ke) { int hasil = bufdata[ke]; public void setcurrentbyte(int ke, int newdata) { bufdata[ke] = newdata; public void readbitmapfile(string inputname) throws IOException { fin = new FileInputStream(inputName); buffer = new int[fin.available()]; for (int a = 0, b = buffer.length; a < b; a++) { buffer[a] = fin.read(); getfileheader(); getinfoheader(); getpixeldata(); if (fin!= null) { fin.close(); fin = null; { public void savebitmapfile(string outputname) throws IOException fout = new FileOutputStream(outputName); setfileheader(); setinfoheader(); setpixeldata(); if (fout!= null) { fout.close(); fout = null;