• Tidak ada hasil yang ditemukan

BAB V KESIMPULAN DAN SARAN

5.2 Saran

Dari hasil analisis pada tugas akhir ini, penulis memberikan saran untuk perbaikan dan pengembangan program lebih lanjut antara lain :

1.Program dapat melakukan enkripsi dekripsi dokumen untuk semua tipe file.

2.Kunci yang tersimpan dapat terhapus otomatis setelah kunci tersebut digunakan.

45

Astutik, Amelia. 2007. Algoritma Enkripsi One Time Pad untuk Sistem Pengamanan Access Database Server. Skripsi. Semarang, Indonesia : Universitas Negeri Semarang.

Bilqis. 2012. Analisis dan Perancangan Aplikasi Pesan Rahasia Menggunakan Algoritma One TimePad (OTP) Dengan Pembangkit Bilangan Acak Linear Congruential Generator (LCG). Skripsi. Medan, Indonesia : Universitas Sumatera Utara

Iswanti. 2003. Sistem Keamanan Data dengan Metode Public Key Cryptography. Penerbit ITB. Bandung .

Kurniawan, Yusuf. 2004. Kriptografi: Keamanan Internet dan Jaringan Komunikasi. Penerbit Informatika. Bandung.

Raharjo, Budi. 2002. Keamanan Sistem Informasi Berbasis Internet. PT. Insan Indonesia –Bandung & PT INDOCISC –Jakarta.

Septian, Devi Agung. 2008. Simulasi Proses Pembangkitan Deret Bilangan Acak Semu Menggunakan Generator Beth Piper Step dan Go (LSFR). Skripsi. Bandung : UNIKOM.

Winaryo, Febryan Christy. 2014. Implementasi Modifikasi Kriptografi One Time Pad (OTP) untuk Pengamanan Data File. Skripsi. Salatiga, Indonesia : Universitas Kristen Satya Wacana.

46

LAMPIRAN 1

Pengujian Program

A. Uji Coba Berkas Dokumen Berformat .txt

1. Pengujian 01 : Berkas asli

Key

Plaintext, hasil proses dekripsi

2. Pengujian 02 : Berkas asli

Key

Plaintext, hasil proses dekripsi

3. Pengujian 03 : Berkas asli

Key

Plaintext, hasil proses dekripsi

4. Pengujian 04 : Berkas asli

Key

Plaintext, hasil proses dekripsi

5. Pengujian 05 : Berkas asli

Key

Plaintext, hasil proses dekripsi

6. Pengujian 06 : Berkas asli

Key

Plaintext, hasil proses dekripsi

7. Pengujian 07 : Berkas asli

Key

Plaintext, hasil proses dekripsi

8. Pengujian 08 : Berkas asli

Key

Plaintext, hasil proses dekripsi

9. Pengujian 09 : Berkas asli

Key

Plaintext, hasil proses dekripsi

10.Pengujian 10 : Berkas asli

Key

Plaintext, hasil proses dekripsi

B. Uji Coba Berkas Dokumen Berformat .doc

1. Pengujian 01 : Berkas asli

Key

Plaintext, hasil proses dekripsi

2. Pengujian 02 : Berkas asli

Key

Plaintext, hasil proses dekripsi

3. Pengujian 03 : Berkas asli

Key

Plaintext, hasil proses dekripsi

4. Pengujian 04 : Berkas asli

Key

Plaintext, hasil proses dekripsi

5. Pengujian 05 : Berkas asli

Key

Plaintext, hasil proses dekripsi

6. Pengujian 06 : Berkas asli

Key

Plaintext, hasil proses dekripsi

7. Pengujian 07 : Berkas asli

Key

Plaintext, hasil proses dekripsi

8. Pengujian 08 : Berkas asli

Key

Plaintext, hasil proses dekripsi

9. Pengujian 09 : Berkas asli

Key

Plaintext, hasil proses dekripsi

10.Pengujian 10 : Berkas asli

Key

LAMPIRAN 2

Listing Program

1. Implementasi Kelas HalamanAwal.java

