Dalam kriptografi, cipher Caesar, juga dikenal sebagai cipher pergeseran, kode Caesar (Caesar Code) atau pergeseran Caesar (Caesar Shift) , adalah salah satu teknik enkripsi yang paling sederhana dan paling banyak dikenal.
Ini adalah jenis cipher substitusi dimana setiap huruf dalam plaintext diganti dengan huruf lain yang berada di beberapa huruf 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 menggunakan kriptografi ini.
Langkah enkripsi didalam cipher Caesar sering dimasukkan sebagai bagian dari skema kriptografi yang lebih kompleks, seperti cipher Vigenère, dan dalam aplikasi modern sistem ROT13. Cipher Caesar mudah dipecahkan apabila kunci pergeseran sudah ditemukan.
Transformasi dapat direpresentasikan dengan menyelaraskan dua huruf; alfabet cipher adalah alfabet biasa diputar ke kiri atau kanan dengan beberapa posisi. Misalnya, di sini adalah cipher Caesar menggunakan rotasi kiri tiga tempat, setara dengan pergeseran kanan 23 (parameter pergeseran digunakan sebagai kunci):
Plain: ABCDEFGHIJKLMNOPQRSTUVWXYZ
Cipher: DEFGHIJKLMNOPQRSTUVWXYZABC
Ketika melakukan enkripsi, seseorang mengubah setiap huruf dari pesan asli (plaintext) dan menuliskan huruf yang sesuai dalam "cipher" line. Sedangkan saat 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 contoh 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();
}
}
Tidak ada komentar:
Posting Komentar