• Tidak ada hasil yang ditemukan

IMPLEMENTASI ALGORITMA CHIPER CAESAR UNTUK ENKRIPSI DAN DEKRIPSI PADA TABEL ASCII MENGGUNKAN BAHASA JAVA

N/A
N/A
Protected

Academic year: 2021

Membagikan "IMPLEMENTASI ALGORITMA CHIPER CAESAR UNTUK ENKRIPSI DAN DEKRIPSI PADA TABEL ASCII MENGGUNKAN BAHASA JAVA"

Copied!
6
0
0

Teks penuh

(1)

IMPLEMENTASI ALGORITMA CHIPER CAESAR UNTUK ENKRIPSI DAN

DEKRIPSI PADA TABEL ASCII MENGGUNKAN BAHASA JAVA

Galih Fathul Rohmi, Entik Insannudin

Teknik Informatika UIN Sunan Gunung Djati Bandung

email :galih.fathulrohmi@student.uinsgd.ac.id; insan@if.uinsgd.ac.id

Abstraksi

Kriptografi adalah seni untuk menjaga kerahasiaan dan keamanan suatu pesan yang akan dikirim maupun diterima. Banyak metode yang bisa digunakan untuk melakukan seni ataupun ilmu kriptopgrafi. Pada jurnal ini, penulis akan membahas mengenai implementasi algoritma kriptografi klasik chiper caesar menggunakan bahasa java yang dicoding menggunakan netbeans berdasarkan tabel ASCII. Kriptografi secara umum digunakan dalam bidang informasi. Selain kriptografi ada juga bidang lain yang digunakan untuk memecahkan dan menganalisis sistem keamanan komunikasi. Bidang tersebut dinamakan kriptanalisis. Selain itu kriptanalisis disebut juga sebagai sebagai attackers atau penyerang.

Kata Kunci :

Chiper Caesar, Netbeams, JAVA, kriptografi

Pendahuluan

Kriptografi adalah ilmu dan juga seni yang mempelajari tentang cara menjaga keamanan suatu pesan atau informasi. Pesan atau informasi dapat dikategorikan ke dalam dua jenis, yaitu pesan yang dapat dibaca dengan mudah (plaintext) dan pesan yang tidak mudah untuk dibaca (ciphertext). Untuk melakukan kriptografi digunakan algoritma kriptografi. Algoritma kriptografi terdiri dari dua bagian, yaitu fungsi enkripsi dan dekripsi. Enkripsi adalah proses untuk merubah plaintext menjadi ciphertext, sedangkan dekripsi adalah kebalikannya yaitu merubah ciphertext menjadi plaintext. Salah satu teknik enkripsi adalah teknik subtitusi, yaitu mengganti setiap karakter plaintext dengan karakter lain. Terdapat empat cara dalam menggunakan teknik subtitusi, yaitu :

a) Monoalphabet, dimana setiap karakter ciphertext mengganti satu macam karakter plaintext tertentu.

b) Polialphabet, dimana setiap karakter ciphertext mengganti lebih dari satu macam karakter plaintext.

c) Monograf/unilateral, dimana satu enkripsi dilakukan terhadap satu karakter plaintext. Monograf/unilateral, dimana satu enkripsi dilakukan terhadap satu karakter plaintext. d) Poligraf/multilateral, dimana satu enkripsi

dilakukan terhadap lebih dari satu karakter plaintext.

Teknik enkripsi substitusi yang pertama kali dikenal dan paling sederhana ditemukan oleh Julius Caesar. Metode yang digunakan dalam caesar chiper ini adalah dengan mempertukarkan atau mengganti setiap huruf dari plaintext dengan huruf

lain dengan interval 3 huruf dari huruf plaintext. Sebagai contoh dapat dilihat di bawah ini :

Untuk menyandikan sebuah pesan, cukup mencari setiap huruf yang hendak disandikan di alfabet biasa, lalu tuliskan huruf yang sesuai pada alfabet sandi. Untuk memecahkan sandi tersebut gunakan cara sebaliknya. Contoh penyandian sebuah pesan adalah sebagai berikut. teks terang: kirim pasukan ke sayap kiri teks. Dan hasil enkripsi tersebut adalah: NLULP SDVXNDQ NH VDBDS NLUL