package skripsiotp;

public class HalamanAwal extends javax.swing.JFrame { public HalamanAwal() { initComponents(); setLocationRelativeTo(this); setTitle("Halaman Awal"); } @SuppressWarnings("unchecked")

private void initComponents() { jPanel1 = new javax.swing.JPanel(); jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel();

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI NG) .addGap(0, 100, Short.MAX_VALUE) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI NG) .addGap(0, 100, Short.MAX_VALUE) );

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jButton1.setText("Enkripsi");

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

} });

jButton2.setText("Dekripsi");

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

} });

jLabel1.setFont(new java.awt.Font("Times New Roman", 1, 24)); jLabel1.setText("KEAMANAN DATA");

jLabel2.setFont(new java.awt.Font("Times New Roman", 1, 14)); jLabel2.setText("Fidelis Asterina Surya P");

jLabel3.setFont(new java.awt.Font("Times New Roman", 1, 14)); jLabel3.setText("105314021");

jLabel4.setFont(new java.awt.Font("Times New Roman", 1, 18)); jLabel4.setText("Universitas Sanata Dharma");

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(169, 169, 169) .addComponent(jLabel3) .addContainerGap(188, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addGap(130, 130, 130) .addComponent(jLabel2) .addContainerGap(141, Short.MAX_VALUE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()

.addGap(83, 83, 83) .addComponent(jButton1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 95, Short.MAX_VALUE) .addComponent(jButton2) .addGap(104, 104, 104)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap(102, Short.MAX_VALUE) .addComponent(jLabel1) .addGap(103, 103, 103)) .addGroup(layout.createSequentialGroup() .addGap(94, 94, 94) .addComponent(jLabel4) .addContainerGap(114, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 119, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BAS ELINE) .addComponent(jButton2) .addComponent(jButton1)) .addGap(18, 18, 18) .addComponent(jLabel2) .addGap(18, 18, 18) .addComponent(jLabel3) .addGap(36, 36, 36) .addComponent(jLabel4) .addContainerGap()) ); pack(); }// </editor-fold>

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { HalamanEnkripsi enk = new HalamanEnkripsi();

enk.setVisible(true); this.dispose();

}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { HalamanDekripsi dek = new HalamanDekripsi();

dek.setVisible(true); this.dispose();

}

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() { public void run() {

new HalamanAwal().setVisible(true); }

}); }

private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JPanel jPanel1; }

2. Implementasi Kelas HalamanEnkripsi.java

package skripsiotp; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.logging.Level;

import java.util.logging.Logger; import javax.swing.JFileChooser; import javax.swing.JOptionPane;

import javax.swing.filechooser.FileNameExtensionFilter; import org.apache.poi.hwpf.extractor.WordExtractor;

public class HalamanEnkripsi extends javax.swing.JFrame { /** Creates new form HalamanEnkripsi */

public HalamanEnkripsi() { initComponents();

}

private OneTimePad otp = new OneTimePad(); @SuppressWarnings("unchecked")

private void initComponents() { jLabel1 = new javax.swing.JLabel(); jPanel1 = new javax.swing.JPanel(); jLabel2 = new javax.swing.JLabel();

jScrollPane1 = new javax.swing.JScrollPane(); enkripsiKey = new javax.swing.JTextArea(); PlainButton = new javax.swing.JButton(); jLabel3 = new javax.swing.JLabel();

jScrollPane2 = new javax.swing.JScrollPane(); plainArea = new javax.swing.JTextArea(); GenerateKey = new javax.swing.JButton(); prosesEnkripsi = new javax.swing.JButton(); jLabel4 = new javax.swing.JLabel();

jScrollPane3 = new javax.swing.JScrollPane(); hasilEnkripsi = new javax.swing.JTextArea(); jLabel5 = new javax.swing.JLabel();

LamaEnkrip = new javax.swing.JTextField(); jLabel6 = new javax.swing.JLabel();

simpanEnkripsi = new javax.swing.JButton(); jButton1 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jLabel1.setFont(new java.awt.Font("Times New Roman", 1, 14));

jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

jLabel2.setFont(new java.awt.Font("Times New Roman", 1, 12)); jLabel2.setText("Plaintext"); enkripsiKey.setColumns(20); enkripsiKey.setRows(5); jScrollPane1.setViewportView(enkripsiKey); PlainButton.setText("Browse"); PlainButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { PlainButtonActionPerformed(evt);

} });

