Implementasi Algoritma Advanced Encryption Standard (AES) untuk Mengamankan File Gambar

(1)

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

Email

: 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

Email

: 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 end

3.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

4

dilakukan proses rotWord(), subWord() dan Rcon[i]

pada

w

n-1

yaitu

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

0

XOR 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

7

sama 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

3

x

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

3

x

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