Proses enkripsi dapat secara matematis menggunakan operasi modulus dengan mengubah huruf-huruf menjadi angka, A = 0, B = 1,..., Z = 25. Sandi (En) dari "huruf" x dengan geseran n secara matematis dituliskan dengan, Sedangkan pada proses pemecahan kode (dekripsi), hasil dekripsi (Dn) adalah Setiap huruf yang sama digantikan oleh huruf yang sama di sepanjang pesan, sehingga sandi Caesar digolongkan kepada, substitusi monoalfabetik, yang berlawanan dengan substitusi polialfabetik.

Tinjauan Pustaka

Pada proses pembuatan program ini penulis melakukan observasi mengenai algoritma chiper caesar pada beberapa bahasa pemograman. Masih banyak yang menggunakan huruf alfabet standar dalam pembuatannya. Disini penulis akan mengimplementasikan dan menggabungkan antar kriptografi dengan tabel ASCII bukan hanya alfabet biasa pada umumunya dengan menggunakan java netbeans untuk pemogramannya.

Gambar 3. Proses enkripsi dan dekripsi simetri klasik

(2)

Berikut rumus enkripsi dan dekripsi cipher caesar untuk penggunaan alfabet standar:

a. Enkripsi

Ci = (Pi + K) mod 26

b. Dekripsi

Pi = (Ci - K) mod 26

Berikut rumus enkripsi dan dekripsi cipher caesar untuk penggunaan tabel ASCII:

a. Enkripsi

Ci = (Pi + K) mod 256

b. Dekripsi

Pi = (Ci - K) mod 526

Keterangan:

Ci = nilai desimal karakter ciphertext ke-i

Pi = nilai desimal karakter plaintext ke-i

K = nilai desimal karakter kunci ke-i mod 256 = karena berdasarkan ASCII

Gambar 1. Tabel ACII (simbol)

Gambar 2. Tabel ACII (teks)

Metode Penelitian

Dalam perkembangan ilmu kriptografi semakin luas dan banyak sekali dimanfaatkan terutama dalam mengamankan informasi atau pesan.

Pada Cipher Caesar kunci K adalah urutan huruf-huruf K = k……kn dimana ki didapat dari banyak penggeseran pada alphabet ke-i.

Pada kasus ini untuk algoritma klasiknya sendiri diterapkan pada aspek pensubtitusian hurufnya dengan melihat tabel ASCII dalam langkah enkripsi maupun dekripsinya.

Langkah Enkripsi pada implentasi di program ini adalah memasukan plaintext dan kunci sesuai dengan keinginan. Lalu palintext dan kunci tersebut digeser 1 huruf kebelakang (tabel ASCII). Setelah itu jumlahkan banyaknya kunci untuk huruf pertama di enkripsi. Contoh:

Plaintext: kripto  lsjqup

Kunci: grafi  hsbgj (lalu jumlahkan banyaknya kunci pada kasus ini ada 5 huruf jadi rumusnya : jumlah huruf+1)

Chipertext : 6hsbgjlsjqup

Untuk aturan penulisannya dimulai dari jumlah kunci lalu disusul kunci dan plaintext.

Langkah Dekripsi pada implementasi di program ini memasukan chipertext dan kunci yang sama digunakan pada saat melakukan enkripsi supaya berhasil untuk didekripsi kembali. Tidak beda jauh dengan proses enkripsi hanya saja di ganti dengan penambahan satu huruf kedepan dan membuang jumlah kunci yang ada.

Chipertext: lsjqup  kripto

Kunci: grafi (lalu hilangakn jumlah kunci dan kunci) Plaintext : kripto

Hasil dan Pembahasan

Penulis menggunakan bahasa pemograman java netbean dalam pembuatan program algoritma chiper caesar. Pada program ini terdapat beberapa fungsi button yang sengaja dibuat untuk memudahkan user. Berikut adalah source serta

screenshot dari demo program yang telah penulis

buat:

Gambar 4. program Chiper Caesar

