sistem sandi vigenere
DESCRIPTION
Giovan Batista Belaso menjelaskan metode Sistem Sandi Vigenere dalam buku La cifra del. Sig. Giovan Batista Nelaso (1553) dan disempurnakan oleh diplomat Perancis Blaise de Vigenere pada tahun 1586. Pada abad ke19 banyak orang yang mengira vigenere adalah penemu sandi ini, sehingga sandi ini dikenal sebagai “sandi Vigenere”. Sandi Vigenere adalah metode menyandi teks alphabet dengan menggunakan deretan sandi Caesar berdasarkan hurufhuruf pada kata kunci.TRANSCRIPT
Sistem Sandi Vigenere
Achmad Legia A. 0807100750Aris Munandar. 0807100756Rezki Priono. 0807100776
Tri Agustina R. 0807100783
Program Manajemen Persandian, Sekolah Tinggi Sandi Negara
Jl. Raya H. Usa Putat Nugug, Ciseeng, Parung Bogor
ABSTRAK
Pada akhir abad ke16 ditemukan sandi Vigenere yang merupakan
pengembangan lebih lanjut daripada sandi Caesar. Sandi Vigenere menggunakan
sandi Caesar dengan bilangan geseran yang berbeda tiap hurufnya, sesuai dengan
sebuah kata kunci. Berbeda dengan sandi Caesar yang dapat dipecahkan melalui
analisis frekuensi sederhana, sistem sandi vigenere pada saat itu terlihat sangat
sulit dipecahkan. Sandi vigenere dijuluki le chiffre indechiffrable (sandi yang
tidak terpecahkan) hingga akhirnya dapat dipecahkan pada abad ke19 dengan
cara analisis frekuensi lanjutan.
Sistem sandi ini pertama kali dipopulerkan oleh Blaise de vigenere seorang
diplomat Perancis pada abad ke15. Sistem sandi vigenere adalah sistem sandi
substitusi multialfabetik yaitu sistem sandi caesar dengan pergeseran alphabet
yang berlainan disesuaikan kata kuncinya. Sistsem sandi substitusi adalah menjadi
dengan cara mengganti hurufhuruf pesan/ teks aslinya dengan hurufhuruf sandi.
Sistem sandi Caesar dan Vigenere merupakan metode sistem sandi substitusi.
1
KATA PENGANTAR
Puji dan syukur, Kami panjatkan kepada Tuhan Yang Maha Esa karena atas berkat
rahmatNya, Kami dapat menyelesaikan makalah tepat pada waktunya. Kami
mengucapkan terima kasih kepada dosen pembimbing kami Bapak Adi Prasetyo, karena
dengan diberikannya tugas pembuatan makalah ini dapat memberikan ilmu yang
bermanfaat khususnya mengenai pemrograman khususnya bahasa pemrograman bahasa
C. Kami juga mengucapkan terima kasih kepada pihakpihak yang telah banyak
membantu dalam pembuatan makalah ini.
Makalah ini disusun untuk memenuhi tugas mata kuliah struktur data
algoritma dan pemrograman yang berkaitan dengan pembuatan program enkripsi
maupun dekripsi menggunakan system sandi klasik yaitu system sandi vigenere
yang berkaiatn langsung dengan kriptgrafi, dengan menggabungkan antara ilmu
kriptografi dan pemrograman, maka penulis membuat suatu program sistem sandi
vigenere dengan menggunakan bahasa pemrograman C.
Demikianlah makalah ini kami susun dengan referensi dari berbagai sumber
antara lain buku mata kuliah pemrograman, kriptografi dan juga dengan literature
melalui internet. Dengan ini kami berharap makalah ini dapat bermanfaat bagi
para pembaca.
Kami menyadari dalam penulisan makalah ini masih jauh dari kata
sempurna. Oleh karena itu Kami kan menerima dengan terbuka mengenai saran
dan kritik yang membangun demi proses perbaikan makalah ini.
Bogor, juli 2009
2
DAFTAR ISI
ABSTRAK 1
KATA PENGANTAR 2
DAFTAR ISI 3
BAB I PENDAHULUAN 5
1.1 Latar Belakang Permasalahan 6
1.2 Identifikasi Masalah 6
1.3 Perumusan Masalah 6
1.4 Pembatasan Masalah 7
1.5 Tujuan Penulisan 7
1.6 Metode Penulisan 7
1.7 Sistematika Penulisan 7
BAB II LANDASAN TEORI 9
2.1 Konsep Dasar Sistem Sandi Vigenere 9
2.2 Konsep Dasar Pemrograman Bahasa C 12
3
BAB III DETAIL IMPLEMENTASI/ SIMULASI 15
BAB IV ANALISIS DAN HASIL IMPLEMENTASI 21
BAB V PENUTUP 30
5.1 Kesimpulan 30
5.2 Saran 30
DAFTAR PUSTAKA 32
DAFTAR TABEL
Tabel 2.1 Tabel vigenere 10
4
BAB I
PENDAHULUAN
Masalah keamanan (security) merupakan salah satu hal yang penting di era
teknologi informasi sekarang ini. Banyak kasus cybercrime yang kita dengar dari
berbagai media massa. Jriptografi merupakan dasar pemahaman tentang pengamanan
terutama keamanan jaringan. Kriptografi telah banyak diaplikasikan di berbagai bidang
terutama yang menggunakan teknologi jaringan komputer. Bahkan sekarang ini
kriptografi sudah banyak dikenal orang sebagai contoh dalam transaksi mesin ATM,
transaksi Bank, kartu kredit, komunikasi melalui telepon, akses internet atau bahkan
pengaktifan peluru kendali sekalipun. Namun semakin berkembangnya kriptografi
modern, kriptografi klasik hingga sekarang ini masih banyak digunakan, salah satunya
adalah sistem sandi vigenere.
Dalam kriptografi, sandi substitusi adalah jenis metode enkripsi dimana setiap
satuan pada teks terang digantikan oleh teks terang digantikan oleh teks tersandi dengan
sistem yang teratur, suatu “satuan” dapat berarti satu huruf paling (paling umum),
pasangan huruf, suku kata, kata dan sebagainya. Sang penerima pesan baru dapat
membaca pesan tersebut setelah melakukan substitusi balik terlebih dahulu. Pada sandi
substitusi , satuansatuan pada teks terang diubah namun susunannya tetap. Kebalikannya
adalah sandi transposisi, dimana satuansatuan teks terang susunannya diacak sedemikian
rupa sehingga tidak dapat terbaca, namun tidak mengubah/ mensubstitusikan hurufhuruf
tersebut.
Sandi substitusi juga dikelompokkan menjadi berbagai jenis. Jika sandi tersebut
mensubstitusikan huruf demi huruf, maka ia disebut sandi substitusi sederhana. Jika
mensubstitusikan dengan urutan yang lebih besar disebut sandi substitusi poligraf.
Sebuah sandi substitusi monoalfabetik menggunakan pola substitusi yang tetap diseluruh
pesan (misal: sandi Caesar), sedangkan sandi substitusi polialfabetik menggunakan
substitusi yang berbedabeda sepanjang pesan (misal: sandi Vigenere).
5
1.1 Latar Belakang Permasalahan
Keamanan merupakan salah satu aspek yang penting dalam sebuah sistem
informasi. Banyak orang menyiasati bagaimana cara mengamankan informasi
yang penting bagi orang tersebut. Kriptografi adalah ilmu yang mempelajari
bagaimana menjaga keamanan suatu pesan (plaintext). Tugas utama kriptografi
adalah untuk menjaga agar baik pesan atau kunci ataupun keduanya tetap terjaga
kerahasiannya. Namun kriptografi tidak mudah untuk dimengerti, ditambah
membutuhkan waktu yang lama untuk hanya sekedar menyandi suatu berita
apabila dilakukan secara manual. Oleh karena itu, Bagaimana kriptografi dapat
mudah digunakan dan tidak membutuhkan waktu yang lama?.
1.2 Identifikasi masalah
Sistem vigenere merupakan sistem sandi yang lumayan sulit untuk
dipecahkan, terutama jika menggunakan cara manual. Oleh karena seiring dengan
berkembangnya teknologi , system sandi ini dibuat sedemikian hingga agar
mudah dalam pemakaiannya namun tetap menjaga aspek keamanan
informasinya.
1.3 Perumusan Masalah
Rumusan makalah ini adalah mengenai bagaimana cara untuk
menuangkan system sandi vigenere dalam suatu program bahasa C.
6
1.4 Pembatasan Masalah
Sistem Vigenere ini adalah merupakan salah satu bentuk sistem sandi yang
dapat dituangkan dalam bentuk source code program bahasa C, sehingga pada
makalah ini akan dijelaskan tentang bagaimana bentuk coding vigenere, contoh
pemakaian beserta hasil tampilannya setelah di running.
1.5 Tujuan Penulisan
Tujuan dibuatnya makalah ini adalah untuk menguji cara implementasi
sistem vigenere kedalam bahasa pemrograman disertai analisis sehingga dapat
menambah pengetahuan serta kemampuan kami dalam penerapan algoritma dan
pemrograman yang berkaitan dengan kriptografi, sekaligus untuk memenuhi
salah satu tugas kuliahstruktur data algoritma dan pemrograman.
1.6 Metode Penulisan
Pembuatan makalah ini dilakukan dengan beberapa tahap antara lain
pengumpulan data/ informasi, pengolahan data/informasi, analisis/sintesis,
mengambil simpulan, serta merumuskan saran dan kesimpulan. Beberapa cara
pengumpulan data yang kami lakukan diantaranya adalah dengan metode
kepustakaan maupun dari media internet.
1.7 Sistematika Penulisan
Adapun sistematika penulisan makalah ini adalah sebagai berikut:
• Abstraksi
7
Menjelaskan gambaran umum mengenai isi makalah.
• Kata Pengantar
• Daftar Isi
• Daftar Tabel
• Bab I Pendahuluan
Berisi mengenai latar belakang masalah, mengidentifikasi masalah,
perumusan masalah, pembatasan masalah, tujuan penulisan, metode
penulisan, dan sistematika penulisan.
• Bab II Landasan Teori
Berisi mengenai konsep dasar mengenai bab yang dibahas dalam
makalah ini yaitu “system vigenere”, selain itu dalam bab ini berisi
mengenai konsep dasar pembuatan program sistem sandi vigenere yang
diaplikasikan dalam bentuk source code bahasa C.
• Bab III Detail Implementasi dan Simulasi
Menampilkan source code untuk sistem vigenere yang dilengkapi
denagn contoh tampilannya
• Bab IV Analisis dan Hasil Implementasi\
• Bab V Penutup
• Daftar Pustaka
8
BAB II
LANDASAN TEORI
Sandi Vigenere adalah metode menyandi teks alphabet dengan menggunakan
deretan sandi Caesar berdasarkan hurufhuruf pada kata kunci. Sandi Vigenere
merupakan bentuk sederhana dari sandi polialfabetik. Kelebihan sandi ini dibanding sandi
Caesar dan sandi monoalfabetik lainnya adalah sandi ini tidak begitu rentan terhadap
metode pemecahan sandi yang disebut analisis frekuensi. Giovan Batista Belaso
menjelaskan metode ini dalam buku La cifra del. Sig. Giovan Batista Nelaso (1553) dan
disempurnakan oleh diplomat Perancis Blaise de Vigenere pada tahun 1586. Pada abad
ke19 banyak orang yang mengira vigenere adalah penemu sandi ini, sehingga sandi ini
dikenal sebagai “sandi Vigenere”.
Sandi ini dikenal dengan luas karena cara kerjanya mudah dimengerti dan
dijalankan dan bagi para pemula sulit dipecahkan. Pada saat kejayaannya, sandi ini
dijuluki le chiffre indenchiffrable (bahasa perancis: “sandi yang tak terpecahkan”).
Metode pemecahan sandi ini baru ditemukan pada abadke19. Pada tahun 1854, Charles
Babbage menemukan cara untuk memecahkan sandi vigenere. Metode ini dinamakan tes
Kasiski karena Friedrich Kasiskilah yang pertama mempublikasikannya.
2.1 Konsep Dasar sistem sandi vigenere
Sistem sandi vigenere merupakan pengembangan dari sandi Caesar, setiap
huruf dari suatu teks terang digantikan dengan huruf lain yang memiliki perbedaan
tertentu pada urutan alphabet. Misalnya pada sandi Caesar dengan geseran 3,
contohnya huruf “A” diubah menjadi huruf “D”, “B” menjadi “E” dan seterusnya.
Sandi Vigenere terdiri dari sandi Caesar dengan niali geseran yang berbeda.
9
Untuk menyandi suatu pesan, digunakan suatu tabel alfabet yang disebut
tabel vigenere. Tabel vigenere berisi alfabet yang dituliskan dalam 26 baris,
masingmasing baris digeser satu urutan kekiri dari baris sebelumnya, membentuk
ke26 kemungkinan sandi Caesar. Berikut merupakan table vigenere:
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
A 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
B 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 A
C C 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
D 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
E 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 D
F F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
G G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
H H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
I I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
J J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
K K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
L L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
M M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
N N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
O O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
P P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
Q Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
R R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
S S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
T T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
U U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
V V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
W W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
X X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
Y Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
Z Z 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
Tabel 2.1 Tabel vigenere yang digunakan secara manual
10
Setiap huruf disandi dengan menggunakan barisbaris yang berbeda sesuai
kata kunci yang diulang. Misalnya:
Teks sandi: serbuberlin
Kata kunci: pizza (ket: Kata kunci harus diketahui oleh pengirim dan
penerima pesan)
Teks sandi: ….?
Huruf pertama pada teks terang “S” disandi dengan menggunakan huruf
pertama pada kunci “P”. Pada baris P dan kolom S di tabel vigenere, terdapat huruf
H. Demikian pula untuk huruf kedua digunakan huruf yang terletak pada baris I
(huruf kedua kata kunci) dan kolom E (huruf kedua teks terang), yaitu huruf M.
Proses ini dijalankan terus sehingga
Tt: s e r b u b e r l I n
Kk: p I z z a p I z z a p
Ts: H M Q A U Q M Q K I C
Proses sebaliknya yaitu mengubah teks sandi menjadi teks sandi disebut
dekripsi. Dekripsi dilakuka dengan mencari huruf teks bersandi pada baris berjudul
huruf dari kata kunci. Misalnya pada contoh diatas, untuk huruf pertama kita
mencari huruf “H” (huruf pertama pada teks sandi) pada huruf “P” (huruf pertama
pada kata kunci) yang terdpat dalam kolom S. Lalu M terdapat pada baris I di
kolom E, sehingga diketahui huruf kedua teks terang adalah E dan seterusnya
hingga didapat teks terang “serbuberlin”.
Enkripsi (penyandian) dengan sandi Vigenere juga dapat di tuliskan secara
matematis, dengan menggunakan penjumlahan dan operasi modulus, yaitu :
Ci = (Pi + Ki) mod 26
11
Dan dekripsi,
Pi = (Ci – Ki) mod 26
Keterangan : Ci adalah huruf keI pada teks tersandi, Pi adalah huruf keI
pada teks terang, KI adalah huruf kei pada kata kunci, dan mod adalah operasi
modulus (sisa pembagian).
2.2 Konsep Dasar Pemrograman Bahasa C
1. MEMASUKAN DATA
Beberapa fungsi pustaka yang biasa digunakan adalah :
• scanf()
Fungsi pustaka scanf() digunakan untuk menginput data berupa data
numeric, karakter dan string secara terformat.
• Kode penentu format :
%c : Membaca sebuah karakter
%s : Membaca sebuah string
%i, %d : Membaca sebuah bilangan bulat (integer)
%o : Membaca sebuah bilangan octal
%x : Membaca sebuah bilangan heksadesimal
%u : Membaca sebuah bilangan tak bertanda
12
• Tipe data
Dalam bahasa C terdapat lima tipe data dasar, yaitu :
1. char %c (Karakter/string)
2. int %i, %d (Integer/bilangan bulat)
3. float %f (Float/bilangan pecahan)
4. double %If (Pecahan presisi ganda)
5. void (Tidak bertipe)
• Deklarasi Variabel
Bentuk umum pendeklarasian suatu variable adalah :
Nama_tipe nama_variabel;
Contoh :
int x; II Deklarasi x bertipe integer
char y, huruf, nim[10]; II Deklarasivariable bertipe char
• getch()
Karakter yang dimasukan tidak perlu diakhiri dengan penekanan
tombol enter.
Jika menggunakan fungsi getch() karakter yang dimasukan tidak
akan di tampilkan pada layer sehingga sering digunakan untuk
meminta inputan berupa password.
13
2. MENAMPILKAN DATA
• Menampilkan data ke layar monitor
Menggunakan fungsi printf(), puts(), dan putchar().
Fungsi printf() digunakan untuk menampilkan semua jenis data
(numericdan karakter)
• Konstanta
\n : ganti baris baru (new line)
• Mengatur tampilan bilangan pecahan (float).
Bentuk umum :
• printf(“%m.nf”, argument);
m : menyatakan panjang range.
n : menyatakan jumlah digit di belakang koma
argument : nilai atau variable yang akan ditampilkan.
Contoh :
printf(“%5.2f”, nilai);
(artinya variable nilai akan di tampilkan sebanyak 5 digit dengan 2
digit di belakang koma)
14
3. Operator
•Operator Penugasan dalam bahasa C berupa tanda sama dengan (“=”).
Contoh :
nilai = 80;
A = x * y;
•Operator Arirmatika
Bahasa C menyediakan lima operador aritmatika, yaitu :
: untuk perkalian
/ : untuk pembagian
% : untuk sisa pembagian (modulus)
+ : untuk pertambahan
: untuk pengurangan
•Operator Hubungan (Perbandingan)
Operator Hubungan digunakan untuk membandingkan
hubungan antara dua buah operand, biasanya berupa tanda <=, >=, ==,
dll.
•Operator Unary
Sebagai contoh adalah – atau ++. Contoh : i++
15
•Komentar Program
Dengan kata lain, komentar program hanya merupakan
keterangan atau penjelasan program. Untuk memberikan komentar
atau penjelasan dalam bahasa C digunakan pembatas /* dan */ atau
menggunakan tanda // untuk komentar yang hanya dari satu baris.
4. Penyeleksian Kondisi
Penyeleksian kondisi digunakan untuk mengarahkan perjalanan suatu proses.
1. STRUKTUR KONDISI ”IF....”
Struktur if dibentuk dari pernyataan if dan sering digunakan untuk
menyeleksi suatu kondisi tunggal. Bila proses yang diseleksi terpenuhi
atau bernilai benar, maka pernyataan yang ada di dalam blok if kan
diproses dan dikerjakan. Bentuk umum struktur kondisi if adalah :
if(kondisi)
pernyataan;
2. STRUKTUR KONDISI ”IF.....ELSE....”
Dalam struktur kondisi if.....else minimal terdapat dua pernyataan.
Jika kondisi yang diperiksa bernilai benar atau terpenuhi maka
pernyataan pertama yang dilaksnakan dan jika kondisi yang diperiksa
bernilai salah maka pernyataan yang kedua yang dilaksanakan. Bentuk
umumnya adalah sebagai berikut :
if(kondisi)
pernyataan1
16
else
pernyataan2
3. STRUKTUR KONDISI ”SWITCH....CASE....DEFAULT...”
Struktur kondisi switch....case....default digunakan untuk
penyelesaian kondisi dengan kemungkinan yang terjadi cukup banyak.
Struktur ini akan melaksanakan salah satu dari beberapa pernyataan
’case’ tergantung nilai kondisi yang ada di dalam switch. Selanjutnya
proses diteruskan hingga ditemukan pernyataan ’break’. Jika tidak ada
nilai pada case yang sesuai dengan kondisi, maka proses akan diteruskan
kepada pernyataan yang ada di bawah ’default’. Bentuk umum dari
struktur kondisi ini adalah :
switch(kondisi)
{
Case 1 : pernyataan1;
Break;
Case 2 : pernyataan2;
Break;
.....
.....
Case n :pernyataann;
Break;
Default : pernyataanm
17
}
4. STRUKTUR PERULANGAN “FOR”
Struktur perulangan for biasa digunakan untuk mengulang suatu
proses yang telah diketahui jumlah perulangannya. Dari segi
penulisannya, struktur perulangan for tampaknya lebih efisien karena
susunannya lebih simpel dan sederhana. Bentuk umum perulangan for
sebagai berikut :
for(inisialisasi; syarat; penambahan)
pernyataan;
5. Array (Larik)
Dilihat dari dimensinya array dapat dibagi menjadi Array dimensi
satu, array dimensi dua dan array multidimensi.
1. ARRAY DIMENSI SATU
• Setiap elemen array dapat diakses melalui indeks.
• Indeks arraysecara default dimulai dari 0.
• Deklarasi Array
Bentuk umum :
tipe_array nama_array[ukuran];
2. ARRAY DIMENSI DUA
• Array dua dimensi merupakan array yang terdiri dari m buah
baris dan n buah kolom.
18
Bentuknya dapat berupa matriks atau tabel.
• Deklarasi array :
tipe_array nama_array[baris][kolom];
3. ARRAY MULTIDIMENSI
Array multidimensi merupakan array yang mempunyai ukuran
lebih dari dua. Bentuk pendeklarasian array sama saja dengan array
dimensi satu maupun array dimensi dua.
Bentuk umumnya yaitu :
tipe_array nama_array[ukuran1][ukuran2]...[ukuranN];
6. FILE JUDUL DAN BEBERAPA FUNGSI PUSTAKA DALAM
BAHASA C
• Header File ”stdio.h”
Fungsi pustakanya seperti printf() dan scanf()
• Header File ”conio.h”
Fungsi pustakanya seperti clrscr() dan getch()
• Fungsi Operasi String (tersimpan dalam header file”string.h”
• strcpy()
Berfungsi untuk menyalin suatu string asal ke variable string
tujuan.
Bentuk umum : strcpy(var_tujuan, string_asal);
19
• strlen()
Berfungsi untuk memperoleh jumlah karakter dari suatu string.
Bentuk umum : strlen(string);
• strupr()
Digunakan untuk mengubah setiap huruf dari suatu string
menjadi huruf capital.
Bentuk umum : strupr(string);
• strlwr()
20
BAB IV
ANALISIS DAN HASIL IMPLEMENTASI
Akhirnya dari berbagai analisa implementasi dapat kita mabil kesimpulan bahwa
sebenarnya sistem sandi vigenere mempunyai beberapa kelebihan dan kekurangan.
Kelebihan :
• Sistem sandi vigenere merupakan sistem sandi yang lumayan sulit untuk
dipecahkan, terutama jika menggunakan cara manual. Lebih sulit dipecahkan
dibandingkan dengan sistem sandi substitusi monoalfabet. Dahulu sempat diberi
julukan sebagai sandi yang tak terpecahkan.
• Mudah diwujudkan dalam bahasa pemrogaman.
• Mudah digunakan untuk enkripsi dan dekripsi.
Kekurangan :
• Vigenere dapat dipecahkan dengan metode kasiski.
• Seiring dengan perkembangan zaman, sistem vigenere sudah jarang digunakan.
4.1 Berikut ini adalah penjelasan mengenai program yang telah dibangun :
1. Keterangan / komentar mengenai program.
/* PROGRAM ENKRIPSI DAN DEKRIPSI */
21
/* SISTEM VIGENERE */
/* Kelompok I */
/* Tk. I Manajemen Persandian */
2. Merupakan header file bagi fungsi pustaka yang akan diikuti dalam program.
#include<stdio.h>
#include<string.h>
#include<conio.h>
3. Berupa fungsi utama.
void enkripsi(void);
void dekripsi(void);
main()
{
4. Variabel
Int pilihan;
5. Fungsi pustaka conio.h untuk membersihkan layar.
Clrscr();
22
6. Prototype dari fungsi pustaka stdio.h.
printf(” **************************************\n”);
printf(” SISTEM SANDI VIGENERE\n”);
printf(” Kelompok I”);
printf(” Tk. I Manajemen Persandian\n”)
printf(” ***************************************\n”);
printf(” masukan pilihan anda (1/2) !\n”);
printf(”1. Enkripsi\n”);
printf(”2. Dekripsi\n”);
printf(”Pilihan Anda\n”);
printf(”%d”,&pilihan);
printf(”\n\n”);
7. Berupa pemilihan kondisi.
Switch(pilihan)
{
case 1 : enkripsi();
break;
case 2 : dekripsi();
break;
default:printf(”masukan tidak ada...”);
}
8. Fungsi pustaka dari conio.h.
23
Getch();
}
Void enkripsi(void)
{
9. Variabel.
int periode,pjg_plaintext,n,i;
unsigned char key[25],ciphertext[225];
printf(masukan kunci:”);
10. Deklarasi variable.
Scanf(”%s”,&key);
11. Fungsi pustaka string.h untuk menghitung panjang string.
periode=strlen(key)
printf(”panjang periode=%d\n”,periode);
printf(”masukan plaintext:\n”);
scanf(”%s”,&plaintext);
pjg_plaintext=strlen(plaintext);
printf(”Panjang plaintext:%d\n”,pjg_plaintext);
24
12. Fungsi pustaka string.h untuk mengubah abjad ke huruf capital.
strupr(key);
strupr(plaintext);
13. Pemilihan kondisi ”for”.
for(i=1;i<=pjg_plaintext;i++)
{
14. Operasi aritmatika untuk mencari nulls.
n=i%periode;
15. Pemilihan kondisi ”if...else...”
if(n!0)
16. Operasi aritmatika untuk enkripsi.
ciphertext[i1]=((key[n1]+plaintext[i1])%26)+65;
else
ciphertext[i1]=((key[periode1]+plaintext[i1])%26)+65;
}
printf(”Ciphertext:%s\n”,ciphertext);
}
25
void dekripsi(void)
{
17. Variabel.
int periode,pjg_ciphertext,n,i;
unsigned char key[25],ciphertext[255],plaintext[255];
18. Fungsi pustaka dari header file stdio.h.
printf(”masukan kunci:\n”);
scanf(”%s”,&key);
19. Fungsi pustaka dari string.h untuk menghitung panjang string.
Periode=strlen(key);
printf(”panjang periode:%d\n”,periode);
printf(”masukan ciphertext:\n”);
scanf(”%s”,&ciphertext);
pjg_ciphertext=strlen(ciphertext);
printf(”panjang ciphertext:%d\n”,pjg_ciphertext);
20. Penyelesaian kondisi ”for”.
For(i=1;i<=pjg_ciphertext;i++)
{
26
21. Operasi aritmatika untuk menghitung jumlah nulls.
N=i%periode;
22. Penyelesaian kondisi ”if....else....”.
if(n!=0)
if(ciphertext[i1]<key[n1])
plaintext[i1]=((ciphertext[i1]key[n1])+26)+65;
else
plaintext[i1]=(ciphertext[i1]key[n1])+65;
else
if(ciphertext[i1]<key[periode1])
plaintext[i1]=((ciphertext[i1]key[periode1])+26)+65;
else
plaintext[i1]=(ciphertext[i1]key[periode1])+65;
}
printf(”plaintext:%s\n”,plaintext);
}
4.2 HASIL IMPLEMENTASI
1. PROGRAM ENKRIPSI
27
********************************
SISTEM SANDI VIGENERE
Kelompok I
Tk. I manajemen Persandian
********************************
Masukan pilihan anda (1/2) !
1. Enkripsi
2. Dekripsi
Pilihan Anda : 1
Masukan kunci :CRYPTO
Panjang periode=6
Masukan Plaintext:
SEKOLAHTINGGISANDINEGARAX
Panjang Plaintext:25
Ciphertext : UVIDEOJKGCZUKJYCWWPVEPKOZ
2. PROGRAM DEKRIPSI
28
********************************
SISTEM SANDI VIGENERE
Kelompok I
Tk. II manajemen Persandian
********************************
Masukan pilihan anda (1/2) !
1. Enkripsi
2. Dekripsi
Pilihan Anda : 2
Masukan kunci :CRYPTO
Panjang periode=6
Masukan ciphertext:
UVIDEOJKGCZUKJYCWWPVEPKOZ
Panjang ciphertext:25
Ciphertext : SEKOLAHTINGGISANDINEGARA
29
BAB V
PENUTUP
5.1 Kesimpulan
Sistem Sandi Vigenere diperkenalkan oleh Blaise de vigenere pada tahun
1585 dalam ”Traicte des Chiffer”, sebagai bentuk pengembangan dari metode
monoalphabetic. Metode ini juga merupakan dasar dari polyalphabetic
substitusion chiper. Beberapa ketentuan dalam metode ini adalah:
Setiap kunci dapat disubstitusikan dengan bermacammacam kunci yang
lainnya.
Menggunakan kata kunci.
Kata kunci digunakan secara berulang.
Kata kunci digunakan untuk menentukan enkripsi setiap alphabet dalam
palintext.
Huruf kei dalam plaintext dispesifikasikan oleh alphabet yang digunakan
dalam kunci.
Penggunaan alphabet bisa berulang.
5.2 Saran
Satu masalah utama simple substitusin chiper adalah cipher tersebut sangat
rawan terhadap analisis frekuensi. Dengan demikian cipher text yang cukup besar
dapat dengan mudah dipatahkan menggunakan mapping frekuensi dari huruf
30
hurufnya untuk menghetahui frekuensi dari english text. Oleh karena itu untuk
membuat cipher lebih aman dapat dilakukan dengan salah satu pendekatan yang
paling umum yaitu menekan data berfrekuensi normal dengan menggunakan
lebih dari satu alphabet untuk melakukan encrypt pesan
31
DAFTAR PUSTAKA
• Kurniawan, Yusuf, Kriptografi, Keamanan Internet dan Jaringan Komunikasi,
Penerbit Informatika.2004
• Munir, Rinaldi, Kriptografi, Penerbit Informatika. 2006
• www.google.com
32