Jumat, 13 Juli 2012

[Tugas Akhir ALPRO] : Enkripsi Dekripsi Teknik Caesar Bahasa C


Pada kesempatan kali ini ane akan share hasil tugas akhir buat mata kuliah Algoritma dan Pemrograman.  Tugas Akhir ane ini tentang Enkripsi Dekripsi pake teknik caesar, yang intinya itu menggeser geser... langsung saja penjelasannya cekidot :D
Enkripsi ialah proses mengamankan suatu informasi dengan membuat informasi tersebut tidak dapat dibaca tanpa bantuan pengetahuan khusus.
Dalam kriptografi, sandi Caesar, atau sandi geser, kode Caesar atau Geseran Caesar adalah salah satu teknik enkripsi paling sederhana dan paling terkenal. Sandi ini termasuk sandi substitusi dimana setiap huruf pada teks terang (plaintext) digantikan oleh huruf lain yang memiliki selisih posisi tertentu dalam alfabet. Misalnya, jika menggunakan geseran 3, V akan menjadi Y, I menjadi L, dan D menjadi G sehingga teks terang "wiki" akan menjadi "ZLNL" pada teks tersandi. Nama Caesar diambil dari Julius Caesar, jenderal, konsul, dan diktator Romawi yang menggunakan sandi ini untuk berkomunikasi dengan para panglimanya.
Langkah enkripsi oleh sandi Caesar sering dijadikan bagian dari penyandian yang lebih rumit, seperti sandi Vigenère, dan masih memiliki aplikasi modern pada sistem ROT13. Pada saat ini, seperti halnya sandi substitusi alfabet tunggal lainnya, sandi Caesar dapat dengan mudah dipecahkan dan praktis tidak memberikan kerahasiaan bagi pemakainya.
Cara kerja sandi ini dapat diilustrasikan dengan membariskan dua set alfabet; alfabet sandi disusun dengan cara menggeser alfabet biasa ke kanan atau ke kiri dengan angka tertentu (angka ini disebut kunci). Misalnya sandi Caesar dengan kunci 3, adalah sebagai berikut:
Alfabet Biasa:   ABCDEFGHIJKLMNOPQRSTUVWXYZ
Alfabet Sandi:   DEFGHIJKLMNOPQRSTUVWXYZABC
Untuk menyandikan sebuah pesan, cukup mencari setiap huruf yang hendak disandikan di alfabet biasa, lalu tuliskan huruf yang sesuai pada alfabet sandi. Untuk memecahkan sandi tersebut gunakan cara sebaliknya. Contoh penyandian sebuah pesan adalah sebagai berikut.
                               teks terang:   kirim pasukan ke sayap kiri
                               teks tersandi: NLULP SDVXNDQ NH VDBDS NLUL
Sandi Caesar mengganti setiap huruf di teks terang (plaintext) dengan huruf yang berselisih angka tertentu dalam alfabet. Contoh ini menggunakan geseran tiga, sehingga huruf B di plaintext menjadi E di teks tersandi (ciphertext).

       Sebuah cipher adalah sebuah algoritma untuk menampilkan enkripsi dan kebalikannya dekripsi, serangkaian langkah yang terdefinisi yang diikuti sebagai prosedur. Alternatif lain ialah encipherment. Informasi yang asli disebuh sebagai plaintext, dan bentuk yang sudah dienkripsi disebut sebagai chiphertext. Pesan chipertext berisi seluruh informasi dari pesan plaintext, tetapi tidak dalam format yang didapat dibaca manusia ataupun komputer tanpa menggunakan mekasnisme yang tepat untuk melakukan dekripsi.
Cipher pada biasanya memiliki parameter dari sebagian dari informasi utama, disebut sebagai kunci. Prosedur enkripsi sangat bervariasi tergantung pada kunci yang akan mengubah rincian dari operasi algoritma. Tanpa menggunakan kunci, chiper tidak dapat digunakan untuk dienkirpsi ataupun didekripsi.
Penjelasan Source Code Program

#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#include <stdio.h> (memasukkan), Baris-baris yang diawali # diolah oleh preprocessor sebelum di compile. Baris-baris itu menyuruh preprocessor untuk meng- include isi dari file stdio.h dalam program. stdio.h adalah standard input output header file, yang mengandung informasi dan deklarasi - deklarasi yang digunakan oleh kompilator untuk penanganan fungsi-fungsi i/o seperti printf, scanf, dsb.

#include <string.h> string.h adalah library yang berisi tentang fungsi-fungsi untuk melakukan manipulasi terhadap string.