Berikut source code algoritma Chiper caesar ASCII: package progenkripsi;

(3)

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.StringTokenizer; import javax.swing.JFileChooser; import javax.swing.JOptionPane; public class FormEnkrip extends javax.swing.JFrame {

private JFileChooser dialog = new JFileChooser(); public FormEnkrip() { initComponents(); } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() {

jScrollPane1 = new javax.swing.JScrollPane(); jTextArea1 = new javax.swing.JTextArea(); jLabel1 = new javax.swing.JLabel(); jPasswordField1 = new

javax.swing.JPasswordField();

btBuka = new javax.swing.JButton(); btSimpan = new javax.swing.JButton(); btKeluar = new javax.swing.JButton(); jScrollPane3 = new javax.swing.JScrollPane(); txtChiperText = new javax.swing.JTextArea(); jScrollPane4 = new javax.swing.JScrollPane(); txtPlaintext = new javax.swing.JTextArea(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); btEnkrip = new javax.swing.JButton(); btDekrip = new javax.swing.JButton(); txtKey = new javax.swing.JTextField(); jLabel6 = new javax.swing.JLabel();

jScrollPane2 = new javax.swing.JScrollPane(); jTextArea1.setColumns(20); jTextArea1.setRows(5); jScrollPane1.setViewportView(jTextArea1); jLabel1.setText("===>"); jPasswordField1.setText("jPasswordField1"); setDefaultCloseOperation(javax.swing.WindowCon stants.EXIT_ON_CLOSE); setTitle("Program Enkripsi"); setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURS OR)); setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N setModalExclusionType(null); setResizable(false); btBuka.setText("Buka File"); btBuka.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btBukaActionPerformed(evt); } }); btSimpan.setText("Simpan"); btSimpan.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btSimpanActionPerformed(evt); } }); btKeluar.setText("Keluar"); btKeluar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btKeluarActionPerformed(evt); } }); txtChiperText.setColumns(20); txtChiperText.setRows(5); jScrollPane3.setViewportView(txtChiperText); txtPlaintext.setColumns(20); txtPlaintext.setRows(5); jScrollPane4.setViewportView(txtPlaintext); jLabel2.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N jLabel2.setText("Implementasi Algoritma Chiper Caesar "); jLabel3.setText("Plaintext"); jLabel4.setText("Chipertext"); btEnkrip.setText("Enkirpsi"); btEnkrip.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btEnkripActionPerformed(evt); } });

(4)

btDekrip.setText("Dekripsi"); btDekrip.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btDekripActionPerformed(evt); } }); txtKey.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { txtKeyKeyPressed(evt); } }); jLabel6.setText("Masukan Key"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayou t.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(jav ax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGrou p() .addGap(14, 14, 14) .addGroup(layout.createParallelGrou p(javax.swing.GroupLayout.Alignment.TRAILING, false) .addGroup(javax.swing.GroupLayo ut.Alignment.LEADING, layout.createSequentialGroup() .addGroup(layout.createParallel Group(javax.swing.GroupLayout.Alignment.LEADI NG) .addComponent(txtKey, javax.swing.GroupLayout.PREFERRED_SIZE, 125, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel6)) .addPreferredGap(javax.swing.L ayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createParallel Group(javax.swing.GroupLayout.Alignment.LEADI NG, false) .addGroup(layout.createSeque ntialGroup() .addComponent(btEnkrip, javax.swing.GroupLayout.PREFERRED_SIZE, 113, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swi ng.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(btDekrip, javax.swing.GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSeque ntialGroup() .addComponent(btSimpan, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swi ng.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btBuka) .addPreferredGap(javax.swi ng.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btKeluar, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addGroup(javax.swing.GroupLayo ut.Alignment.LEADING, layout.createSequentialGroup() .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 224, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.L ayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 224, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addGroup(layout.createSequentialGrou p() .addGap(64, 64, 64) .addComponent(jLabel2))) .addContainerGap(20, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addGap(93, 93, 93) .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyl e.ComponentPlacement.RELATED, 200, Short.MAX_VALUE) .addComponent(jLabel4) .addGap(102, 102, 102)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayou t.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel2) .addGap(3, 3, 3) .addGroup(layout.createParallelGroup(jav ax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel3) .addComponent(jLabel4)) .addGap(9, 9, 9) .addGroup(layout.createParallelGroup(jav ax.swing.GroupLayout.Alignment.LEADING, false)

(5)

.addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 219, Short.MAX_VALUE) .addComponent(jScrollPane3)) .addPreferredGap(javax.swing.LayoutStyl e.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(jav ax.swing.GroupLayout.Alignment.BASELINE) .addComponent(btEnkrip) .addComponent(btDekrip) .addComponent(jLabel6)) .addGap(4, 4, 4) .addGroup(layout.createParallelGroup(jav ax.swing.GroupLayout.Alignment.BASELINE) .addComponent(btSimpan) .addComponent(btBuka) .addComponent(btKeluar) .addComponent(txtKey, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLay out.DEFAULT_SIZE, Short.MAX_VALUE)) ); pack(); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize() ;

java.awt.Dimension dialogSize = getSize();

setLocation((screenSize.width- dialogSize.width)/2,(screenSize.height-dialogSize.height)/2);

}// </editor-fold> //BUTTON OPEN FILE private void

btBukaActionPerformed(java.awt.event.ActionEvent evt) {

txtChiperText.setText(null);

int isi = dialog.showOpenDialog(this); if (isi == JFileChooser.APPROVE_OPTION) { //jika file dipilih open

File file = dialog.getSelectedFile(); try{

FileInputStream fstream = new FileInputStream(file); DataInputStream in = new DataInputStream(fstream); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String strLine;

while ((strLine = br.readLine()) != null){ StringTokenizer st = new StringTokenizer(strLine, ","); txtChiperText.setText(txtChiperText.getText() + st.nextToken() +"\n"); } in.close();

}catch (Exception e){

System.err.println("Error: " + e.getMessage());

} }

} //BUTTON SIMPAN FILE private void

btSimpanActionPerformed(java.awt.event.ActionEv ent evt) {

int isi = dialog.showSaveDialog(this); if (isi == JFileChooser.APPROVE_OPTION) { // jika file di pilih untuk di simpan

File file = dialog.getSelectedFile(); try {

file.createNewFile();

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(file))); out.print(txtChiperText.getText()); out.flush();

}

catch (IOException ex) { System.err.println("Error: " + ex.getMessage()); } } } // BUTTON KELUAR private void btKeluarActionPerformed(java.awt.event.ActionEve nt evt) { System.exit(1); } // BUTTON ENKRIPSI DATA private void

btEnkripActionPerformed(java.awt.event.ActionEve nt evt) {

String key = txtKey.getText(); String isitext =

(key.length())+key+txtPlaintext.getText(); String out= "" ;

for (int i = 0; i < isitext.length(); i++) { int index = isitext.charAt(i);

char s = (char)(index+1) ; out = out+ String.valueOf(s); } txtChiperText.setText(out); txtPlaintext.setText(""); txtKey.setText(""); }

// BUTTON DEKRIPSI DATA private void

btDekripActionPerformed(java.awt.event.ActionEve nt evt) {

String isitext = txtChiperText.getText(); char k = (char)(isitext.charAt(0)); String key = "",out = "";

(6)

int jumKey =

Integer.parseInt(String.valueOf(k))-1; //

JOptionPane.showMessageDialog(null,jumKey); // buka password

for (int i = 1 ; i <= jumKey; i++) { int index = isitext.charAt(i); char s = (char)(index-1) ; key = key + String.valueOf(s); }

// JOptionPane.showMessageDialog(null,key);

if (key.equals(txtKey.getText())){ // hasil true for (int i = (jumKey+1) ; i < isitext.length(); i++) {

int index = isitext.charAt(i); char s = (char)(index-1) ; out = out + String.valueOf(s); } txtPlaintext.setText(out); } else{ JOptionPane.showMessageDialog(null,"Key tidak cocok \nSilahkan coba lagi");

}

} private void

txtKeyKeyPressed(java.awt.event.KeyEvent evt) { // TODO add your handling code here:

}

public static void main(String args[]) {

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

@Override public void run() {

new FormEnkrip().setVisible(true); }

}); }

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

private javax.swing.JButton btDekrip; private javax.swing.JButton btEnkrip; private javax.swing.JButton btKeluar; private javax.swing.JButton btSimpan; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel6; private javax.swing.JPasswordField jPasswordField1;

private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JScrollPane jScrollPane4;

private javax.swing.JTextArea jTextArea1; private javax.swing.JTextArea txtChiperText; private javax.swing.JTextField txtKey; private javax.swing.JTextArea txtPlaintext; // End of variables declaration }

Kesimpulan dan Saran

Dalam pengimplementasian algortiam klasik chiper caesar untuk enkripsi-dekripsi dengan menggunakan table ASCII sebagai acuan memberikan kemungkinan lebih banyak karakter yang tercakup dari pada menggunakan huruf alfabet biasa yang tidak mencakup karakter.

Dengan belajar kriptografi setidaknya kita bisa mengaplikasikannya dalam mengamankan kerahasiaan informasi atau pesan yang akan dikirim maupun di terima.

Saran untuk penulis, penulis mengharapkan krittik dan saran yang membangun guna perbaikan serta pengembangan progam agar dapat lebih baik dan mempunyai daya saing di era kedepan.

Daftar Pustaka

.

[1] Kester, Quist-Aphetsi., 2013, A HYBRID CRYPTOSYSTEM BASED ON VIGENÈRE CIPHER AND COLUMNAR TRANSPOSITION CIPHER,

Proceeding IJATER. Accra North, Ghana

[2] Rinaldi Munir, Kriptografi. Bandung, Indonesia: Penerbit Informatika, 2006.

[3] Novi Dian Ntathasia, Anang Eko Wicaksono, “Penerapan Teknik Kriptografi Stream Chiper Untuk Pengaman Basis Data,” Jurnal Basis Data, vol. 6, no.1, p. 22, Mei 2011.

[4] Unknow, 12 Januari 2014, ASCII Table and

Description, http://www.asciitable.com

[5] Khannedy, Eko Kurniawan, 2012. “Pemrograman GUI menggunakan Java dan NetBeans

[6] Arius, Doni. (2008). ”Pengantar Ilmu

KRIPTOGRAFI, Teori, Analisis dan Implementasi”. Yogyakarta.

Gambar

Gambar 1. Tabel ACII (simbol)

Referensi

Dokumen terkait

dengan tumpuan sendi di ujung yang satu dan rol pada ujung yang lainnya. Pembebanan dilakukan dengan menggunakan beban dua titik di sepertiga bentang yaitu sebesar 750

Dengan pengaturan Motor, Sensor infra merah, serta Switch dengan menggunakan mikrokontroller, diharapkan Robot Pemadam yang akan dibuat dapat bergerak sesuai dengan mekanis dan

Peningkatan skor rata-rata menunjukkan bahwa pembelajaran dengan menggunakan LVEP memberikan pengaruh yang positif terhadap penanaman karakter nasionalisme yang

1) Bagi Pemerintah Daerah, memberikan informasi bagi pemerintah daerah untuk menyusun dan mengambil kebijakan tentang program pendidikan nilai/karakter

(DER) dan Earning Per Share (EPS) terhadap harga saham pada perusahaan otomotif yang terdaftar di Bursa Efek Indonesia (BEI) tahun 2013- 2016 ”.

Berdasarkan latar belakang di atas, yang menjadi tujuan dalam penelitian ini adalah untuk Mengetahui Hubungan Antara Penanaman Nilai Kedisiplinan Terhadap Hasil Belajar PKn

Bertujuan menganalisis implementasi, relevansi Pendidikan Kewarganegaraan dalam mendukung nilai karakter religius, serta menganalisis kendala dan upaya dalam

Puji dan syukur penulis panjatakan kepada Allah Bapa di surga, Tuhan Yesus Kristus, Bunda Maria, Roh Kudus atas semua berkat, pendampingan, dan kasih karunia-Nya yang begitu