Kriptografi Substitusi Caesar Chiper Dalam Bahasa Pemrograman Java
Dalam kriptografi, cipher Caesar, juga dikenal sebagai cipher pergeseran, instruksi Caesar (Caesar Code) atau pergeseran Caesar (Caesar Shift) , ialah salah satu teknik enkripsi yang paling sederhana dan paling banyak dikenal.
Ini ialah jenis cipher substitusi dimana setiap karakter dalam plaintext diganti dengan karakter lain yang berada di beberapa karakter setelahnya. Misalnya, dengan pergeseran kiri 3, D akan digantikan oleh A, E akan menjadi B, dan sebagainya. Metode ini dinamai Julius Caesar, yang pertama kali memakai kriptografi ini.
Langkah enkripsi didalam cipher Caesar sering dimasukkan sebagai bab dari sketsa kriptografi yang lebih kompleks, ibarat cipher Vigenère, dan dalam aplikasi modern sistem ROT13. Cipher Caesar gampang dipecahkan apabila kunci pergeseran sudah ditemukan.
Transformasi sanggup direpresentasikan dengan menyelaraskan dua huruf; alfabet cipher ialah alfabet biasa diputar ke kiri atau kanan dengan beberapa posisi. Misalnya, di sini ialah cipher Caesar memakai rotasi kiri tiga tempat, setara dengan pergeseran kanan 23 (parameter pergeseran dipakai sebagai kunci):
Plain: ABCDEFGHIJKLMNOPQRSTUVWXYZ
Cipher: DEFGHIJKLMNOPQRSTUVWXYZABC
Ketika melaksanakan enkripsi, seseorang mengubah setiap karakter dari pesan orisinil (plaintext) dan menuliskan karakter yang sesuai dalam "cipher" line. Sedangkan ketika mendeskripsi, dilakukan secara terbalik / membalik proses enkripsi yaitu dengan pergeseran kanan 3.
Jadi kalimat plainteks THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG akan diubah menjadi kalimat chiperteks GLGXNXQJ TXLFN EURZQ IRA MXPSV RYHU GLGXNXQJ ODCB GRJ
Berikut ini disajikan pola code sandi / kriptgrafi tersebut diatas dengan bahasa Pemrograman Java
public class Cipher {
public static void main(String[] args) {
String str = "The quick brown fox Jumped over the lazy Dog";
System.out.println( Cipher.encode( str, 12 ));
System.out.println( Cipher.decode( Cipher.encode( str, 12), 12 ));
}
public static String decode(String enc, int offset) {
return encode(enc, 26-offset);
}
public static String encode(String enc, int offset) {
offset = offset % 26 + 26;
StringBuilder encoded = new StringBuilder();
for (char i : enc.toCharArray()) {
if (Character.isLetter(i)) {
if (Character.isUpperCase(i)) {
encoded.append((char) ('A' + (i - 'A' + offset) % 26 ));
} else {
encoded.append((char) ('a' + (i - 'a' + offset) % 26 ));
}
} else {
encoded.append(i);
}
}
return encoded.toString();
}
}