#include<conio.h> conio.h adalah console input output suatu program, yang mengandung informasi dan deklarasi-deklarasi yang digunakan oleh kompilator untuk penanganan fungsi-fungsi seperti getch().
#include<windows.h> windows.h adalah header windows spesifik file untuk bahasa pemrograman C yang berisi deklarasi untuk semua fungsi dalam Windows API, semua makro yang umum digunakan oleh programmer Windows, dan semua jenis data yang digunakan oleh berbagai fungsi dan subsistem.

#include<time.h> time.h adalah untuk membaca waktu yang ada di dalam komputer.

main()
{
    system("COLOR B1");
    int menu;
    char a;
    menu_awal:
    system("cls");
    tanggal();
    printf("\n\n");
    printf("\t\t\t++++++++++++++++++++++++++++++++++\n");
    printf("\t\t\t+PROGRAM ENKRIPSI DEKRIPSI CAESAR+\n");
    printf("\t\t\t++++++++++++++++++++++++++++++++++\n");
    printf("\n\n\n");
    printf("\t\t\t  For Your Secure Communication\n\n\n");
    printf("MENU:\n");
    printf("1. ENKRIPSI\n\n\n\n");
    printf("2. DESKRIPSI\n\n\n\n");
    printf("3. KELUAR\n\n");
    printf("Masukan Angka untuk memilih menu : ");
    scanf("%d", &menu);
    switch (menu)

    {
        case 1:
        system("cls");
        system("COLOR 74");

        {
            tanggal();
            printf("\n\t\t\t\+++++++++++++++++\n");
            printf("\t\t\t\+PROSES ENKRIPSI+\n");
            printf("\t\t\t\+++++++++++++++++\n");
            char teks[100];
            int i,geser;
            size_t a;
            fflush(stdin);
            printf("\n\nMasukan Kata yang akan di Enkripsi : ");
            gets(teks);
            printf("\n\nMasukan Kode Geser : ");
            scanf("%d",&geser);
            a=strlen(teks);
            printf("\n\n\aHasil Enkripsi : %c");
            for(i=0;i<a;i++)
            {
                printf("%c",teks[i]+geser);
            }

            getch();
            printf("\n\nApakah anda ingin kembali ke menu awal ? (Y/T) : ");
            scanf("%s",&a);
            a=toupper(a);
            if(a == 'Y')
            goto menu_awal;
            if(a == 'T')
            system("cls");
            printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t");
            keluar();
            exit(1);
            break;
        }

        case 2:
        system("cls");
        system("COLOR 74");

        {
            tanggal();
            printf("\n\t\t\t\++++++++++++++++++\n");
            printf("\t\t\t\+PROSES DESKRIPSI+\n");
            printf("\t\t\t\++++++++++++++++++\n");
            char teks[100];
            int x,gser;
            size_t y;
            fflush(stdin);
            printf("\n\nMasukan Kata Hasil Enkripsi : ");
            gets(teks);
            printf("\n\nMasukan Kode Geser : ");
            scanf("%d",&gser);
            y=strlen(teks);
            printf("\n\n\aKata asli : ");
            for(x=0;x<y;x++)
            {
                printf("%c",(teks[x])-gser);
            }
            getch();
            fflush(stdin);
            printf("\n\nApakah anda ingin kembali ke menu awal ? (Y/T) : ");
            scanf("%s",&a);
            a=toupper(a);
            if(a == 'Y')
            goto menu_awal;
            if(a == 'T')
            system("cls");
            printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t");
            keluar();
            exit(1);
            break;

        }
        case 3:
        system("cls");
        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t");
        keluar();
        exit(1);
        break;
     }
     getch();
}

·      main
Merupakan fungsi utama yang harus ada dalam setiap pemrograman menggunakan bahasa C.
·      system (“COLOR …”)
untuk memberikan warna background dan warna tulisan pada program
·      system (“cls”)
untuk membersihkan layar dari tampilan yang sebelumnya
·      int
merupakan   tipe   data   untuk  mendeklarasikan   suatu   variable   integer.
·      char
merupakan tipe data variable karakters. Missal  untuk mendeklarasikan ch sebagai tipe karakter adalah sebagai berikut : char ch;
Dalam C,suatu karakter  mempunyai   lebar  1 byte.  Artinya  jika anda akan mengassign   variable   bertipe   char   yang   lebih   dari   1   byte   ,  maka   hanya karakter pertama yang akan di assign dan sisanya tidak dipakai.
·      printf
Merupakan fungsi yang paling umum digunakan dalam menampilkan data. Berbagai jenis data dapat ditampilkan ke layar dengan fungsi ini. Bentuk penulisan : printf(“string kontrol”, argumen1, argumen2, …); .String kontrol dapat berupa keterangan yang akan ditampilkan pada layar beserta penentu format, seperti %d, %f. Penentu format dipakai untuk memberi tahu kompiler mengenai jenis data yang akan ditampilkan Argumen adalah data yang akan ditampilkan ke layar. Argumen ini dapatr berupa variabel, konstanta atau ungkapan.
·       scanf
Merupakan fungsi yang dapat digunakan untuk memasukkan berbagai jenis data. Bentuk scanf ( ) sesungguhnya menyerupai fungsi printf () yang melibatkan penentu format. Bentuk penulisan : scanf(“string kontrol”, daftar argumen);
Hal-hal yang perlu diperhatikan dalam pemakaian scanf yaitu :
1. scanf memberi pergantian baris secara otomatis, artinya Anda tidak perlu memberi \n untuk berpindah ke baris berikutnya.
2. scanf memakai penentu format, tetapi tidak memerlukan penentu lebar field.
3. Variabel yang dipakai di dalam scanf harus didahului dengan operator alamat (&).
·      switch
Pernyataan switch memiliki fungsi yang sama dengan pernyataan if, yaitu pernyataan yang digunakan untuk mengecek suatu kondisi atau keadaan kemudian mengeksekusi perintah-perintah yang terdapat didalamnya.
·      case
digunakan saat kita menggunakan variabel Switch, sehingga jika dalam menggunakan variabel switch tidak ada variable case, maka variable switch tidak berjalan.
·      gets
fungsinya mirip dengan scanf, namun gets digunakan untuk membaca inputan yang berbentuk string.
·      size_t
adalah hasil unsigned integer dari kata kunci sizeof.
·      fflush(stdin)
untuk membersihkan inputan keyboard
·       strlen
untuk mengetahui panjang karakter
·       for
Loop  for mengijinkan  inisialisasi  secara otomatis dari   instrument  variable counter.
·       goto
menyebabkan   eksekusi   program melompat   ke   suatu   label   dalam statemen goto.
·       toupper
membuat supaya inputan karakter dibaca huruf besar atau kecil
·       if
Secara umum bentuk statemen if adalah :
if (condition)
{
    statement block 1
}
else
{
    statement block 2
}
If dengan statemen tungga boleh tidak memakai tanda kurung kurawal. else merupakan optional. Kondisi boleh berupa ekspresi. Jika ekspresi dievaluasi ke nilai selain dari  0,  maka blok statemen 1 akan dieksekusi; selain itu, jika ada, bok statemen 2 akan di eksekusi, contoh :
ch = getche();
if (ch == 'q')
{
    printf("Program Terminated");
    exit(0);
}
else proceed();
·      break
Pada pernyataan switch telah dikenalkan perintah break yang memiliki tugas untuk keluar dari switch apabila kondisi bernilai benar dan perintah didalam case tersebut telah selesai diproses. selain digunakan pada switch, pernyataan break juga bisa digunakan dalam pernyataan for, while & do-while.
·      \a
Sintaks untuk mengeluarkan suara dari komputer.
·      \n
Merupakan sebuah bahasa C++ yang artinya memberikan perintah seberapa banyak garis baru (new line) yang ditampilkan program.

Loading:
void keluar (void)
{
    int ext;
    char klr[]="K  e l u a r . . . . . . . . . . . . . . . .";
    for(ext=0;klr[ext]!=0;ext++)
    {
        Sleep(25);
        printf("%c",klr[ext]);
    }
}
Diatas merupakan sebuah fungsi untuk menampilkan suatu string ke layar dengan cara muncul satu per satu huruf. Sehingga mirip seperti loading.
·        void
merupakan   peubah   tipe   yang   utamanya   di   pakai   untuk mendeklarasikan fungsi  void  (fungsi yang tidak mengembalikan   nilai). Dia juga dapat  dipakai  untuk membuat    void pointers  (pointer  ke  void)  yang secara   generic   pointer   dapat  menunjuk   ke   tipa   apapun   dari   object   dan menspesifikasikan daftar parameter kosong.

·        sleep
merupakan waktu lama / jeda munculnya huruf ke layar

Tanggal:
void tanggal()
{
    time_t now;
    time(&now);
    printf("%.24s",ctime(&now));
}

Diatas merupakan suatu fungsi bernama tanggal yang berguna untuk mengembalikan tampilan tanggal pada hari itu ke dalam layar.

Buat yang pengen langsung tahu programnya, langsung aja download disini
Semoga bermanfaat ^_^

2 komentar:

Unknown mengatakan...

ini membuat nya memakai aplikasi apa yaa kak ?
makasih sebelum nya :)

kisanak mengatakan...

kok error ya kak ?

Posting Komentar

Diberdayakan oleh Blogger.