Presentasi Tugas Besar Konsep Pemrograman: Vigenère
-
Upload
fembi-rekrisna-grandea-putra -
Category
Education
-
view
944 -
download
2
Transcript of Presentasi Tugas Besar Konsep Pemrograman: Vigenère
VIGENÈRE
Oleh:Adnan Widya Iswara (M0513003)
Fembi Rekrisna Grandea Putra (M0513019)Khavid Wasi Triyoga (M0513026)
Algoritma Vigenere Cipher adalah metode menyandikan teks alfabet dengan menggunakan deretan sandi Caesar berdasarkan huruf-huruf pada kata kunci. Sandi Vigenère merupakan bentuk sederhana dari sandi substitusi 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 Belaso (1553); dan disempurnakan oleh diplomat Perancis Blaise de Vigenère, pada 1586. Pada abat ke-19, banyak orang yang mengira Vigenère adalah penemu sandi ini, sehingga,
sandi ini dikenal sebagai "sandi Vigenère". Sandi ini dikenal luas karena cara kerjanya
mudah dimengerti dan dijalankan, dan bagi para pemula sulit dipecahkan. Pada saat kejayaannya, sandi ini dijuluki le chiffre indéchiffrable (bahasa Prancis: 'sandi yang tak terpecahkan'). Metode pemecahan sandi ini baru ditemukan pada abad ke-19. Pada tahun 1854, Charles Babbage menemukan cara untuk memecahkan sandi Vigenère. Metode ini dinamakan tes Kasiski karena Friedrich Kasiski-lah yang pertama mempublikasikannya.
Latar Belakang
Algoritma
Plaintext: INFORMATIKA Key: MIPACiphertext: UVUODUPTUSP
Perumpamaan
Huruf pertama pada plaintext I, disandikan
dengan menggunakan baris kunci M, huruf pertama pada kata kunci. Pada baris M dan kolom I di tabel Vigenère terdapat huruf U. Demikian pula untuk huruf kedua, digunakan huruf yang terletak pada baris I (huruf kedua kata kunci) dan kolom N (huruf kedua kata plantext), yaitu huruf V.
Cara Enkripsi/Penyandian
Proses sebalinya (disebut dekripsi), dilakukan dengan
mencari huruf teks bersandi pada baris berjudul huruf dari kata kunci. Misalnya pada contoh di atas untuk huruf pertama kita mencari huruf U (huruf pertama Ciphertext) pada baris M (huruf pertama pada kata kunci) yang terdapat pada kolom U, sehingga huruf pertama adalah I. Lalu V (huruf kedua Ciphertext) terdapat pada baris I (huruf pertama pada kata kunci) di kolom V, sehingga diketahui huruf kedua teks terang adalah N, dan seterusnya hingga semua terdekripsi menjadi INFORMATIKA.
Cara Dekripsi/Membaca
Tabel Vigenere
Perhitungan Vigenere
EnkripsiEnkripsi (penyandian) dengan sandi Vigenère juga dapat dituliskan secara matematis, dengan menggunakan penjumlahan dan operasi modulus, yaitu:
atau Ci = Pi + Ki kalau jumlah dibawah 26 & - 26 kalau hasil jumlah di atas 26
Dekripsi Dekripsi
Dimana: Ci = nilai desimal karakter ciphertext ke-i Pi = nilai desimal karakter plaintext ke-i Ki = nilai desimal karakter kunci ke-i
Nilai desimal karakter: A=0 B=1 C=2 ... Z=25
Header
AnalisaHeader <ctype.h> digunakan untuk pengecekan dan konversi terhadap sebuah karakter, bukan string.
Input Menu
AnalisaMenu 1 untuk memilih enkripsi.Menu 2 untuk memilih dekripsi.Menu 3 untuk keluar program.
Buka File Enkripsi
Enkripsi File
Enkripsi Teks
Analisa
for(i=0,j=0; i<strlen(masukan); i++,j++) { if(j>=strlen(kunci)) { j=0; } encription = 65+(((toupper(masukan[i])-65)+(toupper(kunci[j])-65))%26); if (encription < 65) encription = 32; printf("%c",encription); }
Strlen(masukan) digunakan untuk mengubah karakter huruf menjadi kode karakter pada ASCII
Mengapa menggunakan angka 65? Karena karakter huruf kapital pada ASCII dimulai dari 65 (A).
If (encription < 65), gunanya untuk menjadikan karakter yang bukan string menjadi spasi. Pada ASCII spasi kodenya 32
Contoh Proses
Enkripsi Contoh kalimat yang
dimasukan : Kita sedang belajar vigenere
Plain Text Kita sedang belajar vigenere
Key informatikaciphertext SVYO EEWIXG
OJZRVAK FIORSSIQ
Buka File Dekripsi
Dekripsi File
Dekripsi Teks
Analisa
for(i=0,j=0; i<strlen(masukan); i++,j++) { if(j>=strlen(kunci)) { j=0; } hasil = (toupper(masukan[i])-65)-(toupper(kunci[j])-65); if( hasil < 0) { hasil = 26 + hasil; } keluaran = 65 + (hasil % 26); if (keluaran < 65) keluaran = 32; printf("%c",keluaran); }
If (j>=strlen(kunci) untuk mengulang key bila sudah berakhir.Mengapa menggunakan hasil+=26 ?Karena jika keluaran negatif, kita harus memutar ulang (ex : z, y, x). Jadi ditambahkan 26 supaya keluaran negatif akan menjadi karakter aslinya.
どうも ぁりガとう ございます
Merci