jLabel3.setFont(new java.awt.Font("Times New Roman", 1, 12)); jLabel3.setText("Key"); plainArea.setColumns(20); plainArea.setRows(5); jScrollPane2.setViewportView(plainArea); GenerateKey.setText("Generate Key"); GenerateKey.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { GenerateKeyActionPerformed(evt);

} });

prosesEnkripsi.setText("Proses");

prosesEnkripsi.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) {

prosesEnkripsiActionPerformed(evt); } }); jLabel4.setFont(new java.awt.Font("Tahoma", 1, 11)); jLabel4.setText("Output"); hasilEnkripsi.setColumns(20); hasilEnkripsi.setRows(5); jScrollPane3.setViewportView(hasilEnkripsi);

jLabel5.setText("Lama Proses"); jLabel6.setText("detik");

simpanEnkripsi.setText("Simpan");

simpanEnkripsi.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) {

simpanEnkripsiActionPerformed(evt); }

});

jButton1.setText("Kembali");

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

} });

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI NG) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel2) .addGap(336, 336, 336)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(prosesEnkripsi) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 298, Short.MAX_VALUE) .addComponent(GenerateKey) .addContainerGap()) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addComponent(PlainButton) .addContainerGap()) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel5)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(LamaEnkrip, javax.swing.GroupLayout.PREFERRED_SIZE, 331, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel6) .addContainerGap(43, Short.MAX_VALUE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 462, Short.MAX_VALUE) .addContainerGap()) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel4) .addContainerGap(433, Short.MAX_VALUE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addComponent(jButton1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 326, Short.MAX_VALUE) .addComponent(simpanEnkripsi) .addContainerGap()) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel3) .addContainerGap(451, Short.MAX_VALUE)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 462, Short.MAX_VALUE) .addContainerGap()))) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 462, Short.MAX_VALUE) .addContainerGap())) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI NG) .addGroup(jPanel1Layout.createSequentialGroup()

.addContainerGap() .addComponent(jLabel2) .addGap(97, 97, 97) .addComponent(PlainButton) .addGap(9, 9, 9) .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.BASELINE) .addComponent(prosesEnkripsi) .addComponent(GenerateKey)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(25, 25, 25) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.BASELINE) .addComponent(jLabel5) .addComponent(LamaEnkrip, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel6)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 18, Short.MAX_VALUE) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.BASELINE) .addComponent(simpanEnkripsi) .addComponent(jButton1)) .addContainerGap())

.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(41, 41, 41) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(370, Short.MAX_VALUE))) );

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel1)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); pack(); }// </editor-fold>

