Enkripsi Caesar Cipher dengan Java

Yudi Setiawan 20 Januari 2016

Enkripsi Caesar Cipher dengan Java

Enkripsi merupakan salah satu teknik keamanan yang paling sering digunakan. Banyak data yang bisa di enkrip misal, isi pesan, citra digital(gambar), password penting dan lain sebagainya. Salah satu teknik dasar yang umum dipelajari dalam enkripsi ialah Caesar Cipher. Caesar Cipher merupakan salah satu teknik dasar yang sangat mudah dipelajari karena, pada dasarnya teknik caesar cipher hanya melakukan pergeseran karakter sesuai dengan value key yang diberikan oleh si pengaman data. "Maksud pergeseran karakter itu gimana ya?" Setiap huruf alphabet dimulai dari huruf A s.d. Z atau a s.d. z diberi nomor angka seperti berikut.

A = 0
B = 1
C = 2
D = 3
E = 4
F = 5
G = 6
H = 7
I = 8
J = 9
K = 10
L = 11
M = 12
N = 13
O = 14
P = 15
Q = 16
R = 17
S = 18
T = 19
U = 20
V = 21
W = 22
X = 23
Y = 24
Z = 25

catatan, bahwa pemberian nomor huruf ini tidak ada perbedaan antara huruf kecil atau huruf kapital. Nah, seperti pada keterangan diatas bahwa setiap huruf di beri nomor agar kita bisa melakukan proses enkripsi caesar cipher. Sebelum masuk ke coding, berikut rumus untuk Enkripsi dan Dekripsi Caesar.

Rumus Enkripsi --> C = (nomor_karakter_plain_text + key) mod 26

Rumus Dekripsi --> P = (nomor_karakter_cipher_text - key) mod 26

Setelah Anda tahu kedua rumus diatas, saatnya let's rock n roll bro. Berikut contoh kasusnya.

Contoh Kasus:

Diberikan sebuah kata seperti berikut.

I AM PROGRAMMER

Kemudian, ubahlah kata diatas dengan menggunakan teknik Enkripsi Caesar Cipher menggunakan key bulan lahir( si penulis lahir bulan desember jadi, key nya 12).

Berikut langkah-langkahnya:

  1. Huruf : I
    Nomor Karakter Huruf I = 8
    C = (8 + 12) mod 26
    C = (20) mod 26
    C = 20 --> Huruf U (U merupakan nomor huruf karakternya 20)
  2. Huruf : A
    Nomor Karakter Huruf A = 0
    C = (0 + 12) mod 26
    C = (12) mod 26
    C = 12 --> Huruf M
  3. Huruf : M
    Nomor Karakter Huruf M = 12
    C = (12 + 12) mod 26
    C = (24) mod 26
    C = 24 --> Y
  4. Huruf : P
    Nomor Karakter Huruf P = 15
    C = (15 + 12) mod 26
    C = (27) mod 26
    C = 1 --> B
  5. Huruf : R
    Nomor Karakter Huruf R = 17
    C = (17 + 12) mod 26
    C = (29) mod 26
    C = 3 --> D
  6. Huruf : O
    Nomor Karakter Huruf O = 14
    C = (14 + 12) mod 26
    C = (26) mod 26
    C = 0 --> A
  7. Huruf : G
    Nomor Karakter Huruf G = 6
    C = (6 + 12) mod 26
    C = (18) mod 26
    C = 18 --> S
  8. Huruf : R
    Nomor Karakter Huruf R = 17
    C = (17 + 12) mod 26
    C = (29) mod 26
    C = 3 --> D
  9. Huruf : A
    Nomor Karakter Huruf A = 0
    C = (0 + 12) mod 26
    C = (12) mod 26
    C = 12 --> M
  10. Huruf : M
    Nomor Karakter Huruf M = 12
    C = (12 + 12) mod 26
    C = (24) mod 26
    C = 24 --> Y
  11. Huruf : M
    Nomor Karakter Huruf M = 12
    C = (12 + 12) mod 26
    C = (24) mod 26
    C = 24 --> Y
  12. Huruf : E
    Nomor Karakter Huruf E = 4
    C = (4 + 12) mod 26
    C = (16) mod 26
    C = 16 --> Q
  13. Huruf : R
    Nomor Karakter Huruf R = 17
    C = (17 + 12) mod 26
    C = (29) mod 26
    C = 3 --> D

Jadi, setelah dilakukan proses enkripsi maka, hasil akhir dari kata tersebut setelah di enkripsi ialah menjadi U MY BDASDMYYQD. Gimana? asik bukan belajar enkripsi. Jadi, kita bisa kirim-kiriman pesan rahasia deh sama pacar atau selingkuhan kita :D hehehehe....

Nah, sekarang bagaimana cara kita mengembalikan kata yang sudah di enkripsi tadi kembali menjadi plain text atau kata yang sebenarnya sebelum di enkrip.

Masih menggunakan kata yang sudah kita enkrip tadi dan key yang sama yakni 12. Berikut langkah-langkahnya.

  1. Huruf : U
    Nomor Karakter Huruf U : 20
    P = (20 - 12) mod 26
    P = (8) mod 26
    P = 8 --> I
  2. Huruf : M
    Nomor Karakter Huruf M : 12
    P = (12 - 12) mod 26
    P = (0) mod 26
    P = 0 --> A
  3. Huruf : Y
    Nomor Karakter Huruf Y : 24
    P = (24 - 12) mod 26
    P = (12) mod 26
    P = 12 --> M
  4. Huruf : B
    Nomor Karakter Huruf B : 1
    P = (1 - 12) mod 26
    P = (-11) mod 26
    P = 26 - 11
    P = 15 --> P
  5. Huruf : D
    Nomor Karakter Huruf D : 3
    P = (3 - 12) mod 26
    P = (-9) mod 26
    P = 26 - 9
    P = 17 --> R
  6. Huruf : A
    Nomor Karakter Huruf A : 0
    P = (0 - 12) mod 26
    P = (-12) mod 26
    P = 26 - 12
    P = 14 --> O
  7. Huruf : S
    Nomor Karakter Huruf S : 18
    P = (18 - 12) mod 26
    P = (6) mod 26
    P = 6 --> G
  8. Huruf : D
    Nomor Karakter Huruf D : 3
    P = (3 - 12) mod 26
    P = (-9) mod 26
    P = 26 - 9
    P = 17 --> R
  9. Huruf : M
    Nomor Karakter Huruf M : 12
    P = (12 - 12) mod 26
    P = (0) mod 26
    P = 0 --> A
  10. 10. Huruf : Y
    Nomor Karakter Huruf Y : 24
    P = (24 - 12) mod 26
    P = (12) mod 26
    P = 12 --> M
  11. Huruf : Y
    Nomor Karakter Huruf Y : 24
    P = (24 - 12) mod 26
    P = (12) mod 26
    P = 12 --> M
  12. Huruf : Q
    Nomor Karakter Huruf Q : 16
    P = (16 - 12) mod 26
    P = (4) mod 26
    P = 4 --> E
  13. Huruf : D
    Nomor Karakter Huruf D : 3
    P = (3 - 12) mod 26
    P = (-9) mod 26
    P = 26 - 9
    P = 17 --> R

Jadi, kata cipher diatas setelah di dekrip menggunakan Teknik Caesar maka, isi pesan sebenarnya ialah I AM PROGRAMMER. Dan berikut ialah source code di Java.

import java.util.Scanner;

/** *

  • @author Yudi Setiawan

*/ public class Main { public static void main(String[] args) {

    //  variable
    String kata = "I AM PROGRAMMER";   
    int key = 12;                      
    String[] huruf = new String[26];
   
    //  isi array huruf
    for(char c = 'A'; c <= 'Z'; c++)
        huruf[c - 65] = String.valueOf(c);     
   
    //  Tampilkan Plain Text
    System.out.println("Plain Text : "+kata);
   
    //  Proses Enkripsi
    String cipher = "";
    loop1:
    for(int a = 0; a < kata.length(); a++)
    {                  
        //  cari nomor dari tiap huruf variable kata
        int index_plain = -1;
        for(int b = 0; b < huruf.length; b++)
        {
            // Teknik Penulisan Short Hand If Else
            index_plain = (String.valueOf(kata.charAt(a)).equals(huruf[b])) ? b : -1;
            // Jika Ketemu Karakternya
            if(index_plain != -1)
            {
                // Rumus Enkripsi --> C = (nomor_karakter_plain + key) mod 26                  
                cipher += huruf[(index_plain + key) % 26];
                continue loop1;
            }              
        }
       
        //  Jika plain text tidak mengandung huruf maka, langsung dimasukkan ke variable cipher
        //  Misal, spasi atau angka
        cipher += kata.charAt(a);
    }
   
    //  Tampilkan hasil cipher
    System.out.println("Cipher Text : "+cipher);
   
    //  Konfirmasi apakah ingin di dekrip
    System.out.print("Apakah ingin di dekrip(Y/N)? ");
    String jawab = new Scanner(System.in).nextLine();
           
    if(jawab.equalsIgnoreCase("Y"))
    {          
        String plaintext = "";
       
        //  Proses Dekrip
        loop1:
        for(int a = 0; a < cipher.length(); a++)
        {
           
            //  Cari nomor tiap karakter cipher
            int index_cipher = -1;
            for(int b = 0; b < huruf.length; b++)
            {
                // Teknik Penulisan Short Hand If Else
                index_cipher = (String.valueOf(cipher.charAt(a)).equals(huruf[b])) ? b : -1;
                // Jika Ketemu  
                if(index_cipher !=-1)
                {
                    // Rumus Dekrip --> P = (nomor_karakter_cipher - key) mod 26
                    // jika (nomor_karakter_cipher - key) < 0 maka, 26 + (nomor_karakter_cipher - key)
                    // jika (nomor_karakter_cipher - key) >= 0 maka, (nomor_karakter_cipher - key) mod 26  
                    plaintext += ((index_cipher - key) >= 0) ? huruf[(index_cipher - key) % 26] : huruf[26 + (index_cipher - key)];
                    continue loop1;
                }
            }
           
            //  Jika tidak ketemu
            plaintext += cipher.charAt(a);
        }
       
        //  Tampilkan Hasil Dekrip
        System.out.println("Hasil Dekrip : "+plaintext);
    }              
}

}

Berikut hasil program diatas.

caesar