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));
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);
}
});
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);
} 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();
}
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;
}
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() {
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);
} });
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
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");
}
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) {
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;
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
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]) ;
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);
}
});
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");
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));
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);
} 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);
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
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) {
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;
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;
}
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=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; }
@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);
} });
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);
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];
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);
}
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());
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(); }
@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);
} 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
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();