Caesar Cipher

Dalam kriptografi, Caesar Cipher dikenal sebagai cara penyandian klasik yang menggunakan pergeseran karakter. Caesar cipher dinamai berdasarkan nama Julius Caesar yang menggunakannya untuk komunikasi militer pasukannya. Contoh penerapannya adalah ROT13 yang menggeser setiap karakter dalam teks sebanyak 13 langkah.

Contoh dengan pergeseran 2 langkah : 

  • Geri => Igtk
  • G => I
  • e => g
  • r => t
  • i => k

Algoritma caesar cipher cukup simpel karena kalian cukup mengeser huruf sekian langkah dengan operator penjumlahan atau pengurangan. Kalian pun bisa menerapkannya tanpa pemrograman dengan perhitungan manual. Kalau kalian ingin menggunakan bahasa C, kalian bisa membuat function di bawah ini untuk mengubah satu karakter.

char geser(char c, int i){
    if(c>='a' && c <='z'){
        c-='a';
        c+=i+26;
        c%=26;
        c+='a';
    }else if(c>='A' && c <='Z'){
        c-='A';
        c+=i+26;
        c%=26;
    	c+='A';
    }
	
    return c;
}

Function di atas bisa dipanggil dari function main kalau kalian hanya ingin mengubah satu karakter. Untuk mengubah string, tentu saja kalian akan butuh loop. Loopnya bisa langsung diletakkan di function utama atau dibuat dengan function terpisah. Kalau mau membuat function untuk memisahkan loop dari function utama, kalian bisa membuat function seperti di bawah ini.

void ubah(char *s, int n){
    int pj=strlen(s);
	
    for(int i=0;i<pj;i++){
        s[i]=geser(s[i], n);
    }
}

Kode program utuh dari 2 function di atas beserta pemanggilan dari function utamanya bisa dilihat di bawah ini.

#include <stdio.h>
#include <string.h>

char geser(char c, int i){
    if(c>='a' && c <='z'){
        c-='a';
        c+=i+26;
        c%=26;
        c+='a';
    }else if(c>='A' && c <='Z'){
        c-='A';
        c+=i+26;
    	c%=26;
    	c+='A';
    }
	
    return c;
}

void ubah(char *s, int n){
    int pj=strlen(s);
	
    for(int i=0;i<pj;i++){
	s[i]=geser(s[i], n);
    }
}

int main(){
    char s[256]="";
    int n=13;
	
    printf("Input :");fgets(s, 255, stdin);
    ubah(s, n);
    printf("Output : %s", s);
}
Contoh program :
Input : Gerimisya Stela Rida
Output : Trevzvfln Fgryn Evqn

Contoh di atas menggunakan pergeseran sebanyak 13 angka yang digunakan dalam algoritma ROT13. Kalian juga bisa mengganti nilai variabel n dengan nilai lain di bawah 26.

Versi C++

Kode program di atas bisa digunakan dalam bahasa C maupun C++. Kalau kalian mau pakai header iostream, contohnya bisa dilihat di bawah ini.

#include <iostream>

using namespace std;
char geser(char c, int i){
    if(c>='a' && c <='z'){
        c-='a';
        c+=i+26;
        c%=26;
        c+='a';
    }else if(c>='A' && c <='Z'){
        c-='A';
        c+=i+26;
        c%=26;
        c+='A';
    }
	
    return c;
}

string ubah(string s, int n){
    int pj=s.length();
	
    for(int i=0;i<pj;i++){
        s[i]=geser(s[i], n);
    }
	
    return s;
}

int main(){
    string s="";
    int n=13;
	
    printf("Input : ");getline(std::cin, s);
    s=ubah(s, n);
    cout << "Output : " << s;
}

Versi pascal

Kalau kalian pakai pascal, kalian bisa lihat kodenya di bawah ini.
var s:string;
    n:integer=13;
    
function geser(c:char;i:integer;):char;
    var x:integer;
begin
    if((c>='a')and (c <='z')) then
    begin
        x:=ord(c)-ord('a');
        x:=x+i+26;
        x:=x mod 26;
        c:=chr(x+ord('a'));
    end
    else if((c>='A') and (c <='Z'))then
    begin
	x:=ord(c)-ord('A');
	x:=x+i+26;
    	x:=x mod 26;
        c:=chr(x+ord('A'));
    end;

    geser:=c;
end;

procedure ubah(var s:string;n:integer);
    var i, pj:integer;
begin
    pj:=length(s);
    for i:=1 to pj do
    begin
	s[i]:=geser(s[i], n);
    end;
end;

Begin
    write('Input : ');readln(s);
    ubah(s, n);
    writeln('output : ', s);
end.

Males ngetik? Dowload source codenya di sini.