Kriptografi-Caesar-Cipher

kriptografi Jan 15, 2020

Kriptografi Caesar Cipher

Caesar Cipher adalah kriptografi tua atau kriptografi yang telah lama ada. Kriptografi ini sangat sederhana dimana setiap huruf akan digantikan dengan 3 huruf setelahnya dari susunan alphaber. Caesar cipher tidak memiliki kunci seperti algoritma kriptografi modern, salah satu cara agar algoritma ini aman adalah kerahasian algoritmanya. Jika diasumsikan tabel dari caesar cipher adalah sebagai berikut :
Plaintesk : a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z.
Cipherteks : D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A, B, C.

Tesk asli akan berhuruf kecil sedangkan hasil cipherteks adalah huruf besar.
Dapat juga diformulasikan sebagai fungsi matematika dengan sebuah 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. Dengan rumus enkripsi adalah C = E(P) = (P + 3)mod 26 dan rumus dekripsi adalah P = D(P) = (C - 3)mod 26.

Berikut adalah contoh program Caesar Cipher pada program c++ :

#include<iostream> //header untuk menampilkan main
#include<string.h>

using namespace std;

void enkripsi()
{
    string plainteks, cipherteks;
    int i, k;
    char c;
    
    cout<<"Ketikan pesan : ";
    cin.ignore(); getline (cin, plainteks);
    cout<<"Masukan jumlah pergeseran 0-255 : "; cin >> k;
    cipherteks = " "; // inisialisasi cipherteks dengan null string
    
    for (i=0; i < plainteks.length(); i++) 
    {
        c = plainteks[i];
        if (isalpha(c)) // hanya memproses huruf alfabet saja
        {
            c = toupper(c); // ubah menjadi huruf kapital
            c = c - 65; // kodekan huruf ke angka 0 s/d 25
            c = (c + k) % 26; // enkripisi, geser sejauh k ke kanan
            c = c + 65;
        }
        cipherteks = cipherteks + c; // sambungkan ke cipherteks
    }
    cout << "cipherteks : "<<cipherteks<<endl; // cetak cipherteks
}

void dekripsi()
{
    string plainteks, cipherteks;
    int i, k;
    char c;
    
    cout<<"Ketikan cipherteks : ";
    cin.ignore(); getline (cin, cipherteks);
    cout<<"Masukan jumlah pergeseran 0-25 : "; cin>>k;
    plainteks = "";  // inisialisasi plainteks dengan null string
    
    for (i=0; i<cipherteks.length(); i++)
    {
        c = cipherteks[i];
        if (isalpha(c)) // hanya memproses alpabet
        {
            c = toupper(c); // ubah karakter ke huruf besar
            c = c - 65; // kodekan huruf ke angka 0 sampai 25
            if (c - k < 0) // kasus pembagian bilangan negatif
                c = 26 + (c - k);
            else
                c = (c - k) % 26;
            c = c + 65; // kodekan kembali ke huruf semula
            c = tolower(c); // plainteks dinyatakan dengan huruf kecil
        }
        plainteks = plainteks + c; // sambungkan ke plainteks
    }
    cout<<"plainteks : "<<plainteks<<endl; // cetak plainteks
}

int main ()
{ //begin
    int pil;
    bool stop;
    stop = false;
    
    while (!stop) 
    {
        cout<<"Menu : "<<endl;
        cout<<"1. enkripisi "<<endl;
        cout<<"2. dekripsi "<<endl;
        cout<<"3. Exit "<<endl;
        cout<<"Pilih menu : "; cin>>pil;
        switch(pil)
        {
            case 1 : enkripsi();break;
            case 2 : dekripsi();break;
            case 3 : stop = true;break;
        }
    }
}//end

Hasilnya seperti gambar dibawah ini :
DeepinScreenshot_select-area_20200115030948

Sekian terimakasih, Jika ada salah tolong komentar dibawah ini.

Akhmad Syarif

i just want to be myself