Implementasi Implementasi Algoritma Elgamal Dengan Pembangkit Bilangan Prima Lehmann Dan Algoritma Least Significant Bit (Lsb) Dengan Cover Image Bitmap Untuk Keamanan Data Text

BAB 4 IMPLEMENTASI DAN PENGUJIAN APLIKASI

4.1 Implementasi

Setelah menganalisis dan merancang sistem, maka proses yang dilakukan adalah mengimplementasikannya kedalam sebuah program. Program dibuat dengan menggunakan bahasa pemograman java, dengan menggunakan software netbeans sebagai Integrated Development Environment IDE java.

4.1.1 Tampilan Halaman Utama

Kontrol program terdapat pada halaman utama, dimana terdapat 2 menu, yaitu menu program dan help. Pada menu program terdiri dari 3 item yaitu bangkitkan kunci, enkripsipenyisipan, dan ekstraksidekripsi. Sedangkan pada menu help terdiri dari 3 item yaitu about, cara penggunaan, dan keluar. Gambaran kontrol program dapat dilihat seperti gambar berikut ini : Gambar 4.1 Halaman Utama Universitas Sumatera Utara

4.1.2 Tampilan Halaman Bangkitkan kunci

Pada halaman bangkitkan kunci akan terdapat 2 fungsi yaitu bangkitkan bilangan prima dan bangkitkan kunci privat dan publik. Fungsi bangkitkan prima hanya sebagai alat bantu untuk mencari kunci yang kita inginkan, dimana kunci tersebut harus bilangan prima. Berikut ini adalah tampilan halaman bangkitkan bilangan prima : Gambar 4.2 Halaman Bangkitkan Kunci Untuk membangkitkan kunci, pengguna hanya perlu menginputkan sebuah kunci, dimana kunci tersebut merupakan bilangan prima. Setelah menginputkan kunci, pengguna kemudian mengklik button generate dan secara otomatis program akan membangkitkan kunci publik dan privat. Pengguna dapat menyimpan kunci publik dan privat dalam bentukt txt dengan cara mengklik button save. Pada form bangkitkan kunci akan ada fungsi untuk membangkitkan bilangan prima dengan menggunakan algoritma lehmann, berikut adalah method algoritma lehmann dalam bahasa pemograman java : public static int checkPrimaint prima { Random rand = new Random4; int testNumber[] = new int [13]; testNumber[0] = 2; testNumber[1] = 3; testNumber[2] = 5; testNumber[3] = 7; Universitas Sumatera Utara testNumber[4] = 11; testNumber[5] = 13; testNumber[6] = 17; testNumber[7] = 19; testNumber[8] = 23; testNumber[9] = 29; testNumber[10] = 31; testNumber[11] = 37; testNumber[12] = 41; int bilanganRandom; int result = 0; int randPrime; int m; int p; int statue = 1; for int counter = 0 ; counter 6 ; counter++ { bilanganRandom = rand.nextInt12; randPrime = testNumber[bilanganRandom]; if randPrime == prima{ result = modulo randPrime, prima-12, prima ; if result == 1 || result == prima-1{ statue = -1; break; } } } if statue == -1{ prima = 0; } else { prima = prima; } return prima; } Pada teori lehmann, untuk menentukan sebuah bilangan p prima atau tidak, maka menggunakan fungsi � �−12 ≡ 1 �� − 1��� �. Pada method diatas, telah diinisialisasi 13 array yang akan digunakan sebagai nilai a dimana variabel yang digunakan pada method diatas adalah testnumber. Pengujian akan dilakukan sebanyak 6 kali, sehingga dapat dipastikan bahwa bilangan tersebut prima. sebelum diuji, maka akan dibangkitkan 6 bilangan dari ke 13 array yang telah diinisialisasi, kemudian bilangan yang telah dibangkitkan tersebut dimasukkan ke fungsi satu persatu , jika hasilnya bukan 1 atau -1 maka proses akan dihentikan, sedangkan jika hasilnya 1 atau -1 maka proses akan dilanjutkan sampai proses perhitungannya sebanyak 6 kali. setelah itu akan di kembaikan nilai tersebut prima , dimana pada program diwakili dengan variabel prima. 55 Universitas Sumatera Utara

4.1.3 Tampilan Halaman Enkripsi dan Penyisipan

