Beberapa waktu yang lalu, saya mendapatkan tugas dari kuliah Keamanan Jaringan. Yah, bisa dibilang kalau mata kuliah ini adalah mata kuliah wajib. Jadi, mau nggak mau harus diambil. Dalam mata kuliah ini dijelaskan bahwa setiap data yang lalu lalang di dalam jaringan tidak selalu aman. Oleh karena itu, dibutuhkan tindakkan pengamanan. Langkah pengamanan ini meliputi pengunaan ptotokol jaringan aman atau pengenkripsian data.
Apa itu enkripsi?
Ada banyak sekali algoritma pengenkripsian data. Namun, secara garis besar dapat digolongkan menjadi 2 bagian, yaitu enkripsi simetris dan asimetris. Letak perbedaan dari keduannya adalah pada kuncinya (key).
Pada enkripsi simetris, kunci yang digunakan untuk mendekrip sama dengan kunci untuk mengenkrip. Sehingga, apabila pihak luar mengetahui algoritma sekaligus kuncinya maka pesan dapat diketahui. Enkripsi ini sering disebut enkripsi klasik. Berbeda pada enkripsi asimetris. Enkripsi asimetris melibatkan dua kunci untuk saling mengenkripsi dan mendekripsi. Kunci yang pertama digunakan untuk mengenkripsi, disebut public key. Public key ini akan digunakan oleh pengirim pesan untuk mengenkripsi pesan. Walaupun orang lain mendapatkan public key ini, orang tersebut tidak bisa menerjemahkan chippertext-nya. Dipihak penerima, terdapat sebuah kunci yang disebut private key. Private key ini berfungsi untuk mendekrip pesan yang dikirimkan oleh pihak lainnya. Private key ini bersifat rentan, sehingga pihak penerima tidak boleh membiarkan pihak lain mengetahuinya.
Terdapat banyak algoritma dari enkripsi simetris. Salah satunya adalah algoritma Vigenere. Algoritma ini merupakan algoritma yang telah lama dipakai. Vigenere ditemukan oleh Giovan Battista Bellaso pada abad 19.
Vigenere Chiper
Itu tadi adalah sepintas mengenai enkripsi dan Vigenere Chiper. Selanjutnya adalah paparan mengenai bagaimana cara membuat enkripsi dan dekripsi Vigenere Chiper menggunakan bahasa pemrograman Java.
Berikut langkah-langkah yang harus dikerjakan:
1. Menentukan jenis karakter (Apakah ASCII ataukah beberapa karakter yang telah ditentukan)
2. Mernentukkan jumlah dari karakter total
3. Menuliskan daftar fungsi-fungsi yang kemungkinan dipergunakan.
4. Menuliskan Kode pokok
5. Menuliskan Kode tambahan (Interface dan I/O)
Pembahasan
Langkah 1 (Membuat Class Vigenere)
Jika menggunakan karakter yang terbatas, karakter tersebut harus didefinisikan dahulu dalam sebuah kamus yang berbentuk String. Selanjutnya, dapat di loop sepanjang length. Pembatasan karakter ini, akan mengakibatkan kegagalan dekripsi jika user memasukkan karakter tidak ada dalam kamus. Walaupun begitu, tidak ada salahnya jika jenis Vigenere ini dibuat.
Langkah 2 (Menentukan Jumlah Karakter)
Untuk aplikasi yang menggunakan kamus, dapat digunakan sytax length dalam menentukkan jumlah huruf. Sedangkan untuk ASCII, jumlah karakter total adalah 256.
Langkah 3 (Menuliskan Daftar Fungsi)
Fungsi-fungsi yang kemungkinan digunakan adalah:
1. Looping untuk mengulang huruf dalam kalimat yang akan dienkripsi (looping kalimat)
2. Fungsi untuk mengecek karakter spasi didalam looping
3. Looping untuk mengulang kunci yang ada didalam looping kalimat
4. Fungsi untuk mengkonversi dari alfabet menjadi integer agar dapat dihitung
5. Fungsi menghitung
6. Fungsi untuk mengkonversi dari integer menjadi alfabet
7. Fungsi main
Langkah 4 (Menuliskan Kode)
Nah, berdasarkan daftar fungsi diatas kita bisa maka sytax dari kode diatas adalah sebagai berikut:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package pengamanajaringan;
/**
*
* @author blackhiden.blogspot.com
*/
public class Vigenere {
private String Input; //Input teks
private String Output; //Output teks
private String Key; //Key dari enkripsi Vigenere
private final int PanjangKamus = 51; //jumlah dari kamus
//kamus yang dipergunakan A-Za-z
private final String Kamus = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
public Vigenere(){
}
public String getInput() {
return Input;
}
public String getOutput() {
return Output;
}
public String getKey() {
return Key;
}
public void setInput(String Input) {
this.Input = Input;
}
public void setOutput(String Output) {
this.Output = Output;
}
public void setKey(String Key) {
this.Key = Key;
}
//merubah char
private int chartoInt(char inKey){
int k = 0;
for (int i = 0; i < Kamus.length(); i++) {
if (inKey == Kamus.charAt(i)) {
k = i;
break;
}
}
return k;
}
//Enkripsi
public String VigenereEn(){
int h;
int k=0;
for (int i = 0; i < Input.length(); i++) {
if (Input.charAt(i) == ' ') { //cek spasi agar struktur huruf tidak berubah
Output += " ";
} else {
if (k < Key.length()) {
h = hitungVi(chartoInt(Input.charAt(i)),chartoInt(Key.charAt(k)));
Output += Kamus.charAt(h);
k++;
} else {
k = 0;
h = hitungVi(chartoInt(Input.charAt(i)), chartoInt(Key.charAt(k)));
Output += Kamus.charAt(h);
k++;
}
}
}
return Output;
}
public String VigenereDe(){
int h;
int k=0;
for (int i = 0; i < Input.length(); i++) {
if (Input.charAt(i) == ' ') {
Output += " ";
} else {
if (k < Key.length()) {
h = hitungViDe(chartoInt(Input.charAt(i)),chartoInt(Key.charAt(k)));
Output += Kamus.charAt(h);
k++;
} else {
k = 0;
h = hitungViDe(chartoInt(Input.charAt(i)), chartoInt(Key.charAt(k)));
Output += Kamus.charAt(h);
k++;
}
}
}
return Output;
}
private int hitungVi(int p, int k){
int o = (p + k) ;
if (o > PanjangKamus) {
o %= PanjangKamus;
System.out.println(o);
}
return o;
}
private int hitungViDe(int p, int k){
int o = (p - k);
if (o < 0) {
o += PanjangKamus;
}
return o;
}
}
|
Langkah 5 (Tampilan dan I/O)
Untuk terakhir, anda bisa membuat interface untuk I/.O.
Semoga anda paham dan mengerti.
Selamat ber-coding ria.