presentasi tugas besar konsep pemrograman: vigenère

Post on 15-Apr-2017

943 Views

Category:

Education

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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 ASCII

Go to web

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

top related