private void PlainButtonActionPerformed(java.awt.event.ActionEvent evt) { JFileChooser fileChooser = new JFileChooser();

fileChooser.setVisible(true);

int returnValue = fileChooser.showOpenDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) { String namaFile = fileChooser.getSelectedFile().getPath(); String[] cut_namafile = namaFile.split("\\.");

if (cut_namafile[1].equals("txt")) { File txt = fileChooser.getSelectedFile(); String line = "";

try {

BufferedReader br = new BufferedReader(new FileReader(txt)); while ((line = br.readLine()) != null) {

plainArea.setText(line); }

} catch (IOException ex) {

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

}

} else if (cut_namafile[1].equals("doc")) { File doc = fileChooser.getSelectedFile(); try {

WordExtractor we = new WordExtractor(new FileInputStream(doc)); } catch (IOException ex) {

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

private void GenerateKeyActionPerformed(java.awt.event.ActionEvent evt) { String key = otp.genKey(plainArea.getText().length());

enkripsiKey.setText(key); }

private void prosesEnkripsiActionPerformed(java.awt.event.ActionEvent evt) { long t1 = System.nanoTime();

String message = plainArea.getText(); String key = enkripsiKey.getText(); if (message.length() != key.length()) {

hasilEnkripsi.setText("Panjang pesan dan kunci harus sama!"); } else {

}

long t2 = System.nanoTime();

LamaEnkrip.setText("" + (t2 - t1) * java.lang.Math.pow(10, -9)); }

private void simpanEnkripsiActionPerformed(java.awt.event.ActionEvent evt) {

JFileChooser fileChooser = new JFileChooser(new File("E:/"));

fileChooser.setFileFilter(new FileNameExtensionFilter("Microsoft Word (*.doc)", "doc"));

fileChooser.setFileFilter(new FileNameExtensionFilter("Text Documents (*.txt)", "txt"));

FileOutputStream file_output_stream;

int returnValue = fileChooser.showSaveDialog(this); if (returnValue == JFileChooser.APPROVE_OPTION) { String filename = fileChooser.getSelectedFile().getPath(); String extension = fileChooser.getFileFilter().getDescription(); if (extension.equals("Microsoft Word (*.doc)")) {

File f = new File(filename + ".doc"); try {

file_output_stream = new FileOutputStream(f); } catch (FileNotFoundException e) {

e.printStackTrace(); return;

} try {

BufferedWriter bfw = new BufferedWriter(new FileWriter(f)); String outputEnkripsi = hasilEnkripsi.getText();

String[] cut_namaFile = outputEnkripsi.split("\\n"); FileWriter outFile = new FileWriter(f);

PrintWriter out = new PrintWriter(outFile, true); for (int i = 0; i < cut_namaFile.length; i++) { out.println("" + cut_namaFile[i].toString()); }

file_output_stream.close(); } catch (IOException ie) {

JOptionPane.showMessageDialog(this, "Penyimpanan Hasil Enkripsi Gagal Disimpan!!");

}

} else if (extension.equals("Text Documents (*.txt)")) { File f = new File(filename + ".txt");

try {

file_output_stream = new FileOutputStream(f); } catch (FileNotFoundException e) {

return; }

try {

String outputEnkripsi = hasilEnkripsi.getText(); String[] cut_namafile = outputEnkripsi.split("\\n"); FileWriter outFile = new FileWriter(f);

PrintWriter out = new PrintWriter(outFile, true); for (int i = 0; i < cut_namafile.length; i++) { out.println("" + cut_namafile[i].toString()); }

file_output_stream.close(); } catch (IOException ie) {

JOptionPane.showMessageDialog(this, "Penyimpanan Hasil Enkripsi Gagal Disimpan!!");

} }

File outKey = new File(filename + ".key"); try {

PrintWriter pw = new PrintWriter(outKey); pw.write(enkripsiKey.getText());

pw.flush(); pw.close();

} catch (FileNotFoundException ex) { ex.printStackTrace();

}

JOptionPane.showMessageDialog(this, "Penyimpanan Hasil Enkripsi dan Key Telah Berhasil Disimpan!! di " + filename);

simpanEnkripsi.setEnabled(true); }

}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { HalamanAwal awal = new HalamanAwal();

awal.setVisible(true); this.dispose();

}

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() { public void run() {

new HalamanEnkripsi().setVisible(true); }

}); }

private javax.swing.JButton GenerateKey; private javax.swing.JTextField LamaEnkrip; private javax.swing.JButton PlainButton; private javax.swing.JTextArea enkripsiKey; private javax.swing.JTextArea hasilEnkripsi; private javax.swing.JButton jButton1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JPanel jPanel1;

private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JTextArea plainArea; private javax.swing.JButton prosesEnkripsi; private javax.swing.JButton simpanEnkripsi;

}

3. Implementasi Kelas HalamanDekripsi.java

