0
0
0
share
0 Komentar
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:
- 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) - Huruf : A
Nomor Karakter Huruf A = 0
C = (0 + 12) mod 26
C = (12) mod 26
C = 12 --> Huruf M - Huruf : M
Nomor Karakter Huruf M = 12
C = (12 + 12) mod 26
C = (24) mod 26
C = 24 --> Y - Huruf : P
Nomor Karakter Huruf P = 15
C = (15 + 12) mod 26
C = (27) mod 26
C = 1 --> B - Huruf : R
Nomor Karakter Huruf R = 17
C = (17 + 12) mod 26
C = (29) mod 26
C = 3 --> D - Huruf : O
Nomor Karakter Huruf O = 14
C = (14 + 12) mod 26
C = (26) mod 26
C = 0 --> A - Huruf : G
Nomor Karakter Huruf G = 6
C = (6 + 12) mod 26
C = (18) mod 26
C = 18 --> S - Huruf : R
Nomor Karakter Huruf R = 17
C = (17 + 12) mod 26
C = (29) mod 26
C = 3 --> D - Huruf : A
Nomor Karakter Huruf A = 0
C = (0 + 12) mod 26
C = (12) mod 26
C = 12 --> M - Huruf : M
Nomor Karakter Huruf M = 12
C = (12 + 12) mod 26
C = (24) mod 26
C = 24 --> Y - Huruf : M
Nomor Karakter Huruf M = 12
C = (12 + 12) mod 26
C = (24) mod 26
C = 24 --> Y - Huruf : E
Nomor Karakter Huruf E = 4
C = (4 + 12) mod 26
C = (16) mod 26
C = 16 --> Q - 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.
- Huruf : U
Nomor Karakter Huruf U : 20
P = (20 - 12) mod 26
P = (8) mod 26
P = 8 --> I - Huruf : M
Nomor Karakter Huruf M : 12
P = (12 - 12) mod 26
P = (0) mod 26
P = 0 --> A - Huruf : Y
Nomor Karakter Huruf Y : 24
P = (24 - 12) mod 26
P = (12) mod 26
P = 12 --> M - Huruf : B
Nomor Karakter Huruf B : 1
P = (1 - 12) mod 26
P = (-11) mod 26
P = 26 - 11
P = 15 --> P - Huruf : D
Nomor Karakter Huruf D : 3
P = (3 - 12) mod 26
P = (-9) mod 26
P = 26 - 9
P = 17 --> R - Huruf : A
Nomor Karakter Huruf A : 0
P = (0 - 12) mod 26
P = (-12) mod 26
P = 26 - 12
P = 14 --> O - Huruf : S
Nomor Karakter Huruf S : 18
P = (18 - 12) mod 26
P = (6) mod 26
P = 6 --> G - Huruf : D
Nomor Karakter Huruf D : 3
P = (3 - 12) mod 26
P = (-9) mod 26
P = 26 - 9
P = 17 --> R - Huruf : M
Nomor Karakter Huruf M : 12
P = (12 - 12) mod 26
P = (0) mod 26
P = 0 --> A - 10. Huruf : Y
Nomor Karakter Huruf Y : 24
P = (24 - 12) mod 26
P = (12) mod 26
P = 12 --> M - Huruf : Y
Nomor Karakter Huruf Y : 24
P = (24 - 12) mod 26
P = (12) mod 26
P = 12 --> M - Huruf : Q
Nomor Karakter Huruf Q : 16
P = (16 - 12) mod 26
P = (4) mod 26
P = 4 --> E - 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.
0
0
0
share