Halaman ini merupakan halaman yang digunakan untuk enkripsi dan penyisipan pesan ke citra. Untuk dapat melakukan enkripsi dan penyisipan, pengguna harus menginputkan pesan, kunci dan gambar. Pesan dan kunci dapat diinputkan dengan mengetiknya langsung atau dengan mencari filenya dengan mengklik button browse. Sedangkan gambar diinputkan dengan mengklik button browse, kemudian cari filenya. Gambar 4.3 Halaman Enkripsi dan Penyisipan Jika form pesan, kunci dan gambar ada yang kosong, maka aplikasi akan memberi peringatan bahwa ada form yang kosong. Setelah ketiga form diinputkan, langkah selanjutnya yaitu mengklik button enkripsipenyisipan, kemudian sistem akan memproses dan mencetak hasilnya. Hasil enkripsi dan penyisipan dapat disimpan dengan cara mengklik button save, kemudian simpan ke folder yang diinginkan. Pada form enkripsi dan penyisipan akan ada fungsi untuk enkripsi dengan menggunakan algoritma elgamal, berikut adalah method algoritma elgamal untuk fungsi enkripsi dalam bahasa pemograman java : public static String Enkripsi String s,String t{ String textString=s; int p =textString.length; String textString1=t; int testNumber [] = new int[p]; BigInteger result [][]= new BigInteger [p][2]; BigInteger prima = new BigInteger0; 56 Universitas Sumatera Utara BigInteger apa = new BigInteger0; alpha pangkat a BigInteger alpha = new BigInteger0; BigInteger e = new BigInteger0; BigInteger y = new BigInteger0; BigInteger z = new BigInteger1; String hasil = ; String hasil1 = ; String hasil2 = ; String hasil3 = ; String array[] = textString1.split\\s; int a=0; int f=0; int k=0; for int count = 0; count array.length; count++ { if array[count].isEmpty { a=Integer.parseIntarray[0]; f=Integer.parseIntarray[1]; k=Integer.parseIntarray[2]; } } prima=BigInteger.valueOfa; alpha=BigInteger.valueOff; apa=BigInteger.valueOfk; forint i = 0; i textString.length; i++ { Random RandomGenerate = new Random; int randomInt1 = RandomGenerate.nextIntprima.intValue-1; BigInteger b = BigInteger.valueOfrandomInt1 testNumber[i] = inttextString.charAti; BigInteger d =BigInteger.valueOftestNumber[i] ; result [i][0]=moduloalpha,b,prima ; BigInteger sementara= modulo apa,b,prima; BigInteger sementara1= d.multiplysementara; result [i][1]=modulosementara1,z,prima; hasil +=result[i][0]+ +result[i][1]+ ; } return hasil; } Pada method diatas maka kunci akan dibaca dari file txt, kemudian diparsing sehingga menghasilkan nilai p , �, � � . Inputan text akan diubah kebentuk desimal dengan menggunakan tabel ascii, kemudian dilakukan perhitungan dengan fungsi � � ��� � , dimana pada method diatas diwakili dengan variabel result [i][0]. Setelah itu maka akan dilakukan perhitungan dengan fungsi �� �� ��� � , dimana pada method diatas diwakili dengan variabel result [i][1]. Kemudian untuk mendapatkan ciphertext-nya, maka akan digabungkan kedua variabel tersebut yaitu result[i][0] dan result [i][1], dimana pada method diwakili dengan variabel hasil. Pada form enkripsi dan penyisipan, terdapat pula fungsi penyisipan ciphertext kedalam gambar dengan menggunakan algoritma LSB, berikut merupakan algoritma LSB untuk fungsi penyisipan dalam bahasa pemograman java : Universitas Sumatera Utara private void jButton4ActionPerformedjava.awt.event.ActionEvent evt { String textString = jTextArea1.getText; String textString1 = ; long startTime, endTime; textString1 = jTextField1.getText; startTime = System.currentTimeMillis; String msg=EnkripsitextString,textString1; if oriIMG==null{ JOptionPane.showMessageDialognull, Buka File Citra , Aplikasi KriptografiSteganography Citra Digital, 1; } else { dBuf = oriIMG.getData.getDataBuffer; raster = oriIMG.getRaster; cm = oriIMG.getColorModel; sm = raster.getSampleModel; ispremulti = oriIMG.isAlphaPremultiplied; pixels=DataBufferByteoriIMG.getRaster.getDataBuffer.getDat; String q=; if .equalsjTextField1.getText { JOptionPane.showMessageDialognull, Kata sandi masih kosong , Aplikasi Kriptografi Citra Digital, 1; } else { String msb=; String msgbt=; msgb=msg.getBytes; for int iter = 0 ; iter msg.length ; iter++{ msb =byteToBinarymsgb[iter]; msgbt += msb+ ; } System.out.printlnmsb; System.out.printlnnilai bit-bit pesan+msgbt; String e=; String f=; int d=msgbt.length ; System.out.printlnpanjang yang disisipkan :+d; String b=Integer.toBinaryStringd; if b.length=21{ int c=21-b.length; forint i=0;ic;i++{ e +=0; } f=e+b; } System.out.printlnnilai bit dari panjang +f; int h=pixels.length-1; String r=; forint i=0; if.length;i++ { r += f.charAti; ifr.length==7{ String sementara=r; pixels[h]=Byte.parseBytesementara, 2; q +=pixels[h]+ ; h--; r=; } } System.out.printlnnilai bit +q; System.out.printlnpanjang pixel +h; String bitsContainer; String newBitsContainer; Universitas Sumatera Utara int indexOfByteInContainer = 0; if pixels.length msgbt.length Byte.SIZE{ System.out.printlnProcess stop~; } else { String t=; String s=; String nilai=; int i; for i=0; imsgbt.length;i++{ bitsContainer=byteToBinarypixels[i]; newBitsContainer = bitsContainer.substring0,6+ msgbt.charAti; pixels [i]=Byte.parseBytenewBitsContainer,2; nilai +=newBitsContainer + ; } System.out.printlnbit yang telah diubah+nilai; String Result=; for i=0 ; i100;i++{ Result +=pixels[i]; } System.out.printlnnilai dari bit yan telah diubah+Result; } } System.out.printlnnilai bit yang mau disisipkan +q; DataBufferByte db = new DataBufferBytepixels, dBuf.getSize, dBuf.getOffset; WritableRaster wraster = Raster.createWritableRastersm, db, null; cipherIMG = new BufferedImagecm,wraster,ispremulti, null; Ikon = new ImageIconToolkit.getDefaultToolkit.createImage cipherIMG.getSource; if ikon.getIconWidthPREFERRED_WIDTH{ ikon = new ImageIconikon.getImage.getScaledInstance PREFERRED_WIDTH, -1, Image.SCALE_DEFAULT; if ikon.getIconHeight PREFERRED_HEIGHT{ ikon = new ImageIconikon.getImage.getScaledInstance-1, PREFERRED_HEIGHT, Image.SCALE_DEFAULT; } } endTime = System.currentTimeMillis; speedElgamal = endTime - startTime; String time = String.valueOfspeedElgamal; jTextField2.setTexttime; jLabel7.setIconikon; JOptionPane.showMessageDialognull, Citra selesai dienkripsi, Aplikasi Kriptografi Citra Digital, 1; } } Pada method diatas maka ciphertext akan diubah ke binari, kemudian file gambar dibaca dan dihitung jumlah byte-nya. Apabila byte citra binari ciphertext, proses akan dihentikan, sedangkan apabila byte citra binari ciphertext maka proses penyisipan akan dilakukan. Pada proses penyisipan, setiap 1 binari cipherterxt akan disisipi pada setiap byte citra. Jumlah binari ciphertext akan diubah ke 3 byte array, kemudian akan menggantika 3 byte terakhir dari citra. Universitas Sumatera Utara

4.1.4 Tampilan Halaman Ekstraksi dan Dekripsi

Halaman ini merupakan halaman yang digunakan untuk mengekstraksi ciphertext dari citra, kemudian mendekripsikannya ke pesan asli. Untuk dapat melakukan ekstraksi dan dekripsi, pengguna harus menginputkan citra dan kunci privat. Kunci dapat diinputkan dengan mengetiknya langsung atau mencari filenya dengan mengklik buton browse. Sedangkan citra diinputkan dengan mengklik button browse, kemudian cari filenya. Gambar 4.4 Halaman Ekstraksi dan Dekripsi Jika form gambar dan kunci ada yang kosong, maka program akan memberi peringatan bahwa ada form yang kosong. Setelah citra dan kunci diinputkan, pengguna kemudian mengklik button EkstraksiDekripsi, maka sistem akan memprosesnya dan mencetak Pesan aslinya. Universitas Sumatera Utara Pada form ekstraksi dan dekripsi akan ada fungsi ekstrak dengan algoritma LSB, berikut merupakan algoritma LSB untuk fungsi ektrak dalam bahasa java : private void jButton1ActionPerformedjava.awt.event.ActionEvent evt { if oriIMG==null{ JOptionPane.showMessageDialognull, Buka File Citra , Aplikasi Kriptografi dan Steganografi, 1; } else { dBuf = oriIMG.getData.getDataBuffer; raster = oriIMG.getRaster; cm = oriIMG.getColorModel; sm = raster.getSampleModel; ispremulti = oriIMG.isAlphaPremultiplied; pixels=DataBufferByteoriIMG.getRaster.getDataBufer.getData; byte [] s ; String d=; String data=; String hasil=; String hasilakhir=; String ahasil [] = new String[1000000]; int lengthhasil=0; int e = 0; int panjang; String temp=; String jumlah=; startTime = System.currentTimeMillis; panjang = pixels.length-1; for int i=panjang;i=panjang-2;i--{ temp=Byte.toStringpixels[i]; jumlah +=temp + ; } System.out.printlnjumlah; String array[] = jumlah.split\\s; String temp1=; String temp2=; for int i = 0; i array.length;i++ { if array[i].isEmpty { int j=Integer.parseIntarray[i]; temp1=ByteToBitj; System.out.printlntemp1; } temp2 +=temp1; } panjang =Integer.parseInttemp2, 2; System.out.printlntemp2; System.out.printlnpanjang pesan yang disisipkan : +panjang; String temp3; String bitsContainer=; String ContainerData=; for int i=0;ipanjang;i ++{ bitsContainer=byteToBinarypixels[i]; ContainerData +=bitsContainer; } int panjangContainer=ContainerData.length; System.out.printlnPanajng COntainer+panjangContainer; System.out.printlnData Container :+ContainerData; Universitas Sumatera Utara String Data=; String DataAkhir=; for int i=7;iContainerData.length;i +=8{ Data +=ContainerData.charAti; if Data.length==8{ String Sementara=Data; int j=Integer.parseIntSementara, 2; char v=char j; ahasil [lengthhasil]=String.valueOfv; DataAkhir += ahasil [lengthhasil]; Data =; lengthhasil++; } } proses dekripsi String string=; string =jTextField1.getText; String textString1 = ; textString1 = DataAkhir; HasilDekripsi=DekripsitextString1,string; } endTime = System.currentTimeMillis; speedElgamal = endTime - startTime; String time = String.valueOfspeedElgamal; jTextField2.setTexttime; jTextArea1.setTextHasilDekripsi; } Pada method diatas, maka program akan membaca 3 byte terakhir dari byte citra, kemudian mengkonversinya ke desimal, sehingga diketahui berapa banyak binari data yang disisipkan. Setelah itu, program akan mengambil bit ke delapan dari masing-masing byte sebanyak jumlah binari data yang disisipkan. Kemudian program akan menggabungkan binari data dan apabila jumlah bitnya 8 maka akan dikonversi ke karakter, kemudian masing-masing karakter akan digabung, sehingga diperoleh ciphertext yang disisipkan pada citra, kemudian akan dilanjutkan pada proses dekripsi. 62 Universitas Sumatera Utara Pada form ekstraksi dan dekripsi, terdapat fungsi dekripsi dengan menggunakan algoritma elgamal, berikut adalah method algoritma elgamal untuk fungsi dekripsi dalam bahasa pemograman java : public static String Dekripsi String pesan, String kunci{ String string = ; string=pesan; String textString1 = ; textString1=kunci; String x= SplitGanjilstring; String y= SplitGenapstring; int s=string.length; String array[] = x.split\\s; String array1[] = y.split\\s; String array2[] = textString1.split\\s; int d=0; int e=0; BigInteger f = new BigInteger0; BigInteger p = new BigInteger0; variabel bilangan prima BigInteger a = new BigInteger0; variabel kunci privat BigInteger z = new BigInteger1; String hasil=; String hasilakhir=; String hasilakhir1=; String hasilakhir2=; String hasilakhir3=; BigInteger result [][]= new BigInteger [s][2]; BigInteger result1 [][]= new BigInteger [s][2]; int aa=0; int bb=0; for int count = 0; count array2.length; count++ { if array[count].isEmpty { aa=Integer.parseIntarray2[0]; bb=Integer.parseIntarray2[1]; } } p=BigInteger.valueOfaa; a=BigInteger.valueOfbb; for int count = 0; count array.length; count ++ { if array[count].isEmptyarray1[count].isEmpty { d=Integer.parseIntarray[count]; e=Integer.parseIntarray1[count]; BigInteger h=p.subtractz; BigInteger t=h.subtracta;p-1-a BigInteger i=BigInteger.valueOfd; hasilakhir3 += i + ; result [count][0]=moduloi,t,p; BigInteger j= result [count][0]; BigInteger k=BigInteger.valueOfe; BigInteger n =j.multiplyk; result [count][1]=modulon,z,p ; BigInteger r=result [count][1]; int u= r.intValue; char v=char u; convert integer to char hasilakhir1 += v; hasilakhir += result [count][0] + ; hasil +=result[count][1] + ; } } return hasilakhir1; } Universitas Sumatera Utara Pada method diatas yang menjadi inputan adalah pesan dan kunci, dimana pesannya merupakan ciphertext hasil ekstraksi dari citra, sedangkan kuncinya merupakan kunci privat yang diinputkan si penerima. Pesan akan diparsing menjadi 2 bagian yaitu � � ��� � dan �� �� ��� � , sedangkan kunci akan diparsing menjadi p dan a. Setelah diparsing, akan dilakukan proses perhitungan dengan rumus � � �−1−� ��� � dimana pada program diwakili dengan variabel result [count][0], setelah nilainya didapat, akan dilanjutkan dengan proses perhitungan dengan rumus � � −� �� ��� � dimana pada program diwakili dengan variabel result [count][1]. Setelah nilai desimal plaintext didapat, kemudian nilai tersebut dikonversi ke karakter menggunakan tabel ascii, hasil dari konversi tersebut merupakan plaintext-nya.

4.2 Pengujian Aplikasi

Dokumen yang terkait

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

2 32 64

Implementasi Algoritma Massey-Omura dan Algoritma Least Significant Bit (LSB) Modifikasi Tempat Penyisipan Dengan Cover Image Bitmap Untuk Keamanan Data Text

2 18 125

Implementasi Algoritma Massey-Omura dan Algoritma Least Significant Bit (LSB) Modifikasi Tempat Penyisipan Dengan Cover Image Bitmap Untuk Keamanan Data Text

1 1 13

Implementasi Algoritma Massey-Omura dan Algoritma Least Significant Bit (LSB) Modifikasi Tempat Penyisipan Dengan Cover Image Bitmap Untuk Keamanan Data Text

0 0 2

Implementasi Algoritma Massey-Omura dan Algoritma Least Significant Bit (LSB) Modifikasi Tempat Penyisipan Dengan Cover Image Bitmap Untuk Keamanan Data Text

0 0 5

Implementasi Algoritma Massey-Omura dan Algoritma Least Significant Bit (LSB) Modifikasi Tempat Penyisipan Dengan Cover Image Bitmap Untuk Keamanan Data Text

1 6 16

Implementasi Algoritma Massey-Omura dan Algoritma Least Significant Bit (LSB) Modifikasi Tempat Penyisipan Dengan Cover Image Bitmap Untuk Keamanan Data Text

0 0 2

Implementasi Algoritma Massey-Omura dan Algoritma Least Significant Bit (LSB) Modifikasi Tempat Penyisipan Dengan Cover Image Bitmap Untuk Keamanan Data Text

1 2 11

Implementasi Algoritma Elgamal Dengan Pembangkit Bilangan Prima Lehmann Dan Algoritma Least Significant Bit (Lsb) Dengan Cover Image Bitmap Untuk Keamanan Data Text

0 0 35

IMPLEMENTASI ALGORITMA ELGAMAL DENGAN PEMBANGKIT BILANGAN PRIMA LEHMANN DAN ALGORITMA LEAST SIGNIFICANT BIT (LSB) DENGAN COVER IMAGE BITMAP UNTUK KEAMANAN DATA TEXT

0 0 11