0
Penerapan Vigenere cipher di pemograman C
Posted by jujur
on
5:59 AM
Vigenere cipher adalah salah satu jenis kriptografi klasik yang pada dasarnya adalah
melakukan substitusi cipher abjad majemuk (polyalphabetic substitution), yaitu
mengubah plaintext dengan kunci tertentu biasanya berupa sebuah kata atau
kalimat yang berulang sepanjang plaintext sehingga didapatkan ciphertext.
Tetapi salah satu kelemahan dari cipher ini adalah ia mudah diserang dengan
metode Kasiski untuk mengetahui panjang huruf yang digunakan sebagai kunci.
Untuk lebih memperkuat cipher ini, banyak modifikasi dilakukan oleh para
peneliti. Salah satu cara yang saya ajukan sebagai tugas makalah ini adalah
Vigenere cipher dengan metode pembangkitan kunci dengan menggunakan bilangan
euler. Pada dasarnya, metode ini adalah sebuah cara untuk mendapatkan suatu
kunci berbentuk acak yang digenerate dari perkalian matematis antara kunci yang
dimasukkan dengan bilangan Euler. Diharapkan dengan metode ini, kunci yang
dihasilkan untuk Vigenere cipher menjadi lebih panjang dan acak sehingga akan
menyulitkan kriptanalisis untuk menyerang dengan metode Kasiski maupun dengan
analisis frekuensi.
Cara Kerja
Program
Program Vigenere cipher akan mengubah plain text dengan kunci tertentu dengan kata yang maupun kalimat yang lain melewati suatu
proses perhitungan dari program Vigenere
cipher. Misalnya
pada sandi Caesar dengan geseran 3, A menjadi D, B menjadi E and dan
seterusnya. Sandi Vigenère terdiri dari beberapa sandi Caesar dengan nilai
geseran yang berbeda. Untuk menyandikan suatu pesan, digunakan sebuah tabel
alfabet yang disebut table vigenere.
Tabel Vigenère berisi alfabet yang dituliskan
dalam 26 baris, masing-masing baris digeser satu urutan ke kiri dari baris
sebelumnya, membentuk ke-26 kemungkinan sandi Caesar. Setiap huruf disandikan
dengan menggunakan baris yang berbeda-beda, sesuai kata kunci yang diulang.
Cara Pemrosesan Program
Misalnya ,plainteks yang hendak
disandikan adalah perintah “Sari kaya”
Sarikaya
Sedangkan
kata kunci adalah "Roti"
“roti”
akan di ulang dengan plainteks menjadi “rotiroti”
Huruf
pertama pada plainteks, S, disandikan dengan menggunakan baris
berjudul R, huruf pertama pada kata kunci. Pada
baris R dan kolom S di tabel Vigenère, terdapat huruf J .
Demikian pula untuk huruf kedua, digunakan huruf yang terletak pada baris O
(huruf kedua kata kunci) dan kolom A (huruf kedua plaintext), yaitu huruf O. Proses ini dijalankan terus sehingga di
peroleh hasil :
JOkQBORI
Seperti hal itulah vigenere cipher melakukan pemrosesan sehingga menghasilkan kata yang sulit ditebak atau di ketahui oleh orang lain.
Untuk penerapan ke program c anda dapat melihat code dibawah ini
Seperti hal itulah vigenere cipher melakukan pemrosesan sehingga menghasilkan kata yang sulit ditebak atau di ketahui oleh orang lain.
Untuk penerapan ke program c anda dapat melihat code dibawah ini
#include<stdio.h>
void main()
{
int i;
int katakunci;
int katasandi;
printf("Masukkan panjang kata kunci : ");
scanf("%d",&katakunci);
printf("Masukkan panjang kata sandi : ");
scanf("%d",&katasandi);
char sandi[katasandi];
char kunci[katakunci];
printf("\n Masukkan kata kunci : ");
for(i=-1;i<katakunci;++i)
scanf("%c",&kunci[i]);
printf("\n Masukkan Kata Sandi : ");
for(i=-1;i<katasandi;++i)
scanf("%c",&sandi[i]);
int x[3][katasandi];
for(i=0;i<katasandi;++i)
{
if(65<=sandi[i] && sandi[i]<=91)
x[0][i]=sandi[i]%65;
else
x[0][i]=sandi[i]%97;
}
int count=0;
while(count<katasandi)
{
for(i=0;i<katakunci;++i)
{
if(65<=kunci[i] && kunci[i]<=91)
x[1][count+i]=kunci[i]%65;
else
x[1][count+i]=kunci[i]%97;
}
count=count+katakunci;
}
printf("\n\nHasil Enkripsi adalah: ");
char cipher[katakunci];
for(i=0;i<katasandi;++i)
{
x[2][i]=(x[0][i]+x[1][i])%26;
cipher[i]=(char)(x[2][i]+65);
printf("%c ",cipher[i]);
}
}