Implementasi Algoritma Advanced Encryption Standard (AES) untuk Mengamankan File Gambar
LAMPIRAN A : LISTING PROGRAM
1. Form Home(FormImage.java)
/** To chanoe this license header, choose License Headers in Project Properties.
* To chanoe this template file, choose Tools | Templates * and open the template in the editor.
*/ packaoe cryptoimaoe; import java.awt.Toolkit; import java.awt.event.WindowEvent; import javax.swino.JFrame; /** *
* @author hyunsano */
public class FormImaoe extends javax.swino.JFrame { /**
* Creates new form FormImaoe */
//FormImaoe paoe; public FormImaoe() {
initComponents(); }
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* reoenerated by the Form Editor. */
@SuppressWarninos("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jLabel1 = new javax.swino.JLabel(); jLabel2 = new javax.swino.JLabel(); jLabel3 = new javax.swino.JLabel(); jLabel4 = new javax.swino.JLabel(); jLabel5 = new javax.swino.JLabel(); jLabel6 = new javax.swino.JLabel(); jLabel7 = new javax.swino.JLabel(); jLabel8 = new javax.swino.JLabel(); jLabel9 = new javax.swino.JLabel(); jLabel10 = new javax.swino.JLabel(); jLabel11 = new javax.swino.JLabel(); jLabel12 = new javax.swino.JLabel(); jMenuBar1 = new javax.swino.JMenuBar();
(2)
A-2
menuHome = new javax.swino.JMenu(); menuProo = new javax.swino.JMenu(); menuHelp = new javax.swino.JMenu();
setDefaultCloseOperation(javax.swino.WindowConstants.EXIT_ON_CL OSE);
setBackoround(new java.awt.Color(255, 250, 250)); setPreferredSize(new java.awt.Dimension(921, 386)); jLabel1.setIcon(new
javax.swino.ImaoeIcon("/home/hyunsano/NetBeansProjects/CryptoIm aoe/lo.pno")); // NOI18N
jLabel1.setText("jLabel1"); jLabel2.setIcon(new
javax.swino.ImaoeIcon("/home/hyunsano/NetBeansProjects/CryptoIm aoe/looo.pno")); // NOI18N
jLabel2.setVerifyInputWhenFocusTaroet(false);
jLabel3.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N
jLabel3.setText("SKRIPSI");
jLabel4.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N
jLabel4.setText("IMPLEMENTASI ALGORITMA ADVANCED ENCRYPTION STANDARD (AES) ");
jLabel5.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N
jLabel5.setText("UNTUK MENGAMANKAN FILE GAMBAR");
jLabel6.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N
jLabel6.setText("NURUL PUTRI YANTI");
jLabel7.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N
jLabel7.setText("111401076");
jLabel8.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N
jLabel8.setText("PROGRAM STUDI S1 ILMU KOMPUTER"); jLabel9.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N
jLabel9.setText("FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI");
jLabel10.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N
jLabel10.setText("UNIVERSITAS SUMATERA UTARA");
jLabel11.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N
(3)
jLabel12.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N
jLabel12.setText("2015"); jMenuBar1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jMenuBar1MouseClicked(evt); }
});
menuHome.setBorder(javax.swino.BorderFactory.createLineBorder(n ew java.awt.Color(245, 243, 243), 2));
menuHome.setText("Home");
menuHome.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) { menuHomeMouseClicked(evt); } }); jMenuBar1.add(menuHome); menuProo.setBorder(javax.swino.BorderFactory.createLineBorder(n ew java.awt.Color(245, 243, 243), 2));
menuProo.setText("Prooram");
menuProo.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) { menuProoMouseClicked(evt); } }); jMenuBar1.add(menuProo); menuHelp.setBorder(javax.swino.BorderFactory.createLineBorder(n ew java.awt.Color(245, 243, 243), 2));
menuHelp.setText("Help");
menuHelp.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) { menuHelpMouseClicked(evt); } }); jMenuBar1.add(menuHelp); setJMenuBar(jMenuBar1);
javax.swino.GroupLayout layout = new javax.swino.GroupLayout(oetContentPane());
oetContentPane().setLayout(layout); layout.setHorizontalGroup(
(4)
A-4
layout.createParallelGroup(javax.swino.GroupLayout.Alionment.LE ADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swino.G roupLayout.Alionment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax. swino.GroupLayout.Alionment.LEADING) .addGroup(layout.createSequentialGroup ().addGap(101, 101, 101)
.addGroup(layout.createParallelGro up(javax.swino.GroupLayout.Alionment.LEADING)
.addGroup(javax.swino.GroupLay out.Alionment.TRAILING, layout.createSequentialGroup()
.addComponent(jLabel4) .addGap(18, 18, 18))
.addGroup(javax.swino.GroupLay out.Alionment.TRAILING, layout.createSequentialGroup() .addGroup(layout.createPar allelGroup(javax.swino.GroupLayout.Alionment.TRAILING) .addComponent(jLabel8) .addComponent(jLabel5)) .addGap(126, 126, 126)))) .addGroup(javax.swino.GroupLayout.Alio nment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGro up(javax.swino.GroupLayout.Alionment.LEADING) .addGroup(javax.swino.GroupLay out.Alionment.TRAILING, layout.createSequentialGroup() .addComponent(jLabel3) .addGap(240, 240, 240)) .addGroup(javax.swino.GroupLay out.Alionment.TRAILING, layout.createSequentialGroup()
.addComponent(jLabel6) .addGap(196, 196, 196)) .addGroup(javax.swino.GroupLay out.Alionment.TRAILING, layout.createSequentialGroup()
.addComponent(jLabel7) .addGap(234, 234, 234))))) .addComponent(jLabel1,
javax.swino.GroupLayout.PREFERRED_SIZE, 172, javax.swino.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup() .addGap(257, 257, 257)
.addComponent(jLabel2))
.addGroup(layout.createSequentialGroup() .addGap(155, 155, 155)
.addGroup(layout.createParallelGroup(javax. swino.GroupLayout.Alionment.LEADING)
.addComponent(jLabel9)
.addGroup(layout.createSequentialGroup ()
.addGap(89, 89, 89)
.addComponent(jLabel10)))) .addGroup(layout.createSequentialGroup()
(5)
.addGroup(layout.createParallelGroup(javax. swino.GroupLayout.Alionment.LEADING)
.addGroup(layout.createSequentialGroup ()
.addGap(12, 12, 12) .addComponent(jLabel12)) .addComponent(jLabel11)))) .addContainerGap(javax.swino.GroupLayout.DEFAULT_S IZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swino.GroupLayout.Alionment.LE ADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swino.G roupLayout.Alionment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(33, 33, 33)
.addComponent(jLabel1, javax.swino.GroupLayout.PREFERRED_SIZE, 162, javax.swino.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup() .addGap(50, 50, 50)
.addComponent(jLabel4)
.addPreferredGap(javax.swino.LayoutStyle.C omponentPlacement.RELATED)
.addComponent(jLabel5) .addGap(18, 18, 18) .addComponent(jLabel3) .addGap(18, 18, 18) .addComponent(jLabel6)
.addPreferredGap(javax.swino.LayoutStyle.C omponentPlacement.RELATED)
.addComponent(jLabel7) .addGap(26, 26, 26) .addComponent(jLabel2))) .addGap(18, 18, 18)
.addComponent(jLabel8) .addPreferredGap(javax.swino.LayoutStyle.Component Placement.RELATED) .addComponent(jLabel9) .addPreferredGap(javax.swino.LayoutStyle.Component Placement.RELATED) .addComponent(jLabel10) .addPreferredGap(javax.swino.LayoutStyle.Component Placement.RELATED) .addComponent(jLabel11) .addPreferredGap(javax.swino.LayoutStyle.Component Placement.RELATED) .addComponent(jLabel12) .addContainerGap(javax.swino.GroupLayout.DEFAULT_S IZE, Short.MAX_VALUE)) ); pack(); }// </editor-fold>
(6)
A-6
private void jMenuBar1MouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handlino code here: //dispose();
}
private void menuHomeMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handlino code here: }
private void menuProoMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handlino code here: dispose();
Framee paoe2 = new Framee(); paoe2.setVisible(true);
paoe2.setLocationRelativeTo(null); }
private void menuHelpMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handlino code here: dispose();
HelpFrame paoe3 = new HelpFrame(); paoe3.setVisible(true);
paoe3.setLocationRelativeTo(null); }
/**
* @param aros the command line arouments */
public static void main(Strino aros[]) { /* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel settino code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see
http://download.oracle.com/javase/tutorial/uiswino/lookandfeel/ plaf.html
*/ try {
for (javax.swino.UIManaoer.LookAndFeelInfo info : javax.swino.UIManaoer.oetInstalledLookAndFeels()) {
if ("Nimbus".equals(info.oetName())) {
javax.swino.UIManaoer.setLookAndFeel(info.oetClassName()); break;
} }
} catch (ClassNotFoundException ex) {
java.util.loooino.Loooer.oetLoooer(FormImaoe.class.oetName()).l oo(java.util.loooino.Level.SEVERE, null, ex);
(7)
java.util.loooino.Loooer.oetLoooer(FormImaoe.class.oetName()).l oo(java.util.loooino.Level.SEVERE, null, ex);
} catch (IlleoalAccessException ex) {
java.util.loooino.Loooer.oetLoooer(FormImaoe.class.oetName()).l oo(java.util.loooino.Level.SEVERE, null, ex);
} catch (javax.swino.UnsupportedLookAndFeelException ex) { java.util.loooino.Loooer.oetLoooer(FormImaoe.class.oetName()).l oo(java.util.loooino.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
FormImaoe f = new FormImaoe(); f.setVisible(true); f.setSize(710, 700); f.setLocationRelativeTo(null); } }); }
// Variables declaration - do not modify private javax.swino.JLabel jLabel1; private javax.swino.JLabel jLabel10; private javax.swino.JLabel jLabel11; private javax.swino.JLabel jLabel12; private javax.swino.JLabel jLabel2; private javax.swino.JLabel jLabel3; private javax.swino.JLabel jLabel4; private javax.swino.JLabel jLabel5; private javax.swino.JLabel jLabel6; private javax.swino.JLabel jLabel7; private javax.swino.JLabel jLabel8; private javax.swino.JLabel jLabel9; private javax.swino.JMenuBar jMenuBar1; private javax.swino.JMenu menuHelp; private javax.swino.JMenu menuHome; private javax.swino.JMenu menuProo; // End of variables declaration }
2. Form Program (Framee.java)
/** To chanoe this license header, choose License Headers in Project Properties.
* To chanoe this template file, choose Tools | Templates * and open the template in the editor.
*/
packaoe cryptoimaoe;
import java.awt.imaoe.BufferedImaoe;
(8)
A-8
import java.util.Random; import javax.swino.*; import java.io.*; import java.security.Key; import java.security.SecureRandom; import java.text.DecimalFormat; import java.text.NumberFormat; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import javax.imaoeio.ImaoeIO; /** ** @author hyunsano */
public class Framee extends javax.swino.JFrame { /**
* Creates new form Framee */
public Framee() { initComponents(); }
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* reoenerated by the Form Editor. */
@SuppressWarninos("unchecked") JLabel jlab = new JLabel (); JLabel jEnc = new JLabel (); JLabel jDec = new JLabel ();
BufferedImaoe imaoe,encImaoe,decImaoe,normalImaoe,NormalImaoe; int width;
int heioht;
public Strino dataAwal="",dataAkhir="";
byte[] encVal,decVal,val,Pix,tempEnc,tempDec; byte ImaoePix[],pixels[],acak[];
int A[] , tempKey; byte RandomNumber[] ; File out,output;
Strino namaFile,set,namEnc,namDec,K; int setNum = 0;
SecureRandom random ;
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
ButFile = new javax.swino.JButton(); Pane = new javax.swino.JScrollPane(); jLabel1 = new javax.swino.JLabel(); PANEE = new javax.swino.JScrollPane(); PANED = new javax.swino.JScrollPane(); ButEnc = new javax.swino.JButton();
(9)
ButDec = new javax.swino.JButton(); jLabel2 = new javax.swino.JLabel(); jLabel3 = new javax.swino.JLabel(); jLabel4 = new javax.swino.JLabel(); valKey = new javax.swino.JTextField();
jDesktopPane1 = new javax.swino.JDesktopPane(); encTime = new javax.swino.JTextField();
decTime = new javax.swino.JTextField(); jLabel5 = new javax.swino.JLabel(); jLabel6 = new javax.swino.JLabel(); jMenuBar1 = new javax.swino.JMenuBar(); menu1 = new javax.swino.JMenu();
menu2 = new javax.swino.JMenu(); menu3 = new javax.swino.JMenu();
setDefaultCloseOperation(javax.swino.WindowConstants.EXIT_ON_CL OSE);
setBackoround(new java.awt.Color(248, 244, 244)); setForeoround(java.awt.Color.white);
ButFile.setText("BROWSE"); ButFile.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ButFileActionPerformed(evt); }
});
jLabel1.setBackoround(new java.awt.Color(225, 88, 88)); jLabel1.setForeoround(new java.awt.Color(33, 38, 208)); jLabel1.setText("NORMAL IMAGE");
ButEnc.setText("ENCRYPT"); ButEnc.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) { ButEncActionPerformed(evt); } }); ButDec.setText("DECRYPT"); ButDec.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ButDecActionPerformed(evt); }
});
jLabel2.setForeoround(new java.awt.Color(13, 45, 238)); jLabel2.setText("ENCRYPT IMAGE");
jLabel3.setForeoround(new java.awt.Color(32, 13, 223)); jLabel3.setText("DECRYPT IMAGE");
(10)
A-10
jLabel4.setText("KEY LENGTH :");
jLabel5.setBackoround(new java.awt.Color(32, 76, 248)); jLabel5.setForeoround(new java.awt.Color(30, 55, 222)); jLabel5.setText("ENCRYPT TIME :");
jLabel6.setForeoround(new java.awt.Color(23, 19, 248)); jLabel6.setText("DECRYPT TIME");
menu1.setText("Home");
menu1.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { menu1MouseClicked(evt); } }); jMenuBar1.add(menu1); menu2.setText("Prooram");
menu2.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { menu2MouseClicked(evt); } }); jMenuBar1.add(menu2); menu3.setText("Help");
menu3.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { menu3MouseClicked(evt); } }); jMenuBar1.add(menu3); setJMenuBar(jMenuBar1);
javax.swino.GroupLayout layout = new javax.swino.GroupLayout(oetContentPane()); oetContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swino.GroupLayout.Alionment.LE ADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swino.G roupLayout.Alionment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(63, 63, 63)
.addComponent(ButFile, javax.swino.GroupLayout.PREFERRED_SIZE, 88, javax.swino.GroupLayout.PREFERRED_SIZE)
.addGap(162, 162, 162) .addComponent(ButEnc, javax.swino.GroupLayout.PREFERRED_SIZE, 88, javax.swino.GroupLayout.PREFERRED_SIZE)
(11)
.addComponent(ButDec, javax.swino.GroupLayout.PREFERRED_SIZE, 88, javax.swino.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup() .addGap(68, 68, 68)
.addComponent(jLabel1) .addGap(153, 153, 153) .addComponent(jLabel2, javax.swino.GroupLayout.PREFERRED_SIZE, 111, javax.swino.GroupLayout.PREFERRED_SIZE)
.addGap(132, 132, 132) .addComponent(jLabel3, javax.swino.GroupLayout.PREFERRED_SIZE, 117, javax.swino.GroupLayout.PREFERRED_SIZE))) .addContainerGap(javax.swino.GroupLayout.DEFAULT_S IZE, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(Pane, javax.swino.GroupLayout.PREFERRED_SIZE, 210, javax.swino.GroupLayout.PREFERRED_SIZE)
.addGap(35, 35, 35) .addComponent(PANEE,
javax.swino.GroupLayout.PREFERRED_SIZE, 210, javax.swino.GroupLayout.PREFERRED_SIZE)
.addGap(37, 37, 37) .addComponent(PANED, javax.swino.GroupLayout.PREFERRED_SIZE, 210, javax.swino.GroupLayout.PREFERRED_SIZE) .addGroup(layout.createParallelGroup(javax.swino.G roupLayout.Alionment.LEADING) .addGroup(layout.createSequentialGroup() .addPreferredGap(javax.swino.LayoutStyle.C omponentPlacement.RELATED, javax.swino.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jDesktopPane1, javax.swino.GroupLayout.PREFERRED_SIZE, javax.swino.GroupLayout.DEFAULT_SIZE, javax.swino.GroupLayout.PREFERRED_SIZE)
.addGap(31, 31, 31))
.addGroup(layout.createSequentialGroup()
.addPreferredGap(javax.swino.LayoutStyle.C omponentPlacement.RELATED, 15, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax. swino.GroupLayout.Alionment.LEADING) .addComponent(jLabel6) .addGroup(layout.createParallelGroup(j avax.swino.GroupLayout.Alionment.TRAILING) .addComponent(decTime, javax.swino.GroupLayout.PREFERRED_SIZE, 118, javax.swino.GroupLayout.PREFERRED_SIZE) .addComponent(encTime, javax.swino.GroupLayout.PREFERRED_SIZE, 118, javax.swino.GroupLayout.PREFERRED_SIZE)) .addComponent(jLabel5) .addComponent(valKey, javax.swino.GroupLayout.PREFERRED_SIZE, 114, javax.swino.GroupLayout.PREFERRED_SIZE)
(12)
A-12
.addComponent(jLabel4, javax.swino.GroupLayout.PREFERRED_SIZE, 94, javax.swino.GroupLayout.PREFERRED_SIZE))
.addGap(0, 45, Short.MAX_VALUE)))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swino.GroupLayout.Alionment.LE ADING) .addGroup(javax.swino.GroupLayout.Alionment.TRAILING, layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swino.G roupLayout.Alionment.TRAILING) .addGroup(layout.createSequentialGroup() .addGap(77, 77, 77)
.addComponent(jLabel4, javax.swino.GroupLayout.PREFERRED_SIZE, 27, javax.swino.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swino.LayoutStyle.C omponentPlacement.RELATED) .addComponent(valKey, javax.swino.GroupLayout.PREFERRED_SIZE, javax.swino.GroupLayout.DEFAULT_SIZE, javax.swino.GroupLayout.PREFERRED_SIZE)
.addGap(34, 34, 34)
.addGroup(layout.createParallelGroup(javax. swino.GroupLayout.Alionment.LEADING) .addComponent(jDesktopPane1, javax.swino.GroupLayout.PREFERRED_SIZE, javax.swino.GroupLayout.DEFAULT_SIZE, javax.swino.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel5)) .addGap(17, 17, 17)
.addComponent(encTime, javax.swino.GroupLayout.PREFERRED_SIZE, javax.swino.GroupLayout.DEFAULT_SIZE, javax.swino.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swino.LayoutStyle.C omponentPlacement.RELATED, javax.swino.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel6) .addGap(30, 30, 30) .addComponent(decTime, javax.swino.GroupLayout.PREFERRED_SIZE, 25, javax.swino.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() .addContainerGap(javax.swino.GroupLayout.D EFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax. swino.GroupLayout.Alionment.BASELINE) .addComponent(jLabel2, javax.swino.GroupLayout.PREFERRED_SIZE, 15, javax.swino.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel3) .addComponent(jLabel1)) .addPreferredGap(javax.swino.LayoutStyle.C omponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax. swino.GroupLayout.Alionment.LEADING)
(13)
.addComponent(Pane, javax.swino.GroupLayout.PREFERRED_SIZE, 300, javax.swino.GroupLayout.PREFERRED_SIZE) .addComponent(PANEE, javax.swino.GroupLayout.PREFERRED_SIZE, 300, javax.swino.GroupLayout.PREFERRED_SIZE) .addComponent(PANED, javax.swino.GroupLayout.PREFERRED_SIZE, 300, javax.swino.GroupLayout.PREFERRED_SIZE)))) .addPreferredGap(javax.swino.LayoutStyle.Component Placement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swino.G roupLayout.Alionment.LEADING, false) .addGroup(layout.createParallelGroup(javax.swi no.GroupLayout.Alionment.BASELINE) .addComponent(ButEnc) .addComponent(ButDec)) .addComponent(ButFile, javax.swino.GroupLayout.DEFAULT_SIZE, javax.swino.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); pack(); }// </editor-fold>
private void ButFileActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handlino code here: //try{
if(valKey.oetText().equals("128") || valKey.oetText().equals("192") ||
valKey.oetText().equals("256")){
//if((tempKey/8) == 16 || (tempKey/8) == 24 || (tempKey/8) == 32){
JFileChooser s = new JFileChooser (); if (s.showOpenDialoo(ButFile) == JFileChooser.APPROVE_OPTION){
File f = s.oetSelectedFile(); try{
imaoe = ImaoeIO.read(f); namaFile = f.oetName(); } catch(Exception e){ } jlab.setIcon(new ImaoeIcon(f.toStrino())); jlab.setHorizontalAlionment(JLabel.CENTER); Pane.oetViewport().add(jlab); }
//catch(Exception e) {
//JOptionPane.showMessaoeDialoo(null,"Key doesn't Match,Please Write 128 ,192 or 256");
(14)
A-14
}
//NormalImaoe = ImaoeIO.read(f); else{
JOptionPane.showMessaoeDialoo(null,"Key doesn't Match,Please Write 128 ,192 or 256");
} }
public void oenerateKey(){ K = valKey.oetText();
tempKey = Inteoer.parseInt(K); this.random = new SecureRandom(); this.acak = new byte[tempKey/8]; random.nextBytes(acak);
}
public void oetPixel() { oenerateKey();
try{
width = 0; heioht = 0;
set = Inteoer.toStrino(setNum); setNum++;
//File input = new File("T.jpo"); //imaoe = ImaoeIO.read(input); width += imaoe.oetWidth(); heioht += imaoe.oetHeioht(); //System.out.println(width); //System.out.println(heioht); int index = width*heioht; int count = 0;
this.pixels = new byte[width*heioht]; this.A = new int[width*heioht];
this.ImaoePix = new byte [width*heioht]; //A = null;
//ImaoePix = null; //pixels = null;
//byte[] DataImaoe = new byte[width*heioht]; try{
for (int i=0 ; i<width; i++){ for (int j=0; j<heioht; j++){
//A[count]=0;
A[count]=((imaoe.oetRGB(i, j)) / 256); //pixels[count] = 0;
pixels[count] =(byte) imaoe.oetRGB(i, j); //ImaoePix[count] = 0;
ImaoePix[count] = pixels[count]; //System.out.println(A[count]+" = "+ImaoePix[count]);
//dataAwal += Inteoer.toStrino(pixels[count]);
(15)
} } }
catch(Exception e){
System.out.println("For Salah"); System.out.println(e.oetMessaoe()); }
System.out.println("Penoambilan Nilai Pixel Berhasil Alhamdulillah");
}
catch (Exception e){
System.out.println("Ini Salah"); System.out.println(e.oetMessaoe()); }
}
public void encrypt () throws Exception{ oetPixel();
//encVal = {(byte) 0}; namEnc = "Enc-"+set+".jpo"; try{
lono start = System.currentTimeMillis(); byte k[]=acak;
Strino aloo = "AES";
output = new File (namEnc); output.createNewFile();
//File normal = new File ("Normal.jpo"); encImaoe = new BufferedImaoe (width, heioht,TYPE_INT_RGB);
normalImaoe = new BufferedImaoe (width, heioht,TYPE_INT_RGB);
Key key = new SecretKeySpec (k, aloo); Cipher c = Cipher.oetInstance(aloo); c.init(Cipher.ENCRYPT_MODE, key); int index =0;
try{
//val = Pix;
encVal = c.doFinal(ImaoePix);
System.out.println("Encval did work"); }
catch(Exception q){
System.out.println(q.oetMessaoe());
System.out.println("Encval didi not work"); }
try{
for (int x = 0; x<width; x++){ for (int y=0 ; y<heioht ; y++){
(16)
A-16
//System.out.println("Encval ke-"+index+" = "+encVal[index]);
//normalImaoe.setRGB(x, y, ImaoePix[index]); //tempEnc[index] = 0;
//tempEnc[index] += encVal[index]; //encVal[index] = 0;
encImaoe.setRGB(x, y, encVal[index]); index++; } } System.out.println("Pass"); } catch(Exception e){ System.out.println(e.oetMessaoe());
System.out.println("Sepertinya For Salah"); }
try{
ImaoeIO.write(encImaoe, "JPG", output); lono end = System.currentTimeMillis();
NumberFormat time = new DecimalFormat("#0.00000"); lono t = end-start;
encTime.setText(Strino.valueOf(t/1000d)+" second"); System.out.print("Execution time is
"+time.format((end-start)/1000d)+"seconds");
//JOptionPane.showMessaoeDialoo(null,"Enkripsi Berhasil ");
System.out.println("Gambar Enkripsi Selesai"); }
catch (Exception e){
System.out.println(e.oetMessaoe());
System.out.println("Gambar Enkripsi tidak bisa Dicetak");
} /*try{
ImaoeIO.write(normalImaoe, "JPG", normal); System.out.println("Gambar Normal Selesai"); }
catch (Exception e){
System.out.println(e.oetMessaoe());
System.out.println("Gambar Normal Tidak Bisa Dicetak");
}*/ }
catch (Exception e){
System.out.println(e.oetMessaoe());
System.out.println("Enkripsi tidak bisa"); }
}
public void decrypt() throws Exception { namDec = "Dec-"+set+".jpo";
(17)
lono first = System.currentTimeMillis(); byte k[]=acak;
int DecVal[] = new int[width*heioht]; Strino aloo = "AES";
decImaoe = new BufferedImaoe (width, heioht,TYPE_INT_RGB);
Key key = new SecretKeySpec (k, aloo); Cipher c = Cipher.oetInstance(aloo); c.init(Cipher.DECRYPT_MODE, key); int in =0;
decVal = c.doFinal(encVal); for (int x = 0; x<width; x++){
for (int y=0 ; y<heioht ; y++){ //System.out.println(decVal[in]); //Strino tex;
// tex = new Strino(decVal[in]); //dataAkhir += tex;
//tempDec[in] = 0;
//tempDec[in] += decVal[in]; //DecVal[in] += 0;
DecVal[in] = ((A[in]*256) + decVal[in]); decImaoe.setRGB(x, y, DecVal[in]);
in++; } }
out = new File(namDec); out.createNewFile();
ImaoeIO.write(decImaoe, "JPG", out); lono last = System.currentTimeMillis();
NumberFormat time = new DecimalFormat("#0.00000"); lono ti = last-first;
decTime.setText(Strino.valueOf(ti/1000d)+" second"); System.out.print("Execution time is
"+time.format((last-first)/1000d)+"seconds");
System.out.println("Gambar Dekripsi Selesai"); }
catch(Exception ex){
System.out.println(ex.oetMessaoe());
System.out.println("Gambar Dekripsi tidak bisa Dicetak");
} }
private void ButEncActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handlino code here: try{
encrypt(); }
catch(Exception e){ }
(18)
A-18
jEnc.setIcon(new ImaoeIcon(output.toStrino())); jEnc.setHorizontalAlionment(JLabel.CENTER); PANEE.oetViewport().add(jEnc);
}
private void ButDecActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handlino code here: try{ decrypt(); } catch(Exception e){ } jDec.setIcon(new ImaoeIcon(out.toStrino())); jDec.setHorizontalAlionment(JLabel.CENTER); PANED.oetViewport().add(jDec); }
private void menu1MouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handlino code here: dispose();
FormImaoe HomePaoe = new FormImaoe(); HomePaoe.setVisible(true);
HomePaoe.setSize(710, 700);
HomePaoe.setLocationRelativeTo(null); setNum = 0;
//FormImaoe HomePaoe = new FormImaoe(); //HomePaoe.show();
}
private void menu2MouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handlino code here: //Framee prooramPaoe = new Framee(); //prooramPaoe.show();
}
private void menu3MouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handlino code here: dispose();
HelpFrame helpPaoe = new HelpFrame(); helpPaoe.setVisible(true);
helpPaoe.setLocationRelativeTo(null); setNum = 0;
} /**
* @param aros the command line arouments */
public static void main(Strino aros[]) { /* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel settino code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
(19)
* For details see
http://download.oracle.com/javase/tutorial/uiswino/lookandfeel/ plaf.html
*/ try {
for (javax.swino.UIManaoer.LookAndFeelInfo info : javax.swino.UIManaoer.oetInstalledLookAndFeels()) {
if ("Nimbus".equals(info.oetName())) {
javax.swino.UIManaoer.setLookAndFeel(info.oetClassName()); break;
} }
} catch (ClassNotFoundException ex) {
java.util.loooino.Loooer.oetLoooer(Framee.class.oetName()).loo( java.util.loooino.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.loooino.Loooer.oetLoooer(Framee.class.oetName()).loo( java.util.loooino.Level.SEVERE, null, ex);
} catch (IlleoalAccessException ex) {
java.util.loooino.Loooer.oetLoooer(Framee.class.oetName()).loo( java.util.loooino.Level.SEVERE, null, ex);
} catch (javax.swino.UnsupportedLookAndFeelException ex) { java.util.loooino.Loooer.oetLoooer(Framee.class.oetName()).loo( java.util.loooino.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
new Framee().setVisible(true); }
}); }
// Variables declaration - do not modify private javax.swino.JButton ButDec; private javax.swino.JButton ButEnc; private javax.swino.JButton ButFile; public javax.swino.JScrollPane PANED; public javax.swino.JScrollPane PANEE; public javax.swino.JScrollPane Pane; private javax.swino.JTextField decTime; private javax.swino.JTextField encTime;
private javax.swino.JDesktopPane jDesktopPane1; private javax.swino.JLabel jLabel1;
private javax.swino.JLabel jLabel2; private javax.swino.JLabel jLabel3; private javax.swino.JLabel jLabel4; private javax.swino.JLabel jLabel5; private javax.swino.JLabel jLabel6; private javax.swino.JMenuBar jMenuBar1; private javax.swino.JMenu menu1;
(20)
A-20
private javax.swino.JMenu menu3;
private javax.swino.JTextField valKey; // End of variables declaration
}
3. Form Help (HelpFrame.java)
/** To chanoe this license header, choose License Headers in Project Properties.
* To chanoe this template file, choose Tools | Templates * and open the template in the editor.
*/
packaoe cryptoimaoe; /**
*
* @author hyunsano */
public class HelpFrame extends javax.swino.JFrame { /**
* Creates new form HelpFrame */
public HelpFrame() { initComponents(); }
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* reoenerated by the Form Editor. */
@SuppressWarninos("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swino.JPanel(); jLabel1 = new javax.swino.JLabel();
jTextField1 = new javax.swino.JTextField(); jTextField2 = new javax.swino.JTextField(); jTextField3 = new javax.swino.JTextField(); jTextField4 = new javax.swino.JTextField(); jTextField5 = new javax.swino.JTextField(); jTextField6 = new javax.swino.JTextField();
(21)
jTextField7 = new javax.swino.JTextField(); jLabel2 = new javax.swino.JLabel();
jButton1 = new javax.swino.JButton(); jButton2 = new javax.swino.JButton();
jTextField9 = new javax.swino.JTextField(); jTextField10 = new javax.swino.JTextField(); jLabel3 = new javax.swino.JLabel();
jScrollPane2 = new javax.swino.JScrollPane(); jTextArea1 = new javax.swino.JTextArea(); jButton3 = new javax.swino.JButton();
jTextField11 = new javax.swino.JTextField(); jMenuBar1 = new javax.swino.JMenuBar(); Home = new javax.swino.JMenu();
Prooram = new javax.swino.JMenu(); Help = new javax.swino.JMenu();
setDefaultCloseOperation(javax.swino.WindowConstants.EXIT_ON _CLOSE);
jLabel1.setBackoround(new java.awt.Color(255, 245, 245));
jLabel1.setFont(new java.awt.Font("Courier 10 Pitch", 0, 14)); // NOI18N
jLabel1.setText("PROSEDUR PENGGUNAAN HALAMAN PROGRAM :");
jLabel1.setBorder(javax.swino.BorderFactory.createLineBorder (new java.awt.Color(108, 120, 193), 3));
jTextField1.setText("1. Klik Tombol Browse, Lalu Pilih Gambar yano akan Dienkripsi ");
jTextField2.setText("2. Gambar yano dipilih akan tampil di layar");
jTextField3.setText("3. Ketikkan besar kunci yano akan diounakan");
jTextField4.setText("4. Klik Tombol Encrypt untuk menoubah oambar menjadi sandi oambar");
jTextField5.setText("5. Sandi oambar hasil enkripsi akan muncul di layar ");
jTextField6.setText("6. Klik Tombol Decrypt untuk menoubah sandi oambar menjadi oambar asli");
jTextField7.setText("7. Gambar asli hasil dekripsi akan muncul dilayar");
(22)
A-22
jTextField7.addActionListener(new java.awt.event.ActionListener() {
public void
actionPerformed(java.awt.event.ActionEvent evt) { jTextField7ActionPerformed(evt); }
});
jLabel2.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
jLabel2.setText("PROSEDUR PENGGUNAAN HALAMAN UTAMA :");
jLabel2.setBorder(javax.swino.BorderFactory.createLineBorder (new java.awt.Color(108, 120, 193), 3));
jButton1.setText("PROGRAM"); jButton2.setText("HELP");
jButton2.setPreferredSize(new java.awt.Dimension(72, 29));
jTextField9.setText("Menu untuk menampilkan halaman prooram");
jTextField10.setText("Menu untuk menampilkan halaman help");
jLabel3.setFont(new java.awt.Font("Courier New", 0, 14)); // NOI18N
jLabel3.setText("PROSEDUR PENGGUNAAN HALAMAN HELP :");
jLabel3.setBorder(javax.swino.BorderFactory.createLineBorder (new java.awt.Color(108, 120, 193), 3));
jTextArea1.setColumns(20); jTextArea1.setRows(5);
jTextArea1.setText("Halaman Ini menampilkan prosedur penoounaan setiap halaman yano terdapat\ndi dalam prooram ini, yaitu Home, Prooram dan Help.\n");
jScrollPane2.setViewportView(jTextArea1); jButton3.setText("HOME");
jButton3.setPreferredSize(new java.awt.Dimension(72, 29));
jTextField11.setText("Menu untuk menampilkan halaman home");
(23)
javax.swino.GroupLayout jPanel1Layout = new javax.swino.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swino.GroupLayout.Al ionment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel2)) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(40, 40, 40)
.addGroup(jPanel1Layout.createParallelGroup( javax.swino.GroupLayout.Alionment.LEADING, false)
.addComponent(jButton3,
javax.swino.GroupLayout.DEFAULT_SIZE, 92, Short.MAX_VALUE) .addComponent(jButton1, javax.swino.GroupLayout.DEFAULT_SIZE, javax.swino.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jButton2, javax.swino.GroupLayout.DEFAULT_SIZE, javax.swino.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup( javax.swino.GroupLayout.Alionment.LEADING) .addComponent(jTextField11, javax.swino.GroupLayout.PREFERRED_SIZE, 297, javax.swino.GroupLayout.PREFERRED_SIZE) .addGroup(jPanel1Layout.createParallelGr oup(javax.swino.GroupLayout.Alionment.LEADING, false) .addComponent(jTextField9) .addComponent(jTextField10, javax.swino.GroupLayout.PREFERRED_SIZE, 297, javax.swino.GroupLayout.PREFERRED_SIZE)))) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup( javax.swino.GroupLayout.Alionment.LEADING) .addComponent(jScrollPane2) .addGroup(jPanel1Layout.createSequential Group() .addGroup(jPanel1Layout.createParall elGroup(javax.swino.GroupLayout.Alionment.LEADING) .addGroup(jPanel1Layout.createPa rallelGroup(javax.swino.GroupLayout.Alionment.TRAILING, false) .addComponent(jTextField6) .addComponent(jTextField1, javax.swino.GroupLayout.Alionment.LEADING) .addComponent(jTextField2, javax.swino.GroupLayout.Alionment.LEADING)
(24)
A-24
.addComponent(jTextField3, javax.swino.GroupLayout.Alionment.LEADING) .addComponent(jTextField4) .addComponent(jLabel1, javax.swino.GroupLayout.Alionment.LEADING) .addComponent(jTextField5) .addComponent(jTextField7, javax.swino.GroupLayout.PREFERRED_SIZE, 478, javax.swino.GroupLayout.PREFERRED_SIZE)) .addComponent(jLabel3)) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swino.GroupLayout.Al ionment.LEADING) .addGroup(javax.swino.GroupLayout.Alionment.TRAI LING, jPanel1Layout.createSequentialGroup().addGap(49, 49, 49) .addComponent(jLabel2) .addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup( javax.swino.GroupLayout.Alionment.LEADING, false) .addComponent(jButton3, javax.swino.GroupLayout.DEFAULT_SIZE, javax.swino.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jTextField11)) .addPreferredGap(javax.swino.LayoutStyle.Com ponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup( javax.swino.GroupLayout.Alionment.BASELINE) .addComponent(jButton1) .addComponent(jTextField9, javax.swino.GroupLayout.PREFERRED_SIZE, javax.swino.GroupLayout.DEFAULT_SIZE, javax.swino.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swino.LayoutStyle.Com ponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup( javax.swino.GroupLayout.Alionment.BASELINE) .addComponent(jButton2, javax.swino.GroupLayout.PREFERRED_SIZE, javax.swino.GroupLayout.DEFAULT_SIZE, javax.swino.GroupLayout.PREFERRED_SIZE) .addComponent(jTextField10, javax.swino.GroupLayout.PREFERRED_SIZE, javax.swino.GroupLayout.DEFAULT_SIZE, javax.swino.GroupLayout.PREFERRED_SIZE))
.addGap(57, 57, 57) .addComponent(jLabel1)
(25)
.addPreferredGap(javax.swino.LayoutStyle.Com ponentPlacement.RELATED) .addComponent(jTextField1, javax.swino.GroupLayout.PREFERRED_SIZE, 25, javax.swino.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swino.LayoutStyle.Com ponentPlacement.RELATED) .addComponent(jTextField2, javax.swino.GroupLayout.PREFERRED_SIZE, 25, javax.swino.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swino.LayoutStyle.Com ponentPlacement.RELATED) .addComponent(jTextField3, javax.swino.GroupLayout.PREFERRED_SIZE, 25, javax.swino.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swino.LayoutStyle.Com ponentPlacement.RELATED) .addComponent(jTextField4, javax.swino.GroupLayout.PREFERRED_SIZE, 25, javax.swino.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swino.LayoutStyle.Com ponentPlacement.RELATED) .addComponent(jTextField5, javax.swino.GroupLayout.PREFERRED_SIZE, javax.swino.GroupLayout.DEFAULT_SIZE, javax.swino.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swino.LayoutStyle.Com ponentPlacement.RELATED) .addComponent(jTextField6, javax.swino.GroupLayout.PREFERRED_SIZE, javax.swino.GroupLayout.DEFAULT_SIZE, javax.swino.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swino.LayoutStyle.Com ponentPlacement.RELATED) .addComponent(jTextField7, javax.swino.GroupLayout.PREFERRED_SIZE, javax.swino.GroupLayout.DEFAULT_SIZE, javax.swino.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swino.LayoutStyle.Com ponentPlacement.RELATED, 43, Short.MAX_VALUE)
.addComponent(jLabel3) .addPreferredGap(javax.swino.LayoutStyle.Com ponentPlacement.UNRELATED) .addComponent(jScrollPane2, javax.swino.GroupLayout.PREFERRED_SIZE, javax.swino.GroupLayout.DEFAULT_SIZE, javax.swino.GroupLayout.PREFERRED_SIZE)
.addGap(22, 22, 22)) );
(26)
A-26
Home.addMouseListener(new java.awt.event.MouseAdapter() {
public void
mouseClicked(java.awt.event.MouseEvent evt) { HomeMouseClicked(evt);
} });
jMenuBar1.add(Home);
Prooram.setText("Prooram"); Prooram.addMouseListener(new java.awt.event.MouseAdapter() {
public void
mouseClicked(java.awt.event.MouseEvent evt) { ProoramMouseClicked(evt); }
});
jMenuBar1.add(Prooram); Help.setText("Help"); Help.addMouseListener(new java.awt.event.MouseAdapter() {
public void
mouseClicked(java.awt.event.MouseEvent evt) { HelpMouseClicked(evt);
} });
jMenuBar1.add(Help); setJMenuBar(jMenuBar1);
javax.swino.GroupLayout layout = new javax.swino.GroupLayout(oetContentPane());
oetContentPane().setLayout(layout); layout.setHorizontalGroup(
layout.createParallelGroup(javax.swino.GroupLayout.Alionment. LEADING)
.addGroup(layout.createSequentialGroup() .addComponent(jPanel1,
javax.swino.GroupLayout.PREFERRED_SIZE, javax.swino.GroupLayout.DEFAULT_SIZE, javax.swino.GroupLayout.PREFERRED_SIZE)
.addGap(0, 44, Short.MAX_VALUE)) );
layout.setVerticalGroup(
layout.createParallelGroup(javax.swino.GroupLayout.Alionment. LEADING)
.addGroup(layout.createSequentialGroup() .addContainerGap()
(27)
.addComponent(jPanel1, javax.swino.GroupLayout.DEFAULT_SIZE,
javax.swino.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap())
); pack();
}// </editor-fold> private void
jTextField7ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handlino code here:
}
private void HomeMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handlino code here: dispose();
FormImaoe Home = new FormImaoe(); Home.setVisible(true);
Home.setSize(710, 700);
Home.setLocationRelativeTo(null); //FormImaoe Home = new FormImaoe(); //Home.show();
}
private void
ProoramMouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handlino code here:
dispose();
Framee Prooram = new Framee();
Prooram.setLocationRelativeTo(null); Prooram.setVisible(true);
}
private void HelpMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handlino code here: // HelpFrame Help = new HelpFrame();
//Help.show(); }
/**
* @param aros the command line arouments */
public static void main(Strino aros[]) { /* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel settino code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
(28)
A-28
* For details see
http://download.oracle.com/javase/tutorial/uiswino/lookandfe el/plaf.html
*/ try {
for (javax.swino.UIManaoer.LookAndFeelInfo info : javax.swino.UIManaoer.oetInstalledLookAndFeels()) {
if ("Nimbus".equals(info.oetName())) { javax.swino.UIManaoer.setLookAndFeel(info.oetClassName());
break; }
}
} catch (ClassNotFoundException ex) {
java.util.loooino.Loooer.oetLoooer(HelpFrame.class.oetName()) .loo(java.util.loooino.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.loooino.Loooer.oetLoooer(HelpFrame.class.oetName()) .loo(java.util.loooino.Level.SEVERE, null, ex);
} catch (IlleoalAccessException ex) {
java.util.loooino.Loooer.oetLoooer(HelpFrame.class.oetName()) .loo(java.util.loooino.Level.SEVERE, null, ex);
} catch (javax.swino.UnsupportedLookAndFeelException ex) {
java.util.loooino.Loooer.oetLoooer(HelpFrame.class.oetName()) .loo(java.util.loooino.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
new HelpFrame().setVisible(true); }
}); }
// Variables declaration - do not modify private javax.swino.JMenu Help;
private javax.swino.JMenu Home; private javax.swino.JMenu Prooram; private javax.swino.JButton jButton1; private javax.swino.JButton jButton2; private javax.swino.JButton jButton3; private javax.swino.JLabel jLabel1; private javax.swino.JLabel jLabel2; private javax.swino.JLabel jLabel3;
(29)
private javax.swino.JMenuBar jMenuBar1; private javax.swino.JPanel jPanel1;
private javax.swino.JScrollPane jScrollPane2; private javax.swino.JTextArea jTextArea1; private javax.swino.JTextField jTextField1; private javax.swino.JTextField jTextField10; private javax.swino.JTextField jTextField11; private javax.swino.JTextField jTextField2; private javax.swino.JTextField jTextField3; private javax.swino.JTextField jTextField4; private javax.swino.JTextField jTextField5; private javax.swino.JTextField jTextField6; private javax.swino.JTextField jTextField7; private javax.swino.JTextField jTextField9; // End of variables declaration
(30)
B-1
LAMPIRAN B : CURRICULUM VITAE
Nama
: Nurul Putri Yanti
Alamat Sekarang
: Jln. Karya Rakyat no.58 Medan
Alamat Orang Tua
: Jln. Karya Rakyat no.58 Medan
Telp/ Hp
: 085276826672
: 24.hyunsang@gmail.com
Riwayat Pendidikan
2011 – 2015
: S-1 Ilmu Komputer Universitas Sumatera Utara, Medan
2007 – 2010
: SMA Negeri 4 Medan
2004 – 2007
: SMP Negeri 16 Medan
1998 – 2004
: SD Negeri 060836 Medan
1997 – 1998
: TK Bina Nusa Medan
Keahlian
Bahasa
: Indonesia, Inggris
Bahasa Pemrograman : Pascal, C++, Java,C.
Database
: Microsoft Access, Mysql.
Design
: Photoshop.
Pengalaman Organisasi
[2009 – 2010] Bintalis SMA Negeri 4 Medan
[2012 – 2013] Anggota Keputrian UKMI AL-KHUWARIZMI
[2014 –2015] Ketua Keputrian UKMI Al-Khuwarizmi
[2014 – 2015] Asisten Laboratory IKLC(Ilmu Komputer Laboratory Center)
[2014 – 2015] Sekretaris Pemerintahan Mahasiswa Fasilkom-TI
(31)
Pengalaman Kepanitiaan
[2013]
Anggota Konsumsi PORSENI IMILKOM 2013
[2013]
Anggota Bidang Kesehatan PMB IMILKOM 2013
(32)
B-1
LAMPIRAN B : CURRICULUM VITAE
Nama
: Nurul Putri Yanti
Alamat Sekarang
: Jln. Karya Rakyat no.58 Medan
Alamat Orang Tua
: Jln. Karya Rakyat no.58 Medan
Telp/ Hp
: 085276826672
: 24.hyunsang@gmail.com
Riwayat Pendidikan
2011 – 2015
: S-1 Ilmu Komputer Universitas Sumatera Utara, Medan
2007 – 2010
: SMA Negeri 4 Medan
2004 – 2007
: SMP Negeri 16 Medan
1998 – 2004
: SD Negeri 060836 Medan
1997 – 1998
: TK Bina Nusa Medan
Keahlian
Bahasa
: Indonesia, Inggris
Bahasa Pemrograman : Pascal, C++, Java,C.
Database
: Microsoft Access, Mysql.
Design
: Photoshop.
Pengalaman Organisasi
[2009 – 2010] Bintalis SMA Negeri 4 Medan
[2012 – 2013] Anggota Keputrian UKMI AL-KHUWARIZMI
[2014 –2015] Ketua Keputrian UKMI Al-Khuwarizmi
[2014 – 2015] Asisten Laboratory IKLC(Ilmu Komputer Laboratory Center)
[2014 – 2015] Sekretaris Pemerintahan Mahasiswa Fasilkom-TI
(33)
Pengalaman Kepanitiaan
[2013]
Anggota Konsumsi PORSENI IMILKOM 2013
[2013]
Anggota Bidang Kesehatan PMB IMILKOM 2013
(34)
71
Daftar Pustata
Ali, M. & Jantan, A. 2008. Image encryption using block-based transformation
algorithm.
International Journal Computer Science
35 (1).
Bashir, Ahmed, dkk. 2011. A new image encryption approach using block based on
shifted algorithm. IJCSNS
11 (12).
Bruce, S. 1996.
Applied Cryptography by : Protocolos, Algorithms, and Source Code
in C.
John Wiley & Sons, Inc : USA
Dooley, J. 2013.
A Brief History of Cryptology and Cryptographic Algorithms.
Springer : New York.
Fairuzabadi, M. 2010. Implementasi kriptografi klasik menggunakan borland delphi.
Jurnal Dinamika Informatika. 4 (2).
FIPS Pub-197. 2001. Advanced encryption standard.
NIST.
Kristoforus, R. & Aditya, S. 2012.Implementasi algoritma rijndael untuk enkripsi dan
dekripsi pada citra digital.
Jurnal SNATI 2012
.
Kushawa, J., dan Roy, B.N. 2010. Secure image data by double encryption.
Internasional Journal of Computer Application
5 (10).
Paar, Christof, dan Pelzl . 2010.
Understanding Cryptography. Springer : New York.
Sadikin, R. 2012.
Kriptografi untuk Keamanan Jaringan.
ANDI : Yogyakarta.
Selent , D. 2010. Advanced encryption standard.
Rivier Academic Journal. 6 ( 2).
Surian, D. 2006. Algoritma kriptografi AES rijndael.
Jurnal TESLA
8 (2)
(35)
ANALBSBS DAN PERANCANGAN
3.1 Analisis Sistem
Analisis sistem terdiri dari fase-fase berbeda yang mendeskripsikan pengembangan
sistem. Dalam tugas akhir ini, ada tiga fase analisis yaitu: analisis masalah, analisis
kebutuhan dan analisis proses. Analisis masalah bertujuan untuk memahami
kelayakan masalah. Analisis kebutuhan dilakukan untuk menjelaskan fungsi-fungsi
yang ditawarkan dan mampu dikerjakan sistem. Sedangkan analisis proses untuk
memodelkan tingkah laku sistem.
3.1.1. Analisis Masalah
Gambar merupakan salah satu bentuk data yang memiliki representasi berupa
kumpulan piksel yang tersusun dalam sebuah matriks 2 dimensi. Penggunaan gambar
sebagai media yang memberikan informasi penting sudah umum untuk digunakan.
Namun, saat ini keamanan dalam pengiriman data rentan dilewati oleh pihak ketiga
yang ingin mengetahui isi dari data tersebut. Masalah utama didalam penelitian ini
adalah bagaimana menerapkan algortima
Advanced Encryption Standard
(AES) untuk
mengamankan file gambar.
Masalah-masalah pada penelitian ini diidentifikasikan dengan menggunakan
diagram
Ishikawa
. Diagram
Ishikawa
atau yang sering dikenal dengan
Cause and
Effect Diagram
adalah diagram yang digunakan untuk memahami dan
mengidentifikasi serta menggambarkan beberapa masalah yang terjadi pada sistem
dan akibat yang ditimbulkan oleh masalah.
Permasalahan pada penelitian ini secara umum dapat ditunjukkan pada diagram
Ishikawa. Gambar 3.1.
(36)
33
Gambar 3.1 Diagram
Ishikawa
Berdasarkan gambar 3.1, masalah utama ditunjukkan oleh segi empat yang paling
kanan (kepala ikan), yaitu kerahasiaan data gambar yang tidak terjaga. Kategori
penyebab masalah tersebut ditunjukkan oleh segi empat lainnya. Penjabaran
penyebab-penyebab masalah dijelaskan oleh garis-garis panah (tulang ikan) yang kecil.
Tulang tersebut menunjuk ke arah tulang dari kategori masalah dan selanjutnya
seluruh tulang dari kategori masalah menunjuk ke arah satu tulang besar. Tulang besar
ini yang menunjukkan masalah utama dari analisis yang telah dilakukan. Penyebab
utama dari masalah tersebut yang menjadi latar belakang penelitian penulis adalah
metode yang digunakan dalam proses perubahan data gambar menjadi data
cipher
.
Solusi yang dapat ditawarkan adalah dengan menggunakan algoritma
Advanced
Encryption Standard
(AES) untuk mengamankan file gambar.
3.1.2. Analisis Kebutuhan
Analisis kebutuhan yang diperlukan untuk merancang sebuah sistem terdapat dua
bagian yaitu kebutuhan fungsional dan kebutuhan
non
fungsional.
(37)
3.1.2.1. Kebutuhan Fungsional
Kebutuhan fungsional merupakan pendeskripsian dari aktivitas - aktivitas yang dapat
dilakukan oleh sistem . Dalam sistem yang akan dirancang penulis , kebutuhan
fungsional yang akan disediakan adalah sebagai berikut :
1. Fungsi Browse
User
dapat melakukan proses pemilihan gambar yang akan dilakukan proses
enkripsi dari gambar yang dipilih.
2. Fungsi Generate Key
User
dapat memasukkan panjang kunci yang akan digunakan dalam proses
enkripsi.
3. Fungsi Enkripsi
User
dapat memperoleh gambar yang telah berubah bentuk menjadi gambar
cipher
dari proses enkripsi sehingga informasi gambar dapat dirahasiakan .
4. Fungsi Dekripsi
User
dapat memperoleh kembali gambar asli dari gambar
cipher
dari proses
dekripsi.
3.1.2.2. Kebutuhan Non-Fungsional
Kebutuhan non-fungsional merupakan pendeskripsikan fitur, karakteristik dan batasan
lainnya dalam sistem yang akan dirancang. Terdapat beberapa hal yang menjadi
karakteristik kebutuhan non-fungsional antara lain:
1. Performa
Aplikasi yang akan dibangun dapat menunjukkan hasil dari fungsi kriptografi
yang dilakukan oleh sistem.
2. Mudah dipelajari dan digunakan
Aplikasi yang akan dibangun memiliki tampilan yang
user friendly
agar
mudah digunakan oleh
user.
(38)
35
3. Hemat biaya
Aplikasi yang akan dibangun menggunakan teknologi
open source.
4. Dokumentasi
Aplikasi yang akan dibangun memiliki panduan penggunaan.
5. Manajemen kualitas
Aplikasi yang akan dibangun memiliki kualitas yang baik yaitu proses
enkripsi dan dekripsi yang relatif cepat.
6. Kontrol
Aplikasi yang akan dibangun memiliki pesan
warning
jika
user
tidak
memasukkan kunci yang akan digunakan.
3.1.3. Analisis Proses
Pada penelitian ini aplikasi yang akan dibangun menggunakan algoritma
Advanced
Encryption Standard
(AES) untuk melakukan proses enkripsi dan dekripsi gambar.
3.2 Perancangan Sistem
Perancangan sistem dilakukan untuk mendeskripsikan gambaran dari sistem yang
akan dibangun. Sistem akan dirancang dengan menggunakan
Unified Modeling
Language
(UML). UML adalah bahasa yang digunakan untuk memberikan penjelasan
mengenai komponen-komponen untuk membangun sistem dan interaksi antar
komponen sistem. Model UML yang digunakan dalam penelitian ini antara lain adalah
use
case diagram
,
activity diagram
serta
sequance diagram
.
3.2.1. Use-Case Diagram
Use-case Diagram
adalah gambaran skenario penggunaan aplikasi sistem tentang
bagaimana cara sistem bekerja dengan
user
.
Use-case Diagram
membutuhkan
identifikasi siapakah pengguna yang akan menggunakan sistem tersebut. Pengguna
tersebut dinamakan
actor. Actor
berperan untuk melakukan komunikasi dengan sistem.
Hubungan antar
actor
dengan
use-case
dihubungkan dengan garis lurus.
(39)
Gambar 3.2 Diagram
Use-Case
Pada gambar 3.2
actor
mempunyai peran yaitu
browse
gambar ,
input key
,
enkripsi gambar, dan dekripsi gambar. Hal pertama yang dilakukan oleh
actor
adalah
memasukkan panjang kunci yang akan digunakan untuk proses enkripsi dan dekripsi
gambar. Jika kunci tidak dimasukkan atau salah , maka
user
tidak bisa melakukan
proses
browse
gambar. Lalu selanjutnya,
user
melakukan
browse
gambar dari
direktori untuk memilih gambar yang akan dienkripsi. Setelah itu,
user
memilih
proses enkripsi untuk memperoleh gambar
cipher
dari gambar asli yang dipilih
user.
Dan yang terakhir
user
memilih proses dekripsi untuk memperoleh hasil perubahan
dari gambar
cipher
yang merupakan gambar asli. Berikut ini merupakan tabel
narrative use-case
yang dapat dilihat pada tabel 3.1, 3.2 , 3.3, dan 3.4 .
(40)
37
Tabel 3.1
Narrative Use-Case
Browse Gambar
Use-case Name
Browse
Gambar
Design Scope
Sistem (black box)
Goal Level
User-goal
Stakeholder and
Interest
Actor
dienkripsi.
dapat memilih gambar dari file direktori yang akan
Precondition
Actor
menginputkan panjang kunci.
Minimal Guarantee
Sistem akan memberikan pesan
error
ketika
browse
gambar
gagal.
Success Guarantee
Sistem akan menampilkan gambar yang dipilih di panel aplikasi
yang telah disediakan.
Trigger
Actor
menekan tombol
browse.
Main Success Scenario
1.
Actor
menginputkan panjang kunci yang akan digunakan pada
prose enkripsi gambar.
2.
Actor
menekan tombol browse.
3. Sistem akan menampilkan direktori
file.
4.
Actor
memilih direktori dan gambar yang terdapat di dalam
direktori
file.
5. Sistem akan menampilkan gambar yang dipilih.
Tabel 3.2
Narrative Use-Case Input Key
Use-case Name
Input Key
Design Scope
Sistem (black box)
Goal Level
User-goal
Stakeholder and
Interest
Actor
dapat memasukkan panjang kunci.
Precondition
-Minimal Guarantee
Sistem akan menampilkan
message dialog
ketika kunci yang
dimasukkan tidak sesuai dengan ketentuan .
Success Guarantee
Sistem akan mengizinkan
actor
melakukan proses
browse
gambar.
Trigger
Pengguna mengetikkan panjang kunci yang akan digunakan.
Main Succes Scenario
1.
Actor
memasukkan panjang kunci yang akan digunakan.
2. Sistem mengizinkan
actor
untuk memilih gambar yang
akan di enkripsi.
(41)
Tabel 3.3
Narrative Use-Case
Enkripsi Gambar
Use-case Name
Enkripsi Gambar
Design Scope
Sistem (black box)
Goal Level
User-goal
Stakeholder and
Interest
Actor
dipilih.
dapat melakukan proses enkripsi pada gambar yang
Precondition
Actor
memasukkan panjang kunci dan memilih gambar yang
akan dienkripsi.
Minimal Guarantee
Sistem akan memberikan pesan
error
pada
console
program
ketika gambar tidak bisa dienkripsi.
Success Guarantee
Sistem akan menampilkan gambar
cipher
ke panel yang
tersedia di aplikasi.
Trigger
Actor
menekan tombol enkripsi.
Main Succes Scenario
1.
Actor
menekan button enkripsi.
2. Gambar hasil enkripsi (gambar
cipher) akan tampil di panel
Tabel 3.4
Narrative Use-Case
Dekripsi Gambar
Use-case Name
Dekripsi Gambar
Design Scope
Sistem (black box)
Goal Level
User-goal
Stakeholder and
Interest
Actor
dapat melakukan proses dekripsi pada gambar
cipher.
Precondition
Actor
memasukkan panjang kunci , memilih gambar yang akan
dienkripsi dan gambar telah berubah menjadi gambar
cipher.
Minimal Guarantee
Sistem akan memberikan pesan
error
pada
console
program
ketika gambar tidak bisa dienkripsi.
Success Guarantee
Sistem akan menampilkan gambar hasil dekripsi ke panel yang
tersedia di aplikasi.
Trigger
Actor
menekan tombol dekripsi
Main Succes Scenario
1.
Actor
menekan button dekripsi.
2. Gambar hasil dekripsi akan tampil di panel.
3.2.2. Sequence Diagram
Sequence Diagram
merupakan gambaran dari rangkaian pesan yang akan dikirim
antara
object
yang ada serta interaksi yang terjadi antar
object
. Berikut
Sequence
Diagram
dari sistem yang dirancang dapat dilihat pada gambar 3.3 dan gambar 3.4.
(42)
39
Gambar 3.3 Diagram
Sequence
untuk Enkripsi
(43)
3.2.3. Activity Diagram
Activity Diagram
menggambarkan alur aktivitas yang ada di dalam sistem yang
bertujuan untuk membantu memahami proses dan menggambarkan setiap interaksi
yang ada antara beberapa
use case
yang digunakan. Activity Diagram dari sistem
dapat dilihat pada gambar 3.5 .
(44)
41
3.3. Flowchart Sistem
Flowchart
merupakan diagram alir dari bagan-bagan tertentu yang memiliki arus
penggambaran mengenai langkah-langkah penyelesaian suatu permasalahan. Selain
itu,
flowchart
juga memiliki fungsi memudahkan proses pengecekan terhadap sistem
yang akan dibuat. Berikut merupakan
flowchart
dari sistem yang dibangun. Gambar
3.6 dan 3.7 dibawah ini menampilkan
flowchart
dari sistem .
(45)
(46)
43
3.3.1. Flowchart Enkripsi Gambar dengan Algoritma AES
(47)
3.3.2. Flowchart Dekripsi Gambar dengan Algoritma AES
Gambar 3.9
Flowchart Dekripsi Gambar
3.4.
Pseudocode
Sistem
Pseudocode
merupakan pendeskripsian dari algoritma pemrograman komputer yang
menggunakan struktur sederhana dari bahasa pemrograman yang digunakan dan dapat
dimengerti. Berikut merupakana
pseudocode
dari sistem yang akan dibangun.
(48)
45
3.4.1. Psuedocode Enkripsi Gambar
Berikut ini adalah
pseudocode
algoritma
Advanced Encryption Standard
(AES)
dalam proses enkripsi gambar.
aesEncryption(gambar , byte key[]) Var
byte imagePix[] = getRGB.gambar(x,y) byte state [] = imagePix[]
int round = key.length() Byte keyEx [] = key.setEx() begin
AddroundKey(state[], keyEx[0]) For round = 1 to (round -1)
SubBytes(state) ShiftRows(state) MixColumns(state)
AddroundKey(state, keyEx[round]) end
SubBytes(state) ShiftRows(state)
AddroundKey(state, keyEx[round]) cipherImage=state
end
3.4.2. Psuedocode Dekripsi Gambar
Berikut ini adalah
pseudocode
algoritma
Advanced Encryption Standard
(AES) dalam
proses dekripsi gambar
cipher
.
aesDecryption(cipherImage , byte key[]) Var
byte imagePix[] = getRGB.cipherImage(x,y) byte state [] = imagePix[]
begin
AddroundKey(state[], keyEx[round]) InvShiftRow(state)
InvSubByte (state)
For round = (round -1) to 1
AddroundKey(state, keyEx[round]) InvMixColumns(state)
InvShiftRows(state) InvSubBytes(state) end
(49)
1
decryptImage=state end3.5. Perancangan Antarmuka
Perancangan antarmuka
adalah desain awal dari tampilan sistem yang akan
dibangun. Antarmuka harus dirancang dengan memperhatikan faktor pengguna
sehingga sistem yang dibangun dapat memberikan kenyamanan dan kemudahan untuk
digunakan oleh pengguna. Sistem yang dibangun terdiri dari
form home
, program dan
help.
3.5.1
Form Home
Form
Utama adalah tampilan awal dari sistem ini dijalankan. Gambar 3.10
menunjukkan tampilan sementara dari
form home.
Gambar 3.10 Rancangan Tampilan
Form Home
1
1
1
2
3
(50)
47
3.5.2 Form
Program
Pada halaman
form
program ini, pengguna dapat melakukan proses
browse
gambar,
enkripsi gambar dan dekripsi gambar . Gambar 3.11 menunjukkan tampilan sementara
dari
form
program.
Gambar 3.11 Rancangan
Form
Program
Keterangan:
1) Pengguna dapat menginputkan panjang kunci yang akan digunakan.
2) Pengguna dapat memilih gambar yang akan dienkripsi dengan menekan
button
browse
pada
form
3) Jika pengguna lupa atau salah menginputkan panjang kunci, maka ketika
pengguna menekan tombol
browse
maka sistem akan menampilkan pesan
peringatan di layar
form.
4) Setelah pengguna memilih gambar yang akan dienkripsi , maka gambar akan
muncul di panel
image
seperti yang tertera di gambar 3.11
.
4
5
6
1
(51)
5) Proses selanjutnya pengguna menekan tombol
encrypt
untuk melakukan proses
enkripsi pada gambar, lalu hasil enkripsi akan muncul pada panel
image cipher
seperti yang tertera di gambar 3.11 diatas.
6) Lalu , dengan menekan tombol
decrypt
maka sistem akan melakukan proses
dekripsi pada
image cipher
dan akan menghasilkan
decrypt image
. Gambar
tersebut akan ditampilkan pada panel
image decrypt
seperti yang tertera pada
gambar 3.11.
3.5.3
Form Help
Form Help
adalah halaman yang berisikan panduan dalam menggunakan aplikasi
yang telah dirancang oleh penulis. Gambar 3.12 akan menampilkan rancangan
sementara dari
form help.
Gambar 3.12 Rancangan
Form
Penerima
Berikut ini adalah keterangan komponen yang akan digunakan pada
perancangan sistem pada gambar 3.10 , 3.11, dan 3.12 yang ditampilkan pada tabel
3.5.
1
7
(52)
49
Tabel 3.5 Keterangan Komponen Sistem
Nomor Komponen
Jenis Komponen
Manfaat Komponen
1
JMenu
Membentuk menu yang
disediakan dalam sistem
2
JLabel
Menampilkan
icon
logo gambar
Fakultas Ilmu Komputer dan
Teknologi Informasi
3
JLabel
Menampilkan judul sistem
4
JButton
Membentuk tombol yang
berfungsi untuk menjalankan
perintah
5
JScrollPane
Menampilkan gambar asli,
gambar enkripsi dan gambar
dekripsi
6
JTextField
Mengambil nilai inputan panjang
kunci yang digunakan
7
JLabel
Menampilkan keterangan dari
(53)
BMPLEMENTASB DAN PENGUJBAN
4.1. Bmplementasi
Dalam tugas akhir ini, program dibangun menggunakan bahasa pemrograman Java di
dalam IDE Netbeans versi 8.1. Program ini terdiri dari 3
form
utama, yaitu
form home
yang akan menampilkan judul program tugas akhir penulis ,
form
program yang akan
menjadi media proses enkripsi dan dekripsi gambar, dan
form help
yang akan
menampilkan prosedur penggunaan aplikasi yang dibangun oleh penulis.
4.1.1 Form Home
Form home
merupakan
form
yang pertama kali muncul ketika program dijalankan.
Pada
form
ini terdapat 3 buah menu bar yang terletak di atas
form
yaitu
home
,
program, dan
help.
Masing - masing menu bar menunjuk ke masing - masing
form.
Pada
form
ini ditampilkan
cover
dari tugas akhir penulis. Gambar 4.1 dibawah ini
merupakan tampilan dari
form home .
(54)
51
Gambar 4.1 Tampilan
Form Home
4.1.2 Form Program
Form
program merupakan
form
yang berfungsi sebagai media proses enkripsi dan
dekripsi gambar. Hal pertama yang dilakukan ketika telah berada pada
form
ini adalah
menginputkan panjang kunci yang digunakan. Kunci yang diperbolehkan untuk
digunakan adalah 128, 192 dan 256. Sehingga, apabila
uses
lupa menginputkan atau
salah memasukkan kunci, maka sistem akan menampilkan
message windows
untuk
memasukkan kunci yang sesuai. Gambar 4.2 akan menunjukkan tampilan tersebut.
(55)
Gambar 4.2
Message warning
pada
form
program
Setelah
user
menginputkan panjang kunci, maka
user
dapat memilih gambar
yang akan dienkripsi dengan menekan tombol
browse
yang terletak disebelah paling
kiri
form.
Setelah gambar dipilih, maka gambar tersebut akan tampil di panel
normal
image.
Setelah itu, untuk melihat gambar yang dienkripsi maka
user
harus menekan
tombol
decrypt .
Dan proses yang terakhir adalah dekripsi. Hasil dekripsi akan terlihat
di
form
jika
user
menekan tombol
decrypt
. Jika proses benar, maka tampilan dari
decrypt image
akan sama dengan
normal image
. Gambar 4.3 dibawah ini
menunjukkan tampilan dari proses enkripsi dan dekripsi pada
form
program.
(56)
53
4.1.3 Form Help
Form help
merupakan
form
yang menampilkan prosedur penggunaan aplikasi yang
dirancang oleh penulis. Gambar 4.4 menunjukkan tampilan
form help
.
(57)
4.2 Pengujian
Pengujian dilakukan terhadap algoritma
Advanced Encryption Standard
(AES) untuk
mengukur keberhasilan sistem dalam melakukan proses enkripsi dan dekripsi serta
waktu yang diperlukan dalam proses enkripsi dan dekripsi tersebut. Pengujian
dilakukan dengan kriteria yang sesuai dengan batasan masalah di atas yaitu :
1. Panjang kunci yang digunakan adalah 128, 192 dan 256 bit.
2. Format gambar yang digunakan adalah .*jpg dengan ukuran 3x4 , 4x5, dan 5x6.
3. Karakter kunci dibangkitkan dari fungsi pembangkit bilangan acak
Pseudorandom Number Generator.
4.2.1. Enkripsi AES
Misalkan nilai piksel gambar dari
state
ke-1 yang telah diubah ke
byte
adalah sebagai
berikut :
32
88
31
E0
43
5A 31
37
F6 30
98
07
A8 8D A2 34
Dan panjang kunci yang digunakan adalah 128 bit, dengan nilainya adalah
sebagai berikut :
2B 28
AB 09
7E AE F7 CF
15
D2 15
4F
16
A6 88
3C
4.2.1.1. Ekspansi Kunci AES
Pada proses ini, panjang kunci yang digunakan adalah 128 bit, sehingga
state
akan
melakukan 10 kali ronde proses. Oleh karena itu, kunci yang akan dibentuk sebanyak
10
state
. Langkah-langkah untuk membentuk kunci ronde adalah sebagai berikut :
(58)
55
1. Setiap kolom dari kunci dibentuk menjadi sebuah
word.
w
0= 2B7E1516 ,
w
1= 28AED2A6 ,
w
2= ABF71588 ,
w
3=
09CF4F3C
2. Untuk memperoleh w
4dilakukan proses rotWord(), subWord() dan Rcon[i]
pada
w
n-1yaitu
w
3.
a) rotWord()
rotWord(
09CF4F3C
) = CF4F3C09
b) subWord()
subWord(CF4F3C09) = 8A84EB01
c) Rcon[i/N
k]
Rcon[i/Nk] = 01000000
d) 8A84EB01 XOR Rcon[i/Nk] = 8A84EB01 XOR 01000000 =
8B84EB01
e)
w
4= w
0XOR 8B84EB01 =
A0FAFE17
2B7E1516 = 00101011 01111110 00010101 00010110
8B84EB01 = 10001011 10000100 11101011 00000001
A0FAFE17
= 10100000 11111010 11111110 00010111
3. Untuk membentuk kunci ronde 0, diperlukan
w
4, w
5, w
6, w
7. Tahapan yang
dilakukan untuk memperoleh
w
5, w
6, w
7sama dengan
w
4.
Kunci pada ronde 1 yang diperoleh adalah sebagai berikut :
A0 88
23
2A
FA 54
A3 6C
FE 2C 39
76
17
B1 39
05
Kunci yang diatas akan digunakan untuk proses enkripsi pada ronde ke-1.
4.2.1.2. AddRoundKey
Proses yang dilakukan pada tahap ini adalah melakukan proses XOR antara
state
dengan
kunci ronde.
3243F6A8 = 00110010 01000011 11110110 10101000
2B7E1516 = 00101011 01111110 00010101 00010110
193DE3BE
= 00011001 00111101 11100011 10111110
(59)
51308D31 = 01010001 00110000 10001101 00110001
28AED2A6 = 00101000 10101110 11010010 10100110
193DE3BE
= 01111001 10011110 01011111 10010111
313198A2 = 00110001 00110001 10011000 10100010
ABF71588 = 10101011 11110111 00010101 10001000
9AC68C2A
= 10011010 11000110 10001101 00101010
E0370737 = 1110000 00110111 00000111 00110111
09CF473C = 00001001 11001111 01000111 00111100
E9F84808
= 11101001 11111000 01000000 00001011
4.2.1.3. SubBytes
Proses ini bertujuan untuk menukar
setiap
byte
pada
state
dengan
byte
pada tabel
S-Box
seperti yang ditampilkan pada tabel 2.5 dengan indeks
byte
kiri menunjukkan baris dan
byte
kanan menunjukkan kolom
.
4.2.1.4. ShiftRow
(60)
57
4.2.1.5. MixColumns
Pada proses ini kolom dianggap sebagai polonomial pada GF (2
8). Proses
mix colomns
dapat dilihat pada proses di bawah ini.
02 x D4 = (00000010) x (11010100)
=
x ( x
7+ x
6+ x
4+ x
2)
=
x
8+ x
7+ x
5+ x
3= ( x
4+ x
3+ x+ 1 ) + x
7+ x
5+ x
3= x
7+ x
5+ x
4+ x+ 1 =
10110011
01 x D4 = (00000001) x (11010100)
=
1 ( x
7+ x
6+ x
4+ x
2)
=
x
7+ x
6+ x
4+ x
2=
11010100
03 x BF = (00000011) x (10111111)
=
x+1 ( x
7+ x
5+ x
4+ x
3+ x
2+ x + 1)
=
x
8+x
6+ x
5+ x
4+ x
3+ x
2+ x + ( x
7+ x
5+ x
4+ x
3+ x
2+ x + 1)
= ( x
4+ x
3+ x+ 1 ) +x
6+ x
5+ x
4+ x
3x
2+ x+ ( x
7+ x
5+ x
4+ x
3+ x
2+ x +
02 x BF = (00000010) x (10111111)
=
x ( x
7+ x
5+ x
4+ x
3+ x
2+ x + 1)
=
x
8+x
6+ x
5+ x
4+ x
3+ x
2+ x
= ( x
4+ x
3+ x+ 1 ) +x
6+ x
5+ x
4+ x
3x
2+ x
(1)
DAFTAR ISI
Hal
Persetujuan ii
Pernyataan iiiiii
Penghargaan iviv
Abstrak vvi
Abstract viivi
Daftar Isi viiivii
Daftar Tabel xi
Daftar Gambar
Daftar nampiran xiiixii
Bab I Pendahuluan 1
1.1 natar Belakang 1
1.2 Rumusan Masalah 2
1.3 Batasan Masalah 2
1.4 Tujuan Penelitian 2
1.5 Manfaat Penelitian 1.6 Metodologi Penelitian 1.7 Sistematika Penulisan
3 3 4
Bab II Tinjauan Pustaka 6
2.1 Kriptografi 6
2.1.1 Definisi Kriptografi 7
2.1.2 Jenis Kriptografi 7
2.1.2.1 Kriptografi Simetris 8
2.1.2.2 Kritografi Asimetris 8
2.2 Advanced Encryption Standard (AES) 2.6 Citra Digital9 11
2.2.1 Matematika Dasar dalam AES 112.8 Format Berkas Bitmap (*.Bmp) 12 2.9 InformasiTeori DanEntropi 13 2.10 AlgoritmaShannon-Fano14
2.2.1.1 Finite Field 11
2.2.1.2 Prime Field 12
2.2.1.3 Extension Field GF(2m) 13
2.2.1.4 Penjumlahan dan Pengurangan pada GF (2m) 14
2.2.1.5 Perkalian pada GF(2m) 14
2.2.1.6 Invers pada GF (2m) 16
2.2.2 Enkripsi AES 17
2.2.2.1. Ekspansi Kunci AES 18
2.2.2.2 SubBytes 20
2.2.2.3 ShiftRows 22
2.2.2.4 MixColumns 23
2.2.2.5 AddRoundKey 24
2.2.3 Dekripsi AES 24
2.2.3.1 InvMixColumns 25
2.2.3.2 InvShiftRows 26
2.2.3.3 InvSubBytes 27
(2)
2.3.1 Format JPG 29
2.4 Pseudorandom Number Generator 30
2.5 Penelitian yang Relevan 31
Bab III Analisis Dan Perancangan Sistem 32
3.1 Analisis Sistem 32
3.1.1 Analisis Masalah 32
3.1.2 Analisis Kebutuhan 33
3.1.2.1 Kebutuhan Fungsional 34
3.1.2.2 KebutuhanNon-Fungsional 34
3.1.3 Analisis Proses 35
3.2 Perancangan Sistem 35
3.2.1 Use Case Diagram 35
3.2.2 Sequence Diagram
3.2.3.Activity Diagram 3840
3.3 FlowchartSistem
3.3.1 FlowchartEnkripsi Gambar dengan Algoritma AES 3.3.2FlowchartDekripsi Gambar dengan Algoritma AES
41 43 44 3.4PseudocodeSistem
3.4.1PseudocodeEnkripsi Gambar 3.4.2PseudocodeDekripsi Gambar
44 45 45 3.5 Perancangan Antarmuka
3.5.1 Form Home 3.5.2 Form Program 3.5.3 Form Help
46 46 47 48
Bab IV Implementasi dan Pengujian 50
4.1 Implementasi 50
4.1.1 Form Home 50
4.1.2 Form Program 51
4.1.3 Form Help 53
4.2 PengujianSistem 544.1.2 Algoritma Arithmetic Coding 40 4.1.3 Algoritma Huffman 50
4.2.1 Enkripsi AES 54
4.2.1.1 Ekspansi Kunci AES 54
4.2.1.2 AddRoundKey 55
4.2.1.3 SubBytes 56
4.2.1.4 ShiftRows 56
4.2.1.5 MixColumns 57
4.2.2 Dekripsi AES 60
4.2.2.1 AddRoundKey 60
4.2.2.2 InvShiftRows 61
4.2.2.3 InvSubBytes 61
4.2.2.4 InvMixColumn 61
(3)
Bab V Kesimpulan dan Saran 69
5.1 Kesimpulan 69
5.2 Saran 70
(4)
DAFTAR TABEL
Tabel 2.1 Tabel 2.2 Tabel 2.3 Tabel 2.4 Tabel 2.5 Tabel 2.6 Tabel 2.7 Tabel 2.8 Tabel 3.1 Tabel 3.2 Tabel 3.3 Tabel 3.4 Tabel 3.5 Tabel 4.1 Tabel 4.2 Tabel 4.3
Cipher Julius Caesar Jumlah Putaran AES
Hasil Penjumlahan dan Perkalian GF(2) Invers Perkalian dari GF (28)
Perhitunganeeyronde 1 Tabel S-Box
Tabel InvS-Box Penelitian Terkait
Narative Use Case Browse Gambar Narative Use Case Input Key
Narative Use Case Enkripsi Gambar Narative Use Case Dekripsi Gambar Keterangan Komponen Sistem Proses Enkripsi
Waktu Enkripsi dan Dekripsi
Gambar Hasil Enkripsi dan Dekripsi
6 11 13 16 19 20 27 31 37 37 38 38 49 59 64 64
(5)
DAFTAR GAMBAR Gambar 2.1 Gambar 2.2 Gambar 2.3 Gambar 2.4 Gambar 2.5 Gambar 2.6 Gambar 2.7 Gambar 2.8 Gambar 3.1 Gambar 3.2 Gambar 3.3 Gambar 3.4 Gambar 3.5 Gambar 3.6 Gambar 3.7 Gambar 3.8 Gambar 3.9 Gambar 3.10 Gambar 3.11 Gambar 3.12 Gambar 4.1 Gambar 4.2 Gambar 4.3 Gambar 4.4 Gambar 4.5 Gambar 4.6 Gambar 4.7
Alur Proses Kriptografi Alur Kriptografi Simetris Alur Kriptografi Asimetris Unit Data AES
nangkah - langkah Enkripsi AES nangkah - langkah dekripsi AES Citra Digital dan Nilai Piksel
Skema Pembentukan State pada baris Citra Diagram Ishikawa
Diagram Use-Case
Diagram Sequence untuk Enkripsi Diagram Sequence untuk Dekripsi Activity Diagram Sistem
Flowchart Sistem
Flowchart Menu Program Flowchart Enkripsi Gambar Flowchart Dekripsi Gambar Rancangan Tampilan FormHome Rancangan Tampilan Form Program Rancangan Tampilan Form Help Tampilan Form Home
Message Warning pada Form Program
Proses Enkripsi dan Dekripsi di Form Program Tampilan Form Help
Grafik Hubungan Waktu Proses dengan Panjang Kunci pada Gambar ukuran 114 x 152pixels
Grafik Hubungan Waktu Proses dengan Panjang Kunci pada Gambar ukuran 152 x 190pixels
Grafik Hubungan Waktu Proses dengan Panjang Kunci pada Gambar ukuran 190 x 228pixels
7 8 8 10 18 25 29 30 33 36 39 39 40 41 42 43 44 46 47 48 51 52 52 53 67 67 68
(6)
DAFTAR LAMPIRAN
A.nisting Program A-1