package skripsiotp; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileFilter; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.filechooser.FileNameExtensionFilter; public class HalamanDekripsi extends javax.swing.JFrame { public HalamanDekripsi() {

initComponents(); }

private OneTimePad otp = new OneTimePad();

private void initComponents() { jLabel1 = new javax.swing.JLabel(); jPanel1 = new javax.swing.JPanel(); jLabel2 = new javax.swing.JLabel();

jScrollPane1 = new javax.swing.JScrollPane(); dekripsiKey = new javax.swing.JTextArea(); CipherButton = new javax.swing.JButton(); jLabel3 = new javax.swing.JLabel();

jScrollPane2 = new javax.swing.JScrollPane(); cipherArea = new javax.swing.JTextArea(); KeyButton = new javax.swing.JButton(); prosesDekripsi = new javax.swing.JButton(); jLabel4 = new javax.swing.JLabel();

jScrollPane3 = new javax.swing.JScrollPane(); hasilDekripsi = new javax.swing.JTextArea(); jLabel5 = new javax.swing.JLabel();

LamaDekripsi = new javax.swing.JTextField(); jLabel6 = new javax.swing.JLabel();

simpanDekripsi = new javax.swing.JButton(); jButton1 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jLabel1.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N jLabel1.setText("Dekripsi");

jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

jLabel2.setFont(new java.awt.Font("Times New Roman", 1, 12)); // NOI18N jLabel2.setText("Ciphertext"); dekripsiKey.setColumns(20); dekripsiKey.setRows(5); jScrollPane1.setViewportView(dekripsiKey); CipherButton.setText("Browse"); CipherButton.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) { CipherButtonActionPerformed(evt);

} });

jLabel3.setFont(new java.awt.Font("Times New Roman", 1, 12)); // NOI18N jLabel3.setText("Key"); cipherArea.setColumns(20); cipherArea.setRows(5); jScrollPane2.setViewportView(cipherArea); KeyButton.setText("Browse"); KeyButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { KeyButtonActionPerformed(evt);

} });

prosesDekripsi.setText("Proses");

prosesDekripsi.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) {

prosesDekripsiActionPerformed(evt); }

});

jLabel4.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N jLabel4.setText("Output");

hasilDekripsi.setColumns(20); hasilDekripsi.setRows(5);

jScrollPane3.setViewportView(hasilDekripsi);

jLabel5.setFont(new java.awt.Font("Times New Roman", 0, 12)); // NOI18N jLabel5.setText("Lama Proses");

jLabel6.setText("detik");

simpanDekripsi.setText("Simpan");

simpanDekripsi.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) {

simpanDekripsiActionPerformed(evt); }

});

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

} });

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI NG) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel2) .addGap(336, 336, 336)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(prosesDekripsi) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 330, Short.MAX_VALUE) .addComponent(KeyButton) .addContainerGap()) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addComponent(CipherButton) .addContainerGap()) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel5) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(LamaDekripsi, javax.swing.GroupLayout.PREFERRED_SIZE, 331, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel6) .addContainerGap(43, Short.MAX_VALUE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()

.addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 462, Short.MAX_VALUE) .addContainerGap()) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel4) .addContainerGap(433, Short.MAX_VALUE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addComponent(jButton1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 326, Short.MAX_VALUE) .addComponent(simpanDekripsi) .addContainerGap()) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel3) .addContainerGap(451, Short.MAX_VALUE)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 462, Short.MAX_VALUE) .addContainerGap()))) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 462, Short.MAX_VALUE) .addContainerGap())) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI NG) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel2) .addGap(97, 97, 97) .addComponent(CipherButton) .addGap(9, 9, 9) .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(18, 18, 18) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.BASELINE) .addComponent(prosesDekripsi) .addComponent(KeyButton)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(25, 25, 25) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.BASELINE) .addComponent(jLabel5) .addComponent(LamaDekripsi, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel6)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 25, Short.MAX_VALUE) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.BASELINE) .addComponent(simpanDekripsi) .addComponent(jButton1)) .addContainerGap()) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(41, 41, 41) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(377, Short.MAX_VALUE))) );

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING) .addComponent(jLabel1) .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); pack(); }// </editor-fold>

