Algoritma
vigenere cipher termasuk kriptografi simetri klasik. Dan Termasuk ke dalam cipher abjad-majemuk (polyalpabetic substitution
cipher).
Pertamakali dipublikasikan
oleh diplomat (sekaligus seorang kriptologis) Perancis, Blaise de Vigènere pada
abad 16 (tahun 1586). Tetapi sebenarnya Giovan Batista Belaso telah menggambarkannya
pertama kali pada tahun 1553 seperti ditulis di
dalam bukunya La Cifra del Sig. Giovan Batista Belaso. [2]
Algoritma tersebut baru dikenal luas 200 tahun
kemudian yang oleh penemunya cipher tersebut kemudian dinamakan vigenere cipher. Cipher ini
berhasil dipecahkan oleh Babbage dan Kasiski pada pertengahan Abad 19. Vigenere cipher digunakan oleh Tentara Konfiderasi (Confederate
Army) pada Perang Sipil Amerika (American Civil war). [2]
Vigenere cipher menggunakan
bujursangkar vigenere (Vigenere
Square) untuk melakukan enkripsi. Setiap baris di dalam bujursangkar
menyatakan huruf-huruf cipherteks yang diperoleh dengan Caesar cipher. Namun
pada jurnal ini kami menggunakan tabel ACII, dimana key-nya sebanyak
256 karakter. Sehingga hasil enkripsinya relatif lebih aman dibanding dengan
vigenere alfabet biasa (26 karakter).
Ciri-ciri
kriptografi kunci simetri klasik:
- Kunci enkripsi =
kunci dekripsi
- Algoritma
kriptografinya disebut algoritma simetri
- Contoh algoritma:
caesar cipher, vigenere cipher, playfair cipher, DES, 2DES, 3DES, AES,
RC2, RC3, RC4, RC5, RC6, Blowfish, GHOST, LOKI, IDEA, dll. [1]
public class VigenereClass { // kelas enkripsi public String enkripsi(String keyword, String line) { String result = ""; int offset; int j = 0, shift; for (int i = 0; i < line.length(); i++) { shift = ((int) keyword.charAt(j)) - 97; j++; j %= keyword.length(); offset = ((int) line.charAt(i) + shift) % 256; result += (char) (offset); } return result; } //kelas dekripsi public String dekripsi(String keyword, String line) { String result = ""; int offset; int j = 0, shift; for (int i = 0; i < line.length(); i++) { shift = ((int) keyword.charAt(j)) - 97; j++; j %= keyword.length(); offset = ((int) line.charAt(i) - shift) % 256; if (offset < 0) { offset += 256; } result += (char) (offset); } return result; } }
Penjelasan source code:
NB: lihat nilai
desimal karakter di tabel ASCII.
Diketahui
plaintext “HANTAM MEREKA”, jika menggunakan nilai Z = 97 (berdasrkan source code), kalau di tabel ASCII yaitu
huruf “a”. dan kuncinya “BOM”. Maka proses enkripsinya, sebagai berikut:
Rumus enkripsi:
Ci = (Pi + K) mod 256
- H = 72
-
shift
= nilai desimal kunci (B) – 97
= 66 - 97 = -31
-
Ci =
(72 + shift) mod 256
= (72 - 31) mod 256
= 41
-
nilai
desimal 41 di tabel ASCII mempunyai karakter
)
- A = 65
-
shift
= nilai desimal kunci (O) – 97
= 79 - 97 = -18
-
Ci =
(65 + shift) mod 256
= (65 - 18) mod 256
= 47
-
nilai
desimal 47 di tabel ASCII mempunyai karakter
/
- N = 78
-
shift
= nilai desimal kunci (M) – 97
= 77 - 97 = -20
-
Ci =
(78 + shift) mod 256
= (78 - 20) mod 256
= 58
-
nilai
desimal 58 di tabel ASCII mempunyai karakter
:
- T = 84
-
shift
= nilai desimal kunci (B) – 97
= 66 - 97 = -31
-
Ci =
(84 + shift) mod 256
= (84 - 31) mod 256
= 53
-
nilai
desimal 53 di tabel ASCII mempunyai karakter
5
- A = 65
-
shift
= nilai desimal kunci (O) – 97
= 79 - 97 = -18
-
Ci =
(65 + shift) mod 256
= (65 - 18) mod 256
= 47
-
nilai
desimal 47 di tabel ASCII mempunyai karakter
/
- M = 77
-
shift
= nilai desimal kunci (M) – 97
= 77 - 97 = -20
-
Ci =
(77 + shift) mod 256
= (77 - 20) mod 256
= 57
-
nilai
desimal 57 di tabel ASCII mempunyai karakter
9
- Spasi = 32
-
shift
= nilai desimal kunci (B) – 97
=
66 - 97 = -31
-
Ci =
(32 + shift) mod 256
= (32 - 31) mod 256
= 1
-
nilai
desimal 1 di tabel ASCII mempunyai karakter
SOH
- M = 77
-
shift
= nilai desimal kunci (O) – 97
= 79 - 97 = -18
-
Ci =
(77 + shift) mod 256
= (77 - 18) mod 256
= 59
-
nilai
desimal 59 di tabel ASCII mempunyai karakter
;
- E = 69
-
shift
= nilai desimal kunci (M) – 97
= 77 - 97 = -20
-
Ci =
(69 + shift) mod 256
= (69 - 20) mod 256
= 49
-
nilai
desimal 49 di tabel ASCII mempunyai karakter
1
- R = 82
-
shift
= nilai desimal kunci (B) – 97
= 66 - 97 = -31
-
Ci =
(82 + shift) mod 256
= (82 - 31) mod 256
= 51
-
nilai
desimal 51 di tabel ASCII mempunyai karakter
3
- E = 69
-
shift
= nilai desimal kunci (O) – 97
= 79 - 97 = -18
-
Ci =
(69 + shift) mod 256
= (69 - 18) mod 256
= 51
-
nilai
desimal 51 di tabel ASCII mempunyai karakter
3
- K = 75
-
shift
= nilai desimal kunci (M) – 97
= 77 - 97 = -20
-
Ci =
(75 + shift) mod 256
= (75 - 20) mod 256
= 55
-
nilai
desimal 49 di tabel ASCII mempunyai karakter
7
- A = 65
-
shift
= nilai desimal kunci (B) – 97
= 66 - 97 = -31
-
Ci =
(65 + shift) mod 256
= (65 - 31) mod 256
= 34
-
nilai
desimal 34 di tabel ASCII mempunyai karakter
"
Jadi, Plaintext
“HANTAM MEREKA” dengan kunci “BOM” mempunyai ciphertext )/:5/9;1337" .
Untuk melakukan proses dekripsi, bisa menggunkan rumus dekripis vigenere
cipher.
sangat detail artikelnya, saya juga merangkum tulisan tentang vigenere, dapat dilihat disini http://arfianhidayat.com/algoritma-kriptografi-vigenere-cipher
ReplyDeleteAda DEMO PROGRAM-nya juga, semoga membantu