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

  A-1 LISTING PROGRAM //FinalElgamalLsb.java

  package finalelgamal.lsb; public class FinalElgamalLsb { public static void main(String[] args) { MenuUtama menu_utama=new MenuUtama(); menu_utama.setVisible(true); } }

  //MenuUtama.java

  package finalelgamal.lsb; import com.sun.glass.ui.Application; import javax.swing.JFrame; public class MenuUtama extends javax.swing.JFrame { /** Creates new form MenuUtama */ public MenuUtama() { initComponents(); } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); jMenuBar1 = new javax.swing.JMenuBar(); jMenu1 = new javax.swing.JMenu(); jMenuItem1 = new javax.swing.JMenuItem(); jMenuItem2 = new javax.swing.JMenuItem(); jMenuItem3 = new javax.swing.JMenuItem(); jMenu2 = new javax.swing.JMenu(); jMenuItem4 = new javax.swing.JMenuItem(); jMenuItem5 = new javax.swing.JMenuItem(); jMenuItem6 = new javax.swing.JMenuItem(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setForeground(new java.awt.Color(255, 102, 255)); setResizable(false); addWindowListener(new java.awt.event.WindowAdapter() { public void windowActivated(java.awt.event.WindowEvent evt) { formWindowActivated(evt); } }); jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resource/background2.png"))) ; // NOI18N jLabel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.b order.BevelBorder.RAISED)); jLabel2.setFont(new java.awt.Font("Times New Roman", 1, 24)); jLabel2.setForeground(new java.awt.Color(255, 255, 255));

  A-2

  jLabel2.setText(" Program Enkripsi Elgamal dan Steganografi LSB"); jLabel3.setFont(new java.awt.Font("Traditional Arabic", 1, 18)); jLabel3.setForeground(new java.awt.Color(255, 255, 255)); jLabel3.setText("Dibuat Oleh : Hermanda I.T. Simamora [0814010079]"); jLabel4.setText("Copyright@HermandaSimamora& Ilmu Komputer USU"); jMenu1.setText("Program"); jMenuItem1.setText("Bangkitkan Kunci"); jMenuItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem1ActionPerformed(evt); } }); jMenu1.add(jMenuItem1); jMenuItem2.setText("Enkripsi & Sisipkan "); jMenuItem2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem2ActionPerformed(evt); } }); jMenu1.add(jMenuItem2); jMenuItem3.setText("Ekstraksi & Dekripsi "); jMenuItem3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem3ActionPerformed(evt); } }); jMenu1.add(jMenuItem3); jMenuBar1.add(jMenu1); jMenu2.setText("Help"); jMenuItem4.setText("About"); jMenuItem4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem4ActionPerformed(evt); } }); jMenu2.add(jMenuItem4); jMenuItem5.setText("Cara penggunaan"); jMenuItem5.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem5ActionPerformed(evt); } }); jMenu2.add(jMenuItem5); jMenuItem6.setText("Keluar"); jMenuItem6.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem6ActionPerformed(evt); }

  A-3

  }); jMenu2.add(jMenuItem6); jMenuBar1.add(jMenu2); setJMenuBar(jMenuBar1); private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) { PembangkitKunci menu_bangkitkankunci = new PembangkitKunci(); menu_bangkitkankunci.show(); this.dispose(); } private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) { EnkripsidanHide menu_enkripsihide =new EnkripsidanHide(); menu_enkripsihide.show(); this.dispose(); } private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) { EkstraksidanDekripsi menu_ektraksidekripsi = new EkstraksidanDekripsi(); menu_ektraksidekripsi.show(); this.dispose(); } private void formWindowActivated(java.awt.event.WindowEvent evt) { // TODO add your handling code here: } private void jMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) { About menu_about=new About(); menu_about.show(); this.dispose(); } private void jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) { CaraPenggunaan menu_penggunaan=new CaraPenggunaan(); menu_penggunaan.show(); this.dispose(); } private void jMenuItem6ActionPerformed(java.awt.event.ActionEvent evt) { System.exit(0); } public static void main(String args[]) { try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(MenuUtama.class.getName()).log(java.util .logging.Level.SEVERE, null, ex);

  A-4

  } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(MenuUtama.class.getName()).log(java.util .logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(MenuUtama.class.getName()).log(java.util .logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(MenuUtama.class.getName()).log(java.util .logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new MenuUtama().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JMenu jMenu1; private javax.swing.JMenu jMenu2; private javax.swing.JMenuBar jMenuBar1; private javax.swing.JMenuItem jMenuItem1; private javax.swing.JMenuItem jMenuItem2; private javax.swing.JMenuItem jMenuItem3; private javax.swing.JMenuItem jMenuItem4; private javax.swing.JMenuItem jMenuItem5; private javax.swing.JMenuItem jMenuItem6; // End of variables declaration }

  //PembangkitKunci.java

  package finalelgamal.lsb; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.math.BigInteger; import java.util.Arrays; import java.util.Collections; import java.util.Random; import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; public class PembangkitKunci extends javax.swing.JFrame { /** Creates new form PemabangkiKunci */ public PembangkitKunci() { initComponents();

  A-5

  } public static int modulo(int a, int b,int c ){ int d; int e; int a1 = a ; int p = 1; while (b > 0) { if (b % 2 !=0){ p *= a1; d = p % c; p = d; } b/=2; e= (a1 * a1) % c; a1=e; } return p; } public static int isPrimitive(int a, int b) { int d; int result [] = new int [b]; // array baru untuk result int i; String R=""; String Result =""; for (i=1 ; i<b; i++){ result[i]=modulo(a,i,b); R += i+" "; Result += result[i]+" "; } System.out.println("nilai R :"+R); //System.out.println("nilai result : "+Result); String data=Result; String[] numbers = data.split(" "); Integer[] intValues = new Integer[numbers.length]; for (int h = 0; h < numbers.length; h++) { intValues[h] = Integer.parseInt(numbers[h].trim()); } Collections.sort(Arrays.asList(intValues)); // Mengembalikan nomor yang berurutan ke string menggunakan String Builde object // StringBuilder object. Prints the sorted string numbers. // StringBuilder builder = new StringBuilder(); for (int h = 0; h < intValues.length; h++) { Integer intValue = intValues[h]; builder.append(intValue); if (h < intValues.length - 1) { builder.append(" "); } } System.out.println("After = " + builder.toString()); if (R.contains(builder.toString())){ d=a; } else { d=0;

  A-6

  } return d; } public static int checkPrima(int prima) { Random rand = new Random(4); Scanner input = new Scanner(System.in); int testNumber[] = new int [13]; testNumber[0] = 2; testNumber[1] = 3; testNumber[2] = 5; testNumber[3] = 7; 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++) //menguji hingga 6 kali pakah menhasilkan 1 atau p-1 { bilanganRandom = rand.nextInt(12); //mengacak bilangan random randPrime = testNumber[bilanganRandom]; //mengenerate array testnumber[13] dan menginiliasikan menjadi rendPrime if (!(randPrime == prima)){ //mengecek apakah array yang digenerate sama dengan bilangan prima //pangkat = modExp(randPrime,(prima-1)/2, prima); //result = pangkat % prima; result = modulo (randPrime, (prima-1)/2, prima ) ; if (!(result == 1 || result == prima-1)){ statue = -1; break; } } } if (statue == -1){ prima = 0; } else { prima = prima; } return prima; } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() {

  A-7

  jLabel1 = new javax.swing.JLabel(); jSeparator2 = new javax.swing.JSeparator(); jLabel2 = new javax.swing.JLabel(); jSeparator3 = new javax.swing.JSeparator(); jLabel3 = new javax.swing.JLabel(); jTextField1 = new javax.swing.JTextField(); jLabel4 = new javax.swing.JLabel(); jTextField2 = new javax.swing.JTextField(); jLabel5 = new javax.swing.JLabel(); jTextField3 = new javax.swing.JTextField(); jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); jButton4 = new javax.swing.JButton(); jButton5 = new javax.swing.JButton(); jLabel6 = new javax.swing.JLabel(); jTextField4 = new javax.swing.JTextField(); jTextField5 = new javax.swing.JTextField(); jButton6 = new javax.swing.JButton(); jButton7 = new javax.swing.JButton(); setResizable(false); jLabel1.setFont(new java.awt.Font("Times New Roman", 0, 14)); jLabel1.setText("Fungsi Untuk Membangkitkan Kunci Enkripsi dan Dekripsi"); jLabel2.setFont(new java.awt.Font("Times New Roman", 0, 14)); jLabel2.setText("Fungsi Untuk Membangkitkan Sebuah Bilangan Prima "); jLabel3.setFont(new java.awt.Font("Times New Roman", 0, 14)); jLabel3.setText("Masukkan Sebuah Kunci"); jLabel4.setFont(new java.awt.Font("Times New Roman", 0, 14)); jLabel4.setText("Kunci Publik"); jLabel5.setFont(new java.awt.Font("Times New Roman", 0, 14)); jLabel5.setText("Kunci Privat"); jButton1.setText("Generate"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jButton2.setText("Save"); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); jButton3.setText("Save"); jButton3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt); } });

  A-8

  jButton4.setText("Clear"); jButton4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton4ActionPerformed(evt); } }); jButton5.setText("Menu Utama"); jButton5.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton5ActionPerformed(evt); } }); jLabel6.setFont(new java.awt.Font("Times New Roman", 0, 14)); jLabel6.setText("Masukkan Sebuah Bilangan"); jButton6.setText("Next Prime"); jButton6.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton6ActionPerformed(evt); } }); jButton7.setText("Clear"); jButton7.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton7ActionPerformed(evt); } }); private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { int p= 0; int t; //variabel bilangan acak untuk bilangan prima int prima = 0; //inisialisasi bilagan prima (p) int alpha=0; // inisialisasi b ilanga alpha (α) int t1; //variabel bilangan acak untuk primitive root int d=0; // vaiabel untuk perulangan while int a=0; //variabel kunci prvat BigInteger b=new BigInteger("0"); //alpha pangkat a String result; String result1; a = Integer.parseInt(jTextField1.getText()); //System.out.println(" nilai kunci " +key); while (p==0){ Random RandomGenerator = new Random(); //inilialisasi bilangan random int randomInt = RandomGenerator.nextInt(30000); // acak nilai hingga batas 300000000 t = randomInt; if (t % 2 == 0) { //apabila bilangan yang digenerate genap maka akan dibangkitkan kembali p =0; System.out.print(" " + p); } else { prima= checkPrima(t); //mengecek bilangan yang dibangkitkan apakah prima atau tidak p=prima; //masukkan nilai prima ke variabel p

  A-9

  System.out.println("generated " +prima); } } while (d==0){ Random RandomGenerate = new Random(); //inilialisasi bilangan random int randomInt1 = RandomGenerate.nextInt(a-1); //generate sebuah bilangan dengan nilai prima - 1 t1 = randomInt1; alpha=isPrimitive(t1,a); // memanggil method isPrimitive untuk memeriksa apakah primitve root atau tidak d=alpha; if(d!=0) break; Random RandomGenerate = new Random(); int randomInt1 = RandomGenerate.nextInt(3000); // acak nilai hingga batas 300000000 } BigInteger x = BigInteger.valueOf(alpha); BigInteger y = BigInteger.valueOf(a); BigInteger s = BigInteger.valueOf(prima); b = x.modPow(y, s); result=prima+" "+alpha+" "+b; result1=prima+" "+a; jTextField2.setText(result); // menampilkan kunci publik jTextField3.setText(result1); // menampilkan kunci privat } private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) { int p=0; int prima=0; int d=Integer.parseInt(jTextField4.getText()); while (p==0){ if (d % 2 == 0) { //apabila bilangan yang digenerate genap maka akan dibangkitkan kembali p =0; } else { prima= checkPrima(d); //mengecek bilangan yang dibangkitkan apakah prima atau tidak p=prima; //masukkan nilai prima ke variabel p } d++; // menambah variabel d dengan nilai 1 } jTextField5.setText(String.valueOf(prima)); } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { FileWriter fw = null; try { String nmfile = "kuncipublik.txt"; fw = new FileWriter(nmfile); BufferedWriter bw = new BufferedWriter(fw); //Membuat objek untuk menulis file String isiText=""; isiText = jTextField2.getText(); bw.write(isiText); bw.newLine(); bw.close(); fw.close(); JOptionPane.showMessageDialog(rootPane, "nilai kunci publik telah tersimpan"); }

  A-10

  catch (IOException ex) { Logger.getLogger(PembangkitKunci.class.getName()).log(Level.SEVERE, null, ex); } } private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { FileWriter fw = null; try { String nmfile = "kunciprivat.txt"; fw = new FileWriter(nmfile); BufferedWriter bw = new BufferedWriter(fw); //Membuat objek untuk menulis file String isiText=""; isiText = jTextField3.getText(); bw.write(isiText); bw.newLine(); bw.close(); fw.close(); JOptionPane.showMessageDialog(rootPane, "nilai kunci privat telah tersimpan"); } catch (IOException ex) { Logger.getLogger(PembangkitKunci.class.getName()).log(Level.SEVERE, null, ex); } } private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) { jTextField1.setText(""); jTextField2.setText(""); jTextField3.setText(""); } private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) { jTextField4.setText(""); jTextField5.setText(""); } private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) { MenuUtama menu_utama=new MenuUtama(); menu_utama.show(); this.dispose(); } public static void main(String args[]) { setting code (optional) "> with the default look and feel. try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) {

  A-11

  java.util.logging.Logger.getLogger(PembangkitKunci.class.getName()).log(jav a.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(PembangkitKunci.class.getName()).log(jav a.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(PembangkitKunci.class.getName()).log(jav a.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(PembangkitKunci.class.getName()).log(jav a.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new PembangkitKunci().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JButton jButton3; private javax.swing.JButton jButton4; private javax.swing.JButton jButton5; private javax.swing.JButton jButton6; private javax.swing.JButton jButton7; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JSeparator jSeparator2; private javax.swing.JSeparator jSeparator3; private javax.swing.JTextField jTextField1; private javax.swing.JTextField jTextField2; private javax.swing.JTextField jTextField3; private javax.swing.JTextField jTextField4; private javax.swing.JTextField jTextField5; // End of variables declaration }

  //EnkripsidanHide.java

  package finalelgamal.lsb; import addon.CustomFileFilter; import addon.LabelAccessory; import java.awt.ComponentOrientation; import java.awt.Image; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.awt.image.ColorModel;

  A-12

  import java.awt.image.DataBuffer; import java.awt.image.DataBufferByte; import java.awt.image.Raster; import java.awt.image.SampleModel; import java.awt.image.WritableRaster; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.math.BigInteger; import java.util.Locale; import java.util.Random; import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileNameExtensionFilter; public class EnkripsidanHide extends javax.swing.JFrame { private static int PREFERRED_WIDTH; private static int PREFERRED_HEIGHT; private BufferedImage oriIMG = null; private BufferedImage plainIMG = null; private ImageIcon ikon; private BufferedImage cipherIMG = null; private DataBuffer dBuf; private byte [] msgb; private WritableRaster raster; private ColorModel cm; private SampleModel sm; private long speedElgamal; boolean ispremulti; byte[] pixels; byte[] sisipkan; String newData; String filetype; String finalContainer = ""; String a; String b; byte[] pixels1 ; String pixels2; String [] pixels3 = new String [100000000]; /** Creates new form EnkripsidanHide */ public EnkripsidanHide() { initComponents(); } public static BigInteger modulo(BigInteger a, BigInteger b,BigInteger c ){ BigInteger d = new BigInteger("1"); //inisialisasi variabel d dengan nilai 1 BigInteger a1 = a ; //memberikan nilai a1 dengan nilai a BigInteger p = new BigInteger("1"); // inisialisasi variabel p dengan nilai 1

  A-13

  for(int i = 1; i <= b.intValue(); i++) { // perulangan dimana nilai i 1 hingga lebih kecil atau sma dgn dengan nilai b p= p.multiply(a1);// menghitung nilai p denga cara mengalikan p dngn a1 d = p.mod(c); // menghitung nilai d dengan cara memodulokan dengan nilai c p = d; } return p; } private String byteToBinary(byte byteData){ String binary = ""; for (int iteration = 0 ; iteration < Byte.SIZE ; iteration++ ){ binary+=(byteData & 0x80) == 0 ? '0' : '1'; byteData <<= 1; } return binary; } 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 BigInteger("0"); BigInteger apa = new BigInteger("0"); //alpha pangkat a BigInteger alpha = new BigInteger("0"); BigInteger e = new BigInteger("0"); BigInteger y = new BigInteger("0"); BigInteger z = new BigInteger("1"); 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.parseInt(array[0]); f=Integer.parseInt(array[1]); k=Integer.parseInt(array[2]); } } prima=BigInteger.valueOf(a); alpha=BigInteger.valueOf(f); apa=BigInteger.valueOf(k); for(int i = 0; i < textString.length(); i++) { Random RandomGenerate = new Random(); //inilialisasi bilangan random int randomInt1 = RandomGenerate.nextInt(prima.intValue()-1); BigInteger b = BigInteger.valueOf(randomInt1);//convert integer randomInt1 to BigInteger testNumber[i] = (int)textString.charAt(i); //convert char to decimal BigInteger d =BigInteger.valueOf(testNumber[i]) ;

  A-14

  result [i][0]=modulo(alpha,b,prima) ; BigInteger sementara= modulo (apa,b,prima); BigInteger sementara1= d.multiply(sementara); result [i][1]=modulo(sementara1,z,prima); //m x(a pangkat b) mdulo p hasil +=result[i][0]+" "+result[i][1]+" "; } return hasil; } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jFileChooser1 = new javax.swing.JFileChooser(); jFileChooser2 = new javax.swing.JFileChooser(); jFileChooser3 = new javax.swing.JFileChooser(); jLabel1 = new javax.swing.JLabel(); jSeparator1 = new javax.swing.JSeparator(); jLabel2 = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); jTextArea1 = new javax.swing.JTextArea(); jLabel3 = new javax.swing.JLabel(); jTextField1 = new javax.swing.JTextField(); jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); jLabel4 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); jButton3 = new javax.swing.JButton(); jButton4 = new javax.swing.JButton(); jButton5 = new javax.swing.JButton(); jButton6 = new javax.swing.JButton(); jLabel6 = new javax.swing.JLabel(); jLabel7 = new javax.swing.JLabel(); jButton7 = new javax.swing.JButton(); jButton8 = new javax.swing.JButton(); jSeparator2 = new javax.swing.JSeparator(); jTextField2 = new javax.swing.JTextField(); jLabel8 = new javax.swing.JLabel(); jLabel9 = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setBackground(new java.awt.Color(102, 255, 255)); setResizable(false); jLabel1.setFont(new java.awt.Font("Times New Roman", 0, 14)); jLabel1.setText("Fungsi Untuk Meng-Enkripsi dan Menyisipkan Pesan Ke Gambar"); jLabel2.setFont(new java.awt.Font("Times New Roman", 0, 14)); jLabel2.setText("Pesan"); jTextArea1.setColumns(20); jTextArea1.setRows(5); jScrollPane1.setViewportView(jTextArea1); jLabel3.setFont(new java.awt.Font("Times New Roman", 0, 14)); jLabel3.setText("Kunci"); jButton1.setText("Browse"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); }

  A-15

  }); jButton2.setText("Browse"); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); jLabel4.setText("Gambar"); jLabel5.setBackground(new java.awt.Color(204, 255, 102)); jLabel5.setForeground(new java.awt.Color(153, 255, 153)); jLabel5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resource/label.png"))); // NOI18N jButton3.setText("Browse"); jButton3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt); } }); jButton4.setText("Enkripsi & Penyisipan"); jButton4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton4ActionPerformed(evt); } }); jButton5.setText("Clear"); jButton5.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton5ActionPerformed(evt); } }); jButton6.setText("Menu Utama"); jButton6.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton6ActionPerformed(evt); } }); jLabel6.setFont(new java.awt.Font("Times New Roman", 0, 14)); jLabel6.setText("Hasil Enkripsi & Steganografi"); jLabel7.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resource/label.png"))); // NOI18N jButton7.setText("Save"); jButton7.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton7ActionPerformed(evt); } }); jButton8.setText("Clear");

  A-16

  jButton8.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton8ActionPerformed(evt); } }); jLabel8.setText("Waktu Ekripsi dan Sisipkan"); jLabel9.setText("Milli Second"); private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { FileFilter ft = new FileNameExtensionFilter("Text Files", "txt"); int returnVal = jFileChooser1.showOpenDialog( this ); String file_name = ""; if (returnVal == javax.swing.JFileChooser.APPROVE_OPTION) { java.io.File file = jFileChooser1.getSelectedFile( ); try { Scanner input = new Scanner (file); while (input.hasNext()){ file_name+= input.nextLine() + "\n"; } } catch (IOException ex) { Logger.getLogger(EnkripsidanHide.class.getName()).log(Level.SEVERE, null, ex); } jTextArea1.setText(file_name); } } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { String str = null; BufferedReader br = null; JFileChooser chooser=new JFileChooser(); int returnVal = chooser.showOpenDialog(null); if(returnVal == JFileChooser.APPROVE_OPTION) { try { File file = chooser.getSelectedFile(); br = new BufferedReader(new FileReader(file)); String st = ""; while ((st = br.readLine()) != null) { str= st; } br.close(); } catch (IOException ex) { Logger.getLogger(EnkripsidanHide.class.getName()).log(Level.SEVERE, null, ex); } } jTextField1.setText(str); } private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { PREFERRED_WIDTH = jLabel5.getWidth(); PREFERRED_HEIGHT = jLabel5.getHeight(); FileFilter filtering = new CustomFileFilter("File Citra Digital (BMP)", new String[] {"BMP"}); jFileChooser2.setAccessory(new LabelAccessory(jFileChooser2));

  A-17

  jFileChooser1.setFileFilter(filtering); int status = jFileChooser2.showOpenDialog(null); if (status == JFileChooser.APPROVE_OPTION) { File selectedFile = jFileChooser2.getSelectedFile(); filetype = jFileChooser2.getTypeDescription(selectedFile); filetype="bmp"; try { oriIMG = ImageIO.read(new File(selectedFile.getPath())); } catch (IOException ex) { Logger.getLogger(EnkripsidanHide.class.getName()).log(Level.SEVERE, null, ex); } // Tampilkan Citra Digital Ke panelGambar/gbrPanel ikon = new ImageIcon(oriIMG); if (ikon.getIconWidth()>PREFERRED_WIDTH){ ikon = new ImageIcon(ikon.getImage().getScaledInstance(PREFERRED_WIDTH, -1, Image.SCALE_DEFAULT)); if (ikon.getIconHeight() > PREFERRED_HEIGHT){ ikon = new ImageIcon(ikon.getImage().getScaledInstance(-1, PREFERRED_HEIGHT, Image.SCALE_DEFAULT)); } } jLabel5.setIcon(ikon); } else if (status == JFileChooser.CANCEL_OPTION) { oriIMG = null; jLabel3.setIcon(null); filetype=""; } } private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) { //Proses Enkripsi String textString = jTextArea1.getText(); String textString1 = ""; long startTime, endTime; textString1 = jTextField1.getText(); startTime = System.currentTimeMillis(); String msg=Enkripsi(textString,textString1); //proses Steganografi if (oriIMG==null){ JOptionPane.showMessageDialog(null, "Buka File Citra !", "Aplikasi Kriptografi&Steganography Citra Digital", 1); } else { dBuf = oriIMG.getData().getDataBuffer(); raster = oriIMG.getRaster(); cm = oriIMG.getColorModel(); sm = raster.getSampleModel(); ispremulti = oriIMG.isAlphaPremultiplied(); pixels=((DataBufferByte)oriIMG.getRaster().getDataBuffer()).getData(); String q=""; if ("".equals(jTextField1.getText())) { JOptionPane.showMessageDialog(null, "Kata sandi masih kosong !", "Aplikasi Kriptografi Citra Digital", 1);

  A-18

  } else { String msb=""; // String msg; String msgbt=""; // msg = jTextField1.getText(); msgb=msg.getBytes(); for (int iter = 0 ; iter < msg.length() ; iter++){ msb =byteToBinary(msgb[iter]); msgbt += msb+ ""; } System.out.println(msb); System.out.println("nilai bit-bit pesan"+msgbt); String e=""; String f=""; int d=msgbt.length() ; System.out.println("panjang yang disisipkan :"+d); String b=Integer.toBinaryString(d); if (b.length()!=21){ int c=21-b.length(); for(int i=0;i<c;i++){ e +=0; } f=e+b; } System.out.println("nilai bit dari panjang "+f); int h=pixels.length-1; String r=""; for(int i=0; i<f.length();i++ ){ r += f.charAt(i); if(r.length()==7){ String sementara=r; pixels[h]=Byte.parseByte(sementara, 2); q +=pixels[h]+ " "; h--; r=""; } } System.out.println("nilai bit" +q); System.out.println("panjang pixel" +h); String bitsContainer; String newBitsContainer; int indexOfByteInContainer = 0; if (pixels.length < msgbt.length() * Byte.SIZE){ System.out.println("Process stop~!"); } else { String t=""; String s=""; String nilai=""; int i; for (i=0; i<msgbt.length();i++){ bitsContainer=byteToBinary(pixels[i]); // System.out.println("nilai bitcontainer" +bitsContainer); newBitsContainer = bitsContainer.substring(0,6)+ msgbt.charAt(i); // pixels [i]=Byte.decode(v);

  A-19

  pixels [i]=Byte.parseByte(newBitsContainer,2); // System.out.println(pixels[i]); // System.out.println(" nilai bit baru : "+newBitsContainer); nilai +=newBitsContainer +" "; // pixels [i]=Byte.parseByte(newBitsContainer, 2); } System.out.println("bit yang telah diubah"+nilai); String Result=""; for (i=0 ; i<100;i++){ Result +=pixels[i]; } System.out.println("nilai dari bit yan telah diubah"+Result); } } System.out.println("nilai bit yang mau disisipkan" +q); DataBufferByte db = new DataBufferByte(pixels, dBuf.getSize(), dBuf.getOffset()); WritableRaster wraster = Raster.createWritableRaster(sm, db, null); cipherIMG = new BufferedImage(cm,wraster,ispremulti, null); ikon = new ImageIcon(Toolkit.getDefaultToolkit().createImage(cipherIMG.getSource())); if (ikon.getIconWidth()>PREFERRED_WIDTH){ ikon = new ImageIcon(ikon.getImage().getScaledInstance(PREFERRED_WIDTH, -1, Image.SCALE_DEFAULT)); if (ikon.getIconHeight() > PREFERRED_HEIGHT){ ikon = new ImageIcon(ikon.getImage().getScaledInstance(-1, PREFERRED_HEIGHT, Image.SCALE_DEFAULT)); } } endTime = System.currentTimeMillis(); speedElgamal = endTime - startTime; String time = String.valueOf(speedElgamal); jTextField2.setText(time); jLabel7.setIcon(ikon); JOptionPane.showMessageDialog(null, "Citra selesai dienkripsi", "Aplikasi Kriptografi Citra Digital", 1); } } private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) { jTextField1.setText(""); jTextArea1.setText(""); ImageIcon icon =new ImageIcon("C:/Users/herman/Documents/NetBeansProjects/FinalElgamal&Lsb/src/ resource/label.png"); jLabel5.setIcon(icon); //ImageIcon gambar=C:/Users/herman/Documents/NetBeansProjects/FinalElgamal&Lsb/src/reso urce/label.png; } private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) { // dekralasikan ukuran label gambar // periksa apakah jLOutput kosong atau tidak

  A-20

  if (jLabel7.getIcon() != null) { FileFilter filtering = new CustomFileFilter("File Citra Digital (BMP)", new String[] {"BMP"}); //jFCSave.setAccessory(new LabelAccessory(jFCSave)); jFileChooser3.setFileFilter(filtering); int status = jFileChooser3.showSaveDialog(null); if (status == JFileChooser.APPROVE_OPTION) { try { String strfile = jFileChooser3.getSelectedFile().getAbsolutePath()+"."+filetype; // Encode as a JPEG if (jFileChooser3.getSelectedFile().exists()){ JOptionPane.showMessageDialog(null, "File Sudah Ada, Penyimpanan dibatalkan", "Peringatan", 2); } else { ImageIO.write(cipherIMG, filetype, new File (strfile)); JOptionPane.showMessageDialog(null, "File berhasil disimpan", "Informasi", 1); } } catch (IOException ex) { Logger.getLogger(EnkripsidanHide.class.getName()).log(Level.SEVERE, null, ex); } } else if (status == JFileChooser.CANCEL_OPTION) { // do nothing } } else { JOptionPane.showMessageDialog(null, "Citra Output Masih Kosong !", "Informasi", 1); } } private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) { MenuUtama menu_utama=new MenuUtama(); menu_utama.show(); this.dispose(); } private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) { jTextField2.setText(""); ImageIcon icon =new ImageIcon("C:/Users/herman/Documents/NetBeansProjects/FinalElgamal&Lsb/src/ resource/label.png"); jLabel7.setIcon(icon); } public static void main(String args[]) { try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) {

  A-21

  java.util.logging.Logger.getLogger(EnkripsidanHide.class.getName()).log(jav a.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(EnkripsidanHide.class.getName()).log(jav a.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(EnkripsidanHide.class.getName()).log(jav a.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(EnkripsidanHide.class.getName()).log(jav a.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new EnkripsidanHide().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JButton jButton3; private javax.swing.JButton jButton4; private javax.swing.JButton jButton5; private javax.swing.JButton jButton6; private javax.swing.JButton jButton7; private javax.swing.JButton jButton8; private javax.swing.JFileChooser jFileChooser1; private javax.swing.JFileChooser jFileChooser2; private javax.swing.JFileChooser jFileChooser3; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JSeparator jSeparator1; private javax.swing.JSeparator jSeparator2; private javax.swing.JTextArea jTextArea1; private javax.swing.JTextField jTextField1; private javax.swing.JTextField jTextField2; // End of variables declaration }

  //EktraksidanDekripsi.java

  package finalelgamal.lsb; import addon.CustomFileFilter;

  A-22

  import addon.LabelAccessory; import finalelgamal.lsb.EnkripsidanHide; import java.awt.Image; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.DataBuffer; import java.awt.image.DataBufferByte; import java.awt.image.SampleModel; import java.awt.image.WritableRaster; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.math.BigInteger; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.filechooser.FileFilter; public class EkstraksidanDekripsi extends javax.swing.JFrame { private static int PREFERRED_WIDTH; private static int PREFERRED_HEIGHT; private BufferedImage oriIMG = null; private BufferedImage plainIMG = null; private ImageIcon ikon; private BufferedImage cipherIMG = null; private DataBuffer dBuf; private byte [] msgb; private WritableRaster raster; private ColorModel cm; private SampleModel sm; private long speedElgamal; long startTime, endTime; boolean ispremulti; byte[] pixels; byte[] sisipkan; private String HasilDekripsi=""; String newData; String filetype; /** Creates new form EkstraksidanDekripsi */ public EkstraksidanDekripsi() { initComponents(); } private String ByteToBit (int i){ String Bit=""; String temp7=""; String temp6=Integer.toBinaryString(i); if(temp6.length() !=7){ int c=7-temp6.length(); for (int j=0;j<c;j++){ temp7 +=0; } temp6 =temp7+temp6;

  A-23

  } return temp6; } private String byteToBinary(byte byteData){ String binary = ""; for (int iteration = 0 ; iteration < Byte.SIZE ; iteration++ ){ binary+=(byteData & 0x80) == 0 ? '0' : '1'; byteData <<= 1; } return binary; } public static BigInteger modulo(BigInteger a, BigInteger b,BigInteger c ){ BigInteger d = new BigInteger("1"); BigInteger a1 = a ; BigInteger p = new BigInteger("1"); for(int i = 1; i <= b.intValue(); i++) { p= p.multiply(a1); d = p.mod(c); p = d; } return p; } public static String Dekripsi (String pesan, String kunci){ String string = ""; string=pesan; String textString1 = ""; textString1=kunci; String x= SplitGanjil(string); String y= SplitGenap(string); 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 BigInteger("0"); BigInteger p = new BigInteger("0"); //variabel bilangan prima BigInteger a = new BigInteger("0");// variabel kunci privat BigInteger z = new BigInteger("1"); 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.parseInt(array2[0]); bb=Integer.parseInt(array2[1]); } } p=BigInteger.valueOf(aa);

  A-24

  a=BigInteger.valueOf(bb); for (int count = 0; count < array.length; count ++) { if (!(array[count].isEmpty()&&array1[count].isEmpty())) { d=Integer.parseInt(array[count]); // mengubah string ke bentuk integer e=Integer.parseInt(array1[count]); // mengubah string ke bentuk integer BigInteger h=p.subtract(z); BigInteger t=h.subtract(a);//p-1-a BigInteger i=BigInteger.valueOf(d); //convert int d to biginteger i hasilakhir3 += i + " "; result [count][0]=modulo(i,t,p); //(α^b)^(p-1-a) ( mod p)

  BigInteger j= result [count][0]; // Convert array result ke big intejer j BigInteger k=BigInteger.valueOf(e); // convert integer e ke Biginteger k BigInteger n =j.multiply(k); result [count][1]=modulo(n,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; } // Fungsi untuk memecahkan array menjadi 2 bagian dan bagian dengan index ganjil public static String SplitGanjil(String string){ String array[] = string.split("\\s"); String hasil=""; int d=0; for (int count = 0; count < array.length; count +=2) { if (!array[count].isEmpty()) { // d=Integer.parseInt(array[count]); hasil += array [count]+ " "; } } return hasil; } // Fungsi untuk memecahkan array menjadi 2 bagian dan bagian dengan index genap public static String SplitGenap(String string){ // String string = "1 2 3 4 5 6 "; String array[] = string.split("\\s"); String hasil=""; int d=0; for (int count = 1; count < array.length; count +=2) { if (!array[count].isEmpty()) { // d=Integer.parseInt(array[count]); hasil += array [count]+ " "; } } return hasil; }

  A-25

  @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jFileChooser1 = new javax.swing.JFileChooser(); jLabel1 = new javax.swing.JLabel(); jSeparator1 = new javax.swing.JSeparator(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); jTextArea1 = new javax.swing.JTextArea(); jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); jButton4 = new javax.swing.JButton(); jButton5 = new javax.swing.JButton(); jTextField1 = new javax.swing.JTextField(); jLabel5 = new javax.swing.JLabel(); jButton6 = new javax.swing.JButton(); jLabel6 = new javax.swing.JLabel(); jTextField2 = new javax.swing.JTextField(); jLabel7 = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setBackground(new java.awt.Color(255, 51, 51)); setResizable(false); jLabel1.setFont(new java.awt.Font("Times New Roman", 0, 14)); jLabel1.setText("Fungsi Untuk Ekstraksi dan Dekripsi Pesan"); jLabel2.setFont(new java.awt.Font("Times New Roman", 0, 14)); jLabel2.setText("Gambar"); jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resource/label.png"))); // NOI18N jLabel4.setFont(new java.awt.Font("Times New Roman", 0, 14)); jLabel4.setText("Kunci"); jTextArea1.setColumns(20); jTextArea1.setRows(5); jScrollPane1.setViewportView(jTextArea1); jButton1.setText("Ekstraksi&Dekripsi"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jButton2.setText("Save"); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } });

  A-26

  jButton3.setText("Clear"); jButton3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt); } }); jButton4.setText("Menu Utama"); jButton4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton4ActionPerformed(evt); } }); jButton5.setText("Browse"); jButton5.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton5ActionPerformed(evt); } }); jLabel5.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N jLabel5.setText("Pesan"); jButton6.setText("Browse"); jButton6.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton6ActionPerformed(evt); } }); jLabel6.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N jLabel6.setText("Time"); jLabel7.setText("Mili Second"); private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) { PREFERRED_WIDTH = jLabel3.getWidth(); PREFERRED_HEIGHT = jLabel3.getHeight(); FileFilter filtering = new CustomFileFilter("File Citra Digital (BMP)", new String[] {"BMP"}); jFileChooser1.setAccessory(new LabelAccessory(jFileChooser1)); jFileChooser1.setFileFilter(filtering); int status = jFileChooser1.showOpenDialog(null); if (status == JFileChooser.APPROVE_OPTION) { File selectedFile = jFileChooser1.getSelectedFile(); filetype = jFileChooser1.getTypeDescription(selectedFile); filetype="bmp"; try { oriIMG = ImageIO.read(new File(selectedFile.getPath())); } catch (IOException ex) { Logger.getLogger(EnkripsidanHide.class.getName()).log(Level.SEVERE, null, ex); } // Tampilkan Citra Digital Ke panelGambar/gbrPanel ikon = new ImageIcon(oriIMG);

  A-27

  if (ikon.getIconWidth()>PREFERRED_WIDTH){ ikon = new ImageIcon(ikon.getImage().getScaledInstance(PREFERRED_WIDTH, -1, Image.SCALE_DEFAULT)); if (ikon.getIconHeight() > PREFERRED_HEIGHT){ ikon = new ImageIcon(ikon.getImage().getScaledInstance(-1, PREFERRED_HEIGHT, Image.SCALE_DEFAULT)); } } jLabel3.setIcon(ikon); } else if (status == JFileChooser.CANCEL_OPTION) { oriIMG = null; jLabel3.setIcon(null); filetype=""; } } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { FileWriter fw = null; try { String textString = jTextArea1.getText(); String nmfile = "plaintext.txt"; fw = new FileWriter(nmfile); BufferedWriter bw = new BufferedWriter(fw); String isiText=""; isiText = jTextArea1.getText(); bw.write(isiText); bw.newLine(); bw.write(String.valueOf(textString.length())); bw.close(); fw.close(); JOptionPane.showMessageDialog(rootPane, "plaintext telah tersimpan"); } catch (IOException ex) { Logger.getLogger(EkstraksidanDekripsi.class.getName()).log(Level.SEVERE, null, ex); } } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { if (oriIMG==null){ JOptionPane.showMessageDialog(null, "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=((DataBufferByte)oriIMG.getRaster().getDataBuffer()).getData(); byte [] s ; String d=""; String data=""; String hasil=""; String hasilakhir=""; String ahasil [] = new String[1000000];

  A-28