• Tidak ada hasil yang ditemukan

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

N/A
N/A
Protected

Academic year: 2019

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

Copied!
35
0
0

Teks penuh

(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));

(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);

}

(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);

(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();

(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;

(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() {

(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);

} });

(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 bilanga 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

(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");

}

(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) {

(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;

(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

(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]) ;

(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);

}

(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");

(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));

(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);

(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);

(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

(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) {

(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;

(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;

(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);

(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; }

(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);

} });

(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);

(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];

(28)

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.toString(pixels[i]); jumlah +=temp +" ";

}

System.out.println(jumlah);

String array[] = jumlah.split("\\s"); String temp1="";

String temp2="";

for (int i = 0; i < array.length;i++ ) { if (!array[i].isEmpty()) {

int j=Integer.parseInt(array[i]); temp1=ByteToBit(j);

System.out.println(temp1); }

temp2 +=temp1;

}

panjang =Integer.parseInt(temp2, 2); System.out.println(temp2);

System.out.println("panjang pesan yang disisipkan : "+panjang); String temp3;

String bitsContainer=""; String ContainerData=""; for (int i=0;i<panjang;i ++){

bitsContainer=byteToBinary(pixels[i]); ContainerData +=bitsContainer;

}

int panjangContainer=ContainerData.length();

System.out.println("Panajng COntainer"+panjangContainer); System.out.println("Data Container :"+ContainerData); String Data="";

String DataAkhir="";

for (int i=7;i<ContainerData.length();i +=8){ Data +=ContainerData.charAt(i);

if (Data.length()==8){ String Sementara=Data;

int j=Integer.parseInt(Sementara, 2); char v=(char) j;

ahasil [lengthhasil]=String.valueOf(v); DataAkhir += ahasil [lengthhasil]; Data ="";

lengthhasil++; }

}

// proses dekripsi String string="";

string =jTextField1.getText(); String textString1 = "";

textString1 = DataAkhir;

HasilDekripsi=Dekripsi(textString1,string);

(29)

}

endTime = System.currentTimeMillis(); speedElgamal = endTime - startTime;

String time = String.valueOf(speedElgamal); jTextField2.setText(time);

jTextArea1.setText(HasilDekripsi);

}

private void jButton6ActionPerformed(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 = "";

//int index =0;

while ((st = br.readLine()) != null) { str= st;

// index++; }

br.close(); }

catch (IOException ex) {

Logger.getLogger(EkstraksidanDekripsi.class.getName()).log(Level.SEVERE, null, ex);

}

}

jTextField1.setText(str);

}

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { jLabel3.setIcon(null);

jTextField1.setText(""); jTextField2.setText(""); jTextArea1.setText(""); ImageIcon icon =new

ImageIcon("C:/Users/herman/Documents/NetBeansProjects/FinalElgamal&Lsb/src/ resource/label.png");

jLabel3.setIcon(icon);

}

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) { MenuUtama menu_utama=new MenuUtama();

menu_utama.show(); this.dispose();

}

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());

(30)

break; }

}

} catch (ClassNotFoundException ex) {

java.util.logging.Logger.getLogger(EkstraksidanDekripsi.class.getName()).lo g(java.util.logging.Level.SEVERE, null, ex);

} catch (InstantiationException ex) {

java.util.logging.Logger.getLogger(EkstraksidanDekripsi.class.getName()).lo g(java.util.logging.Level.SEVERE, null, ex);

} catch (IllegalAccessException ex) {

java.util.logging.Logger.getLogger(EkstraksidanDekripsi.class.getName()).lo g(java.util.logging.Level.SEVERE, null, ex);

} catch (javax.swing.UnsupportedLookAndFeelException ex) {

java.util.logging.Logger.getLogger(EkstraksidanDekripsi.class.getName()).lo g(java.util.logging.Level.SEVERE, null, ex);

}

//</editor-fold>

/* Create and display the form */

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new EkstraksidanDekripsi().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.JFileChooser jFileChooser1; 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.JScrollPane jScrollPane1; private javax.swing.JSeparator jSeparator1; private javax.swing.JTextArea jTextArea1; private javax.swing.JTextField jTextField1; private javax.swing.JTextField jTextField2;

// End of variables declaration }

//about.java

public class About extends javax.swing.JFrame {

/** Creates new form About */ public About() {

initComponents(); }

(31)

@SuppressWarnings("unchecked")

// <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() {

jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel();

javax.swing.JLabel appDescLabel = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel();

jLabel4 = new javax.swing.JLabel(); jButton1 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setResizable(false);

jLabel1.setIcon(new

javax.swing.ImageIcon(getClass().getResource("/resource/about.png"))) jLabel2.setFont(new java.awt.Font("Times New Roman", 1, 20)); jLabel2.setText("Program Enkripsi dan Steganografi");

appDescLabel.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N

appDescLabel.setText("<html>Aplikasi dapat Digunakan untuk Mengamankan Data atau informasi yang bersifat rahasia, karena Data atau informasi akan Dienkripsi kemudian disisipkan Ke dalam gambar.

<html>Algoritma yang digunakan untuk Enkripsi adalah Elgamal dan untuk Steganografi adalah Least Significant Bit");

appDescLabel.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING); jLabel3.setIcon(new

javax.swing.ImageIcon(getClass().getResource("/resource/logo fasilkom1.png"))); // NOI18N

jLabel4.setText("Program ini merupakan bagian dari Skripsi S-1 Ilmu Komputer USU");

jButton1.setText("Menu Utama");

jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt);

} });

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { MenuUtama menu_utama= new MenuUtama();

menu_utama.show(); this.dispose(); }

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(About.class.getName()).log(java.util.log ging.Level.SEVERE, null, ex);

} catch (InstantiationException ex) {

java.util.logging.Logger.getLogger(About.class.getName()).log(java.util.log ging.Level.SEVERE, null, ex);

(32)

} catch (IllegalAccessException ex) {

java.util.logging.Logger.getLogger(About.class.getName()).log(java.util.log ging.Level.SEVERE, null, ex);

} catch (javax.swing.UnsupportedLookAndFeelException ex) {

java.util.logging.Logger.getLogger(About.class.getName()).log(java.util.log ging.Level.SEVERE, null, ex);

}

//</editor-fold>

/* Create and display the form */

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new About().setVisible(true); }

}); }

// Variables declaration - do not modify private javax.swing.JButton jButton1;

private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3;

private javax.swing.JLabel jLabel4; }

//CaraPenggunaan.java

package finalelgamal.lsb;

public class CaraPenggunaan extends javax.swing.JFrame {

/** Creates new form CaraPenggunaan */ public CaraPenggunaan() {

initComponents(); }

@SuppressWarnings("unchecked")

// <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() {

jLabel1 = new javax.swing.JLabel();

jScrollPane1 = new javax.swing.JScrollPane(); jTextArea1 = new javax.swing.JTextArea(); jButton1 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jLabel1.setIcon(new

javax.swing.ImageIcon(getClass().getResource("/resource/guide.png"))) jTextArea1.setColumns(20);

jTextArea1.setEditable(false); jTextArea1.setRows(5);

jTextArea1.setText("Cara Penggunaan Program ini:\n1.Bangkitkan Kunci melalui Menu program->Bangkitkan \n Kunci. Dibagian kanan ada fungsi untuk \n membangkitkan sebuah bilangan prima yang\n akan kita gunakan untuk membangkitkan kunci.\n2.Setelah Kunci dibangkitkan maka akan \n dibangkitkan 2 kunci, yaitu publik dan privat,\n Kemudian save kunci tersebut.\n3.Untuk Meng-Enkripsi dan Menyisipkan Data atau\n Informasi ke Citra,Menu program->Enkripsi&Sisipkan\n Pesan. Browse Pesan yang

berekstensi txt,\n Kemudian Browse Kunci Publik yang telah \n Disimpan, selanjutnya Browse Gambar\n yang berkekstensi Bmp sebagai cover. Klik\n Buton Enkripsi&Sisipkan, Kemudian Save gambar\n yang telah disisipi Pesan.\n4.Untuk memperoleh Kembali Pesan Aslinya, Buka\n Menu program->Ekstrak&Dekripsi.Browse Gambar yang \n Telah Disisipi Pesan, Kemudian

(33)

Browse Kunci \n Privat, Selanjutnya klik Button Ekstrak&Dekripsi.\n Kemudian Save.");

jScrollPane1.setViewportView(jTextArea1);

jButton1.setText("Menu Utama");

jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt);

} });

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { MenuUtama menu_utama=new MenuUtama();

menu_utama.show(); this.dispose();

Referensi

Dokumen terkait

(1) Dalam hal Pemerintah Daerah belum dapat menyediakan rumah negara dan kendaraan dinas jabatan bagi Pimpinan DPRD sebagaimana dimaksud dalam pasal 21, kepada

9 Universitas Pattimura MP3EI MAGDALENA LATUIHAMALLO Strategi Pengembangan Produksi Abalon (Haliotis sp) Berbasis Sumberdaya Dalam Rangka Peningkatan Ekonomi Masyarakat Di

Guru memberikan penguatan terhadap hasil diskusi peserta didik dan kemudian menjelaskan kembali sifat- sifat keteladan Ashabul Kahfi berdasarkan buku teks

Sebagaimana dimaklumi bersama bahwa para pelaksana Penelitian Unggulan Strategis Nasional, Penelitian Strategis Nasional, Penelitian Hibah Kompetensi, Penelitian Kerjasama Luar

The product of the pozzolanic reaction (secondary C-S-H) can incorporate alkali metal ions into their structure and reduce the alkalinity of the pore solution. At the same time, the

Sampel penelitian terdiri dari 51 perusahaan yang terdaftar di Bursa Efek Indonesia (BEI) dan pengambilan sampel dilakukan dengan teknik purposive sampling .Variabel

Akibatnya hasil simulasi cenderung menghasilkan biaya pengiriman, biaya pemesanan dan biaya setup produksi yang lebih besar dari model matematis. Dari Tabel 3 juga terlihat

Bebas Visa bagi negara-negara anggota Organisasi Konferensi Islam (OKI) dan. keanggotaan Indonesia