private void CipherButtonActionPerformed(java.awt.event.ActionEvent evt) { JFileChooser fileChooser = new JFileChooser();

fileChooser.setVisible(true);

int returnValue = fileChooser.showOpenDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) { String namaFile = fileChooser.getSelectedFile().getPath(); String[] cut_namafile = namaFile.split("\\.");

if (cut_namafile[1].equals("txt")) { File txt = fileChooser.getSelectedFile();

String line = ""; try {

BufferedReader br = new BufferedReader(new FileReader(txt)); while ((line = br.readLine()) != null) {

cipherArea.setText(line); }

} catch (IOException ex) {

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

}

} else if (cut_namafile[1].equals("doc")) { File doc = fileChooser.getSelectedFile(); String line = "";

try {

BufferedReader br = new BufferedReader(new FileReader(doc)); while ((line = br.readLine()) != null) {

cipherArea.setText(line); }

} catch (IOException ex) { Logger.getLogger(HalamanDekripsi.class.getName()).log(Level.SEVERE, null, ex); } } } }

private void KeyButtonActionPerformed(java.awt.event.ActionEvent evt) { JFileChooser fileChooser = new JFileChooser();

FileNameExtensionFilter filter = new FileNameExtensionFilter("key file", "key");

fileChooser.addChoosableFileFilter(filter); fileChooser.setFileFilter(filter);

fileChooser.setVisible(true);

int returnValue = fileChooser.showOpenDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) { File key = fileChooser.getSelectedFile();

try {

BufferedReader br = new BufferedReader(new FileReader(key)); String line = "";

while ((line = br.readLine()) != null) { dekripsiKey.append(line);

br.close();

} catch (IOException ex) { Logger.getLogger(HalamanDekripsi.class.getName()).log(Level.SEVERE, null, ex); } } } //

private void prosesDekripsiActionPerformed(java.awt.event.ActionEvent evt) { long t1 = System.nanoTime();

String message = cipherArea.getText(); String key = dekripsiKey.getText(); if (message.length() != key.length()) {

hasilDekripsi.setText("Panjang pesan dan kunci harus sama!"); } else { hasilDekripsi.setText(otp.encrypt(message, key)); hasilDekripsi.setText(otp.decrypt(message, key)); } long t2 = System.nanoTime(); LamaDekripsi.setText("" + (t2 - t1) * java.lang.Math.pow(10, -9)); }

private void simpanDekripsiActionPerformed(java.awt.event.ActionEvent evt) {

JFileChooser fileChooser = new JFileChooser(new File("E:/"));

fileChooser.setFileFilter(new FileNameExtensionFilter("Microsoft Word (*.doc)", "doc"));

fileChooser.setFileFilter(new FileNameExtensionFilter("Text Documents (*.txt)", "txt"));

FileOutputStream file_output_stream;

int returnValue = fileChooser.showSaveDialog(this); if (returnValue == JFileChooser.APPROVE_OPTION) { String filename = fileChooser.getSelectedFile().getPath(); String extension = fileChooser.getFileFilter().getDescription(); if (extension.equals("Microsoft Word (*.doc)")) {

File f = new File(filename + ".doc"); try {

file_output_stream = new FileOutputStream(f); } catch (FileNotFoundException e) {

e.printStackTrace(); return;

} try {

BufferedWriter bfw = new BufferedWriter(new FileWriter(f)); String outputEnkripsi = hasilDekripsi.getText();

String[] cut_namaFile = outputEnkripsi.split("\\n"); FileWriter outFile = new FileWriter(f);

PrintWriter out = new PrintWriter(outFile, true); for (int i = 0; i < cut_namaFile.length; i++) { out.println("" + cut_namaFile[i].toString()); }

file_output_stream.close(); } catch (IOException ie) {

JOptionPane.showMessageDialog(this, "Penyimpanan Hasil Dekripsi Gagal Disimpan!!");

}

JOptionPane.showMessageDialog(this, "Penyimpanan Hasil Dekripsi Telah Berhasil Disimpan!! di " + filename);

} else if (extension.equals("Text Documents (*.txt)")) { File f = new File(filename + ".txt");

try {

file_output_stream = new FileOutputStream(f); } catch (FileNotFoundException e) {

e.printStackTrace(); return;

} try {

String outputDekripsi = hasilDekripsi.getText(); String[] cut_namafile = outputDekripsi.split("\\n"); FileWriter outFile = new FileWriter(f);

PrintWriter out = new PrintWriter(outFile, true); for (int i = 0; i < cut_namafile.length; i++) { out.println("" + cut_namafile[i].toString()); }

file_output_stream.close(); } catch (IOException ie) {

JOptionPane.showMessageDialog(this, "Penyimpanan Hasil Dekripsi Gagal Disimpan!!");

}

JOptionPane.showMessageDialog(this, "Penyimpanan Hasil Dekripsi Telah Berhasil Disimpan!! di " + filename);

}

simpanDekripsi.setEnabled(true); }

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { HalamanAwal awal = new HalamanAwal();

awal.setVisible(true); this.dispose();

}

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() { public void run() {

new HalamanDekripsi().setVisible(true); }

}); }

private javax.swing.JButton CipherButton; private javax.swing.JButton KeyButton; private javax.swing.JTextField LamaDekripsi; private javax.swing.JTextArea cipherArea; private javax.swing.JTextArea dekripsiKey; private javax.swing.JTextArea hasilDekripsi; private javax.swing.JButton jButton1;

private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JPanel jPanel1;

private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JButton prosesDekripsi; private javax.swing.JButton simpanDekripsi;

}

4. Implementasi Kelas OneTimePad.java

package skripsiotp;

public class OneTimePad {

public static String encrypt(String message, String key) { if (message.length() != key.length()) {

error("Lengths must be equal"); }

int[] im = charArrayToInt(message.toCharArray()); int[] ik = charArrayToInt(key.toCharArray());

int[] data = new int[message.length()]; for (int i = 0; i < message.length(); i++) { data[i] = (im[i] + ik[i])%256;

}

return new String(intArrayToChar(data)); }

public static String decrypt(String message, String key) { if (message.length() != key.length()) {

error("Lengths must be equal"); }

int[] im = charArrayToInt(message.toCharArray()); int[] ik = charArrayToInt(key.toCharArray()); int[] data = new int[message.length()];

for (int i = 0; i < message.length(); i++) { data[i] = (im[i] - ik[i])%256;

}

return new String(intArrayToChar(data)); }

public static String genKey(int length) {

MersenneTwisterFast rand = new MersenneTwisterFast(); char[] key = new char[length];

for (int i = 0; i < length; i++) { key[i] = (char) rand.nextInt(132); if ((int) key[i] < 97) {

key[i] = (char) (key[i] + 72); }

if ((int) key[i] > 122) {

key[i] = (char) (key[i] - 72); }

}

return new String(key); }

public static void main(String[] args) { }

private static int chartoInt(char c) { return (int) c;

private static char intToChar(int i) { return (char) i;

}

private static int[] charArrayToInt(char[] cc) { int[] ii = new int[cc.length];

for (int i = 0; i < cc.length; i++) { ii[i] = chartoInt(cc[i]);

} return ii; }

private static char[] intArrayToChar(int[] ii) { char[] cc = new char[ii.length];

for (int i = 0; i < ii.length; i++) { cc[i] = intToChar(ii[i]);

}

return cc; }

private static void error(String msg) { System.out.println(msg);

System.exit(-1); }

}

5. Implementasi Kelas MersenneTwisterFast.java

package skripsiotp; import java.math.BigInteger; import java.security.SecureRandom; import java.util.Random; import java.io.*; import java.util.*;

public strictfp class MersenneTwisterFast implements Serializable, Cloneable { // Serialization

private static final long serialVersionUID = -8219700664442619525L; // locked as of Version 15

// Period parameters

private static final int N = 624; private static final int M = 397;

private static final int MATRIX_A = 0x9908b0df; // private static final *

Dokumen terkait