Sistem Sandi Vigenere Achmad Legia A. 0807100750 Aris Munandar. 0807100756 Rezki 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
3
12
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
B
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W X
C
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W X
D
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W X
E
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W X
F
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W X
G
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W X
H
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W X
I
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W X
J
J
K
L
M
N
O
P
Q
R
S
T
U
V
W X
K
K
L
M
N
O
P
Q
R
S
T
U
V
W X
L
L
M
N
O
P
Q
R
S
T
U
V
W X
M
M
N
O
P
Q
R
S
T
U
V
W X
N
N
O
P
Q
R
S
T
U
V
W X
O
O
P
Q
R
S
T
U
V
W X
P
P
Q
R
S
T
U
V
W X
Q
Q
R
S
T
U
V
W X
R
R
S
T
U
V
W X
S
S
T
U
V
W X
T
T
U
V
W X
U
U
V
W X
V
V
W X
W
W X
X
X
Y
Y
Y
Z
Z
Y
Z
Y
Z
A
Y
Z
A
B
Y
Z
A
B
C
Y
Z
A
B
C
D
Y
Z
A
B
C
D
E
Y
Z
A
B
C
D
E
F
Y
Z
A
B
C
D
E
F
G
Y
Z
A
B
C
D
E
F
G
H
Y
Z
A
B
C
D
E
F
G
H
I
Y
Z
A
B
C
D
E
F
G
H
I
J
Y
Z
A
B
C
D
E
F
G
H
I
J
K
Y
Z
A
B
C
D
E
F
G
H
I
J
K
L
Y
Z
A
B
C
D
E
F
G
H
I
J
K
L
M
Y
Z
A
B
C
D
E
F
G
H
I
J
K
L
M
N
Y
Z
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
Y
Z
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Y
Z
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
Y
Z
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
Y
Z
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
Y
Z
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
Y
Z
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
Y
Z
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
Z
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
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
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W X
Tabel 2.1 Tabel vigenere yang digunakan secara manual
10
Y
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
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]
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