Sabtu, 17 Oktober 2009

Transposition Cipher

Transposition ciphers mengatur ulang huruf-huruf dari plaintext tanpa menggantinya. Sebagai contoh, transposition cipher yang sangat sederhana adalah the rail fence, di mana plaintext ditulis per huruf dalam dua baris dan kemudian dibaca per baris untuk dijadikan ciphertext.

The rail fence adalah contoh sederhana dari jenis transposition ciphers yang disebut juga dengan route ciphers. Umumnya, di route ciphers elemen-elemen plaintext (biasanya per huruf) ditulis ke dalam bentuk matriks yang disetujui oleh pengirim (transmitter) dan penerima (receiver).

Contoh berikut ini menggunakan kunci kata CIPHER, sebuah matriks dapat ditulis seperti berikut ini:


C I P H E R
1 4 5 3 2 6
B U K U
P
E S A N A N

T E L A H
D I K I R I
M





Tidak seperti sebelumnya, plaintext ditulis secara normal dari kiri ke kanan, dan ciphertext-nya akan dibaca dari atas ke bawah (per kolom). Urutan di mana kolom akan ditulis dari ciphertext disesuaikan dengan urutan kuncinya. Matriks di atas akan menghasilkan ciphertext: BE DM AAR UNLI USTIKAEK.

Kolom pertama C dalah pendahulu dalam urutan alphabet dibanding dengan huruf-huruf lainnya dalam kata “CIPHER”. Diikuti dengan kolom kedua E, dan seterusnya. Keamanan dalam metode enkripsi ini dapat ditingkatkan dengan enkripsi ulang hasil cipher dengan menggunakan transposisi lain. Hal itu dimungkinkan karena setiap hasil transposisi yang berupa ciphertext dapat ditransposisi dengan kunci lainnya untuk menghasilkan ciphertext berikutnya.


Berikut penerapannya dalam Visual Basic




Private Sub cmdDekripsi_Click()
'koneksi database
Adodc1.RecordSource = "select * from posisi"
Adodc1.Refresh

'hitung jumlah karakter pesan
p = Len(Trim(txtCipher.Text))
dpesan.Text = p

'hitung jumlah karakter kunci
k = Len(Trim(txtKunci.Text))
dkunci.Text = k

'hitung npembagi
npembagi = p / k
sisabagi = p Mod k
If sisabagi > 0 Then
npembagi = npembagi + 1
End If

'hitung jumlah record
jumlahrecord = Adodc1.Recordset.RecordCount

'hapus jika record telah berisi data
If jumlahrecord > 0 Then
For c = 1 To jumlahrecord
Adodc1.Recordset.Delete
Adodc1.Recordset.MoveNext
Next c
End If

'MEMASUKKAN KE DALAM DATABASE
'Menulis secara Horisontal/Berdasarkan record
'masukkan kata kunci dalam database
a = 1
For i = 1 To k
Adodc1.Recordset.AddNew
karkunci = Mid(txtKunci.Text, a, 1)
Adodc1.Recordset.Fields(1) = karkunci
a = a + 1
Adodc1.Recordset.Update
Next i
Adodc1.Recordset.MoveFirst
Adodc1.Recordset.MoveNext

'Mengurutkan Kunci secara Ascending
Adodc1.RecordSource = "SELECT * FROM posisi ORDER BY 2 ASC"
Adodc1.Refresh


'Memasukkan CipherText dalam database
Adodc1.Recordset.MoveFirst
b = 1
For d = 1 To k
For e = 2 To npembagi + 1
Data = Mid(txtCipher.Text, b, 1)
Adodc1.Recordset.Fields(e) = Data
b = b + 1
Cipher = Cipher + Data
Next e
Adodc1.Recordset.MoveNext
Adodc1.Recordset.Update
On Error Resume Next
Next d

'Mengurutkan index secara Ascending
Adodc1.RecordSource = "SELECT * FROM posisi ORDER BY 1 ASC"
Adodc1.Refresh
'MEMBACA DATABASE
'Membaca secara Vertikal
'Perulangan untuk pengambilan karakter enkripsi
Adodc1.Refresh
For d = 2 To npembagi + 1
For e = 1 To Adodc1.Recordset.RecordCount
If Adodc1.Recordset.Fields(d) = " " Then
Data = " "
Else
Data = Adodc1.Recordset.Fields(d)
End If
pesan = pesan + Data
Adodc1.Recordset.MoveNext

'Masukkan hasil enkripsi ke CipherText
txtPesan2.Text = pesan
Next e
Adodc1.Recordset.MoveFirst
Next d
End Sub

Private Sub cmdEnkripsi_Click()
'koneksi database
Adodc1.RecordSource = "select * from posisi"
Adodc1.Refresh

'hitung jumlah karakter pesan
p = Len(Trim(txtPesan.Text))
epesan.Text = p

'hitung jumlah karakter kunci
k = Len(Trim(txtKunci.Text))
ekunci.Text = k

'hitung npembagi
npembagi = p / k
sisabagi = p Mod k
If sisabagi > 0 Then
npembagi = npembagi + 1
End If

'hitung jumlah record
jumlahrecord = Adodc1.Recordset.RecordCount

'hapus jika record telah berisi data
If jumlahrecord > 0 Then
For c = 1 To jumlahrecord
Adodc1.Recordset.Delete
Adodc1.Recordset.MoveNext
Next c
End If

'MEMASUKKAN KE DALAM DATABASE
'Penulisan Secara Vertikal
'masukkan kata kunci dalam database
a = 1
For i = 1 To k
Adodc1.Recordset.AddNew
karkunci = Mid(txtKunci.Text, a, 1)
Adodc1.Recordset.Fields(1) = karkunci
a = a + 1
Adodc1.Recordset.Update
Next i

'masukkan kata pesan dalam database
Adodc1.Recordset.MoveFirst
a = 1
For i = 2 To npembagi + 2
For j = 1 To k
'Isi sebagai data kosong ketika pesan telah habis
If a <= p Then
karkunci = Mid(txtPesan.Text, a, 1)
Adodc1.Recordset.Fields(i) = karkunci
a = a + 1
Else
karkunci = " "
Adodc1.Recordset.Fields(i) = karkunci
End If

'Memasukkan data
If j < k Then
Adodc1.Recordset.Update
Adodc1.Recordset.MoveNext
Else
Adodc1.Recordset.Update
End If
Next j
Adodc1.Recordset.MoveFirst
Next i

'Mengurutkan Kunci secara Ascending
Adodc1.RecordSource = "SELECT * FROM posisi ORDER BY 2 ASC"
Adodc1.Refresh

'MEMBACA DATABASE
'Membaca Database secara Horisontal(Membaca masing-masing record)
k = Len(Trim(txtKunci.Text))

'perulangan untuk record berikutnya
For c = 1 To k
For d = 2 To npembagi + 2
If Adodc1.Recordset.Fields(d) = " " Then
Data = " "
Else
Data = Adodc1.Recordset.Fields(d)
End If
pesan = pesan + Data
txtCipher.Text = pesan
Next d
Adodc1.Recordset.MoveNext
Next c
Adodc1.Recordset.MoveFirst

End Sub

Private Sub txtKunci_KeyPress(KeyAscii As Integer)
KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub

Private Sub txtPesan_KeyPress(KeyAscii As Integer)
KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub

Private Sub txtCipher_KeyPress(KeyAscii As Integer)
KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub

Selasa, 08 September 2009

Contoh Kriptografi

• Caesar Cipher
Algoritma ini pertama kali digunakan oleh Julius Caesar, dan disebut juga sebagai Shift Cipher, yaitu dengan cara menggeser urutan abjadnya.
→ Plaintext : ABCDEFGHIJKLMNOPQRSTUVWXYZ
→ Cipher : DEFGHIJKLMNOPQRSTUVWXYZABC
Algoritma Caesar Cipher
Contoh:
Plain Text : RAHASIA
Cipher : UDKDVLD


Vigenere Cipher
Vigenere Cipher ditemukan oleh Blaise de Vigenere pada abad ke 16. Untuk menggunakan algoritma ini, maka diperlukan sebuah tabel vigenere dimana kolom paling kiri tabel menyatakan huruf-huruf kunci, sedangkan baris paling atas menyatakan huruf-huruf plaintext dan setiap baris di dalam tabel menyatakan huruf-huruf ciphertext.
Tabel Vigenere Chiper

Download Program Enkripsi dengan Metode Caesar Cipher dan Metode Vigenere Cipher

Kriptografi

Kriptografi adalah suatu ilmu yang mempelajari bagaimana cara menjaga agar data atau pesan tetap aman saat dikirimkan, dari pengirim ke penerima tanpa mengalami gangguan dari pihak ketiga. Menurut Bruce Scheiner dalam bukunya "Applied Cryptography", kriptografi adalah ilmu pengetahuan dan seni menjaga message-message agar tetap aman (secure).

Konsep kriptografi sendiri telah lama digunakan oleh manusia misalnya pada peradaban Mesir dan Romawi walau masih sangat sederhana. Prinsip-prinsip yang mendasari kriptografi yakni:

· Confidelity (kerahasiaan) yaitu layanan agar isi pesan yang dikirimkan tetap rahasia dan tidak diketahui oleh pihak lain (kecuali pihak pengirim, pihak penerima / pihak-pihak memiliki ijin). Umumnya hal ini dilakukan dengan cara membuat suatu algoritma matematis yang mampu mengubah data hingga menjadi sulit untuk dibaca dan dipahami.

· Data integrity (keutuhan data) yaitu layanan yang mampu mengenali/mendeteksi adanya manipulasi (penghapusan, pengubahan atau penambahan) data yang tidak sah (oleh pihak lain).

· Authentication (keotentikan) yaitu layanan yang berhubungan dengan identifikasi. Baik otentikasi pihak-pihak yang terlibat dalam pengiriman data maupun otentikasi keaslian data/informasi.

· Non-repudiation (anti-penyangkalan) yaitu layanan yang dapat mencegah suatu pihak untuk menyangkal aksi yang dilakukan sebelumnya (menyangkal bahwa pesan tersebut berasal dirinya).


Berikut adalah istilah-istilah yang digunakan dalam bidang kriptografi :

  • Plaintext (M) adalah pesan yang hendak dikirimkan (berisi data asli).
  • Ciphertext (C) adalah pesan ter-enkrip (tersandi) yang merupakan hasil enkripsi.
  • Enkripsi (fungsi E) adalah proses pengubahan plaintext menjadi ciphertext.
  • Dekripsi (fungsi D) adalah kebalikan dari enkripsi yakni mengubah ciphertext menjadi plaintext, sehingga berupa data awal/asli.
  • Kunci adalah suatu bilangan yang dirahasiakan yang digunakan dalam proses enkripsi dan dekripsi.

Diagram Proses Enkripsi dan Dekripsi