Vous êtes sur la page 1sur 126

PERANCANGAN DAN PEMBUATAN APLIKASI

ENKRIPSI DAN DEKRIPSI FILE DAN FOLDER


MENGGUNAKAN METODE TWOFISH


SKRIPSI





Oleh:

Montaseri Fanidzar
NIM. 05550010











JURUSAN TEKNIK INFORMATIKA
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS ISLAM NEGERI (UIN)
MAULANA MALIK IBRAHIM MALANG
2010


PERANCANGAN DAN PEMBUATAN APLIKASI
ENKRIPSI DAN DEKRIPSI FILE DAN FOLDER
MENGGUNAKAN METODE TWOFISH



Diajukan Kepada:
Universitas Islam Negeri (UIN) Maulana Malik Ibrahim Malang
Untuk Memenuhi Salah Satu Persyaratan dalam
Memperoleh Gelar Sarjana Komputer (S. Kom)



Oleh:

Montaseri Fanidzar
NIM. 05550010








JURUSAN TEKNIK INFORMATIKA
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS ISLAM NEGERI (UIN)
MAULANA MALIK IBRAHIM MALANG
2010






HALAMAN PERNYATAAN


Saya yang bertanda tangan dibawah ini :

Nama : Montaseri Fanidzar
NIM : 05550010
Fakultas/J urusan : Sains dan Teknologi / Teknik Informatika
Judul Tugas Akhir : PERANCANGAN DAN PEMBUATAN APLIKASI
ENKRIPSI DAN DEKRIPSI FILE DAN FOLDER
MENGGUNAKAN METODE TWOFISH

Dengan ini menyatakan bahwa :
1. Isi dari tugas Akhir yang saya buat adalah benar-benar karya sendiri dan
tidak menjiplak karya orang lain, selain nama-nama termaktub di isi dan
tertulis di daftar pustaka dalam Skripsi ini.
2. Apabila dikemudian hari ternyata Skripsi saya tulis terbukti hasil jiplakan,
maka saya akan bersedia menanggung segala resiko yang akan saya
terima.

Demikian pernyataan ini dibuat dengan segala kesadaran.



Malang, 2010
Yang menyatakan,


Montaseri Fanidzar
NIM. 05550010








Motto :

_| _ _l> ,...l _ .l.> _,l !.l ., _|` .,l
_ _ `., < !.., :`- _ls ,`.`> `., _ _l>
,.,.l _ !.`, !. 1l> ..> L., , ..>,. !.1 ,.s !.l _


Sesungguhnya dalam penciptaan langit dan bumi, dan silih bergantinya malam
dan siang terdapat tanda-tanda bagi orang-orang yang berakal, (yaitu) orang-
orang yang mengingat Allah sambil berdiri atau duduk atau dalam keadan
berbaring dan mereka memikirkan tentang penciptaan langit dan bumi (seraya
berkata): "Ya Tuhan kami, tiadalah Engkau menciptakan Ini dengan sia-sia,
Maha Suci Engkau, Maka peliharalah kami dari siksa neraka.
(Qs. Ali Imrn/3: 190-191)


KATA PENGANTAR

Alhamdulillah, puji syukur kehadirat Allah SWT. karena dengan anugrah
yang telah diberikan sehingga penulis berhasil menyelesaikan skripsi ini dengan
semaksimal mungkin, walaupun masih jauh dari nilai sempurna. Karena semua
yang sempurna hanyalah milik Allah SWT.
Selama penulisan skripsi ini tidak sedikit bantuan yang penulis dapatkan
dari berbagai pihak. Oleh karena itu, dalam kesempatan ini dengan segala
kerendahan hati, penulis ingin menyampaikan terima kasih yang sebesar-besarnya
kepada :
1. Prof. Dr. H. Imam Suprayogo, selaku rektor Universitas Islam Negeri
(UIN) Maulana Malik Ibrahim Malang.
2. Prof. Dr. Sutiman Bambang Sumitro, SU., Dsc,, selaku dekan Fakultas
Sains dan Teknologi Universitas Islam Negeri (UIN) Maulana Malik
Ibrahim Malang.
3. Ririen Kusumawati, M. Kom selaku ketua jurusan Teknik Informatika
fakultas Sains dan Teknologi Universitas Islam Negeri (UIN) Maulana
Malik Ibrahim Malang.
4. Zainal Abidin, M. Kom. selaku dosen pembimbing dalam pengerjaan
skripsi ini yang telah memberikan bimbingan, kritik, saran, dan kesabaran
sehingga skripsi ini terselesaikan.
5. Achmad Nasichuddin, M. A. selaku dosen pembimbing integrasi sains dan
Islam Universitas Islam Negeri (UIN) Maulana Malik Ibrahim Malang,
yang telah memberi masukan, saran serta bimbingan dalam proses
menyelesaikan skripsi ini.


6. Mama dan Abah, yang selalu memberikan doa, materi dan dukungan
yang sangat membantu penulis dalam menyelesaikan skripsi (jasa-jasa
lawan pengorbanan pian ulun ingat selalu). Serta adikku Hendra yang
selalu memberikan masukan dan dukungannya.
7. Seluruh dosen-dosen Teknik Informatika atas semua kesabaran dan
keteguhan hati untuk mendidik penulis. Sehingga semua ilmu yang
diberikan dapat menjadi hal yang berguna bagi penulis sebagai bekal
penulis untuk menghadapi masa depan.
8. Bun yang selalu memberikan dukungan, masukan, dan semangat yang
tiada terkira setiap waktu serta terima kasih atas pengertiannya selama
penulis menyelesaikan skripsi.
9. Seluruh teman-teman Teknik Informatika UIN Maulana Malik Ibrahim
Malang pada umumnya dan teman-teman seperjuangan angkatan 2005
khususnya, yang selalu memberi dukungan dan bantuan untuk
menyelesaikan skripsi ini.
10. Dan semua pihak yang tidak dapat saya sebutkan satu-persatu.
Penulis menyadari bahwa skripsi ini masih jauh dari sempurna, oleh
karena itu kritik dan saran yang sifatnya membangun sangat diperlukan untuk
memperbaiki mutu penulisan selanjutnya.

Malang, 6 J uli 2010


Penulis

DAFTAR ISI

HALAMAN J UDUL .................................................................................... i
HALAMAN PENGAJ UAN .......................................................................... ii
HALAMAN PERSETUJ UAN ...................................................................... iii
HALAMAN PENGESAHAN ....................................................................... iv
HALAMAN PERNYATAAN ...................................................................... v
MOTTO ....................................................................................................... vi
KATA PENGANTAR .................................................................................. vii
DAFTAR ISI ................................................................................................ ix
DAFTAR TABEL ........................................................................................ xii
DAFTAR GAMBAR .................................................................................... xiii
DAFTAR LAMPIRAN ................................................................................. xvi
ABSTRAK ................................................................................................... xvii
BAB I PENDAHULUAN ............................................................................. 1
1.1 Latar Belakang ............................................................................... 1
1.2 Rumusan Masalah .......................................................................... 5
1.3 Tujuan Penelitian ........................................................................... 5
1.4 Manfaat Penelitian ......................................................................... 5

1.5 Batasan Penelitian .......................................................................... 5
1.6 Sistematika Penyusunan Skripsi ..................................................... 6
BAB II TINJ AUAN PUSTAKA ................................................................... 8
2.1 Kerahasiaan Hidup Manusia ........................................................... 8
2.2 Teori Kriptografi ............................................................................ 10
2.2.1 Algoritma Berdasarkan Kunci ..................................................... 15
2.2.2 Algoritma Berdasarkan Mode Bit ................................................ 18
2.3. Twofish ......................................................................................... 25
2.3.1 Unsur Pembangun Algoritma Twofish ......................................... 27
2.3.2 Algoritma Twofish ...................................................................... 29
2.3.3 Tujuan Desain Twofish ............................................................... 44
BAB III PERANCANGAN DAN DESAIN SISTEM ................................... 48
3.1 Analisis Sistem ............................................................................... 48
3.1.1 Deskripsi Sistem.......................................................................... 48
3.1.2 Perancangan Proses Sistem .......................................................... 51
3.2 Tahapan Penelitian ......................................................................... 56
3.3 Perancangan Antarmuka ................................................................. 57
BAB IV IMPLEMENTASI DAN EVALUASI ............................................. 61
4.1 Ruang Lingkup Pendukung Implementasi ...................................... 61

4.1.1 Ruang Lingkup Perangkat Keras ................................................. 61
4.1.2 Ruang Lingkup Perangkat Lunak................................................. 62
4.2 Implementasi Sistem ...................................................................... 62
4.2.1 Implementasi Algoritma Twofish ................................................ 62
4.2.2 Enkripsi dan Dekripsi Folder ....................................................... 65
4.3 Implementasi Antarmuka ............................................................... 67
4.4 Uji Coba Perangkat Lunak.............................................................. 70
4.4.1 Uji Coba dengan Ekstensi File .doc ............................................. 71
4.4.2 Uji Coba dengan Ekstensi File .exe ............................................. 75
4.4.3 Uji Coba dengan Ekstensi File .jpg .............................................. 77
4.4.4 Uji Coba dengan Ekstensi File .mp3 ............................................ 80
4.4.5 Uji Coba dengan Ekstensi File .mp4 ............................................ 83
4.4.6 Uji Coba Enkripsi-Dekripsi Folder .............................................. 86
4.5 Evaluasi Sistem .............................................................................. 88
4.6 Hubungan Kriptografi dengan Kerahasiaan Menurut Islam ............. 89
BAB V PENUTUP ....................................................................................... 90
5.1. Kesimpulan ................................................................................... 90
5.2. Saran ............................................................................................. 90
DAFTAR PUSTAKA ................................................................................... 91

DAFTAR TABEL

Tabel 4.1 Hasil Enkripsi dan Dekripsi ........................................................... 89

DAFTAR GAMBAR

Gambar 2.1 Skema Enkripsi dan Dekripsi ........................................................ 14
Gambar 2.2 Diagram Proses Enkripsi dan Dekripsi Algoritma Simetris ........... 16
Gambar 2.3 Diagram Proses Enkripsi dan Dekripsi Algoritma Asimetris ......... 17
Gambar 2.4 SkemaModeOperasi ECB .............................................................. 20
Gambar 2.5 Skema Mode Operasi CBC. .......................................................... 21
Gambar 2.6 Skema Mode Operasi CFB ........................................................ 22
Gambar 2.7. Skema Mode Operasi OFB ....................................................... 23
Gambar 2.8 Blok Diagram Twofish. ............................................................. 31
Gambar 2.9 Skema Fungsi h ......................................................................... 39
Gambar 2.10 Satu Putaran Fungsi F (Kunci 128-bit) ..................................... 44
Gambar 3.1 Enkripsi File dan Folder ............................................................ 49
Gambar 3.2 Dekripsi File dan Folder ............................................................ 50
Gambar 3.3 Bagan Algoritma Twofish .......................................................... 51
Gambar 3.4 Fungsi h ..................................................................................... 53
Gambar 3.5 Proses Whitening ....................................................................... 54
Gambar 3.6 Fungsi F .................................................................................... 55
Gambar 3.7 Swap Blok Terakhir ................................................................... 56

Gambar 3.8 Rancangan Form Enkripsi ......................................................... 58
Gambar 3.9 Rancangan Form Dekripsi ......................................................... 59
Gambar 4.1 Form Enkripsi ........................................................................... 68
Gambar 4.2 Form Dekripsi ........................................................................... 72
Gambar 4.3 File KRIPTOGRAFI.doc dalam Heksadesimal ....................... 72
Gambar 4.4 File enkrip KRIPTOGRAFI dalam Heksadesimal................... 73
Gambar 4.5 File dekrip KRIPTOGRAFI.doc dalam Heksadesimal ............ 74
Gambar 4.6 File QuranInWord.exe dalam Heksadesimal ........................... 75
Gambar 4.7 File enkrip QuranInWord dalam Heksadesimal ...................... 76
Gambar 4.8 File dekrip QuranInWord.exe dalam Heksadesimal ................ 77
Gambar 4.9 File Spiderman.jpg dalam Heksadesimal ................................ 78
Gambar 4.10 File enkrip Spiderman dalam Heksadesimal ......................... 79
Gambar 4.11 File dekrip Spiderman.jpg dalam Heksadesimal.................... 80
Gambar 4.12 File Firasat.mp3 dalam Heksadesimal................................... 81
Gambar 4.13 File enkrip Firasat dalam Heksadesimal................................ 82
Gambar 4.14 File dekrip Firasat.mp3 dalam Heksadesimal ........................ 83
Gambar 4.15 File Best In Me.mp4 dalam Heksadesimal ............................ 84
Gambar 4.16 File enkrip BestInMe dalam Heksadesimal ........................... 85
Gambar 4.17 File dekrip BestInMe.mp4 dalam Heksadesimal ................... 86

Gambar 4.18 Folder PROPOSAL .............................................................. 87
Gambar 4.19 File enkrip proposalx dalam Heksadesimal ........................... 87
Gambar 4.20 Folder dekrip proposal .......................................................... 88


DAFTAR LAMPIRAN

Lampiran 1. Listing Program (Main) ............................................................. 93
Lampiran 2. Listing Program Algoritma Twofish .......................................... 115

ABSTRAK
Fanidzar, Montaseri. 2010. 05550010. Perancangan dan Pembuatan Aplikasi
Enkripsi dan Dekripsi File dan Folder Menggunakan Metode Twofish.
Pembimbing : (I) Zainal Abidin, M. Kom, (II) Achmad Nashichuddin, M.A.
Kata Kunci : Kriptografi, Twofish, Enkripsi, Dekripsi, File, Folder.

Kerahasiaan dan keamanan data merupakan suatu hal yang menjadi
kebutuhan pada dewasa ini. Dengan begitu seseorang yang tidak berkepentingan
untuk mengetahui informasi dari data tersebut tidak bisa mengaksesnya. Seiring
dengan hal itu kriptografi dibutuhkan untuk menangani segala masalah yang
menyangkut keamanan informasi. Kriptografi merupakan solusi dalam menangani
masalah keraharasiaan dan keamanan informasi. Kriptografi merupakan ilmu dan
seni untuk mengamankan pesan. Kriptografi awalnya digunakan untuk mengirim
pesan pada saat peperangan. Kriptografi telah dikenal pada masa kekaisaran J ulius
Caesar, pada saat itu kriptografi digunakan untuk mengirimkan pesan rahasia agar
tidak dapat diketahui oleh pihak musuh. Cara merahasiakan pesan saat itu
menggunakan metode Caesar. Seiring perkembangan zaman, metode kriptografi
tidak hanya digunakan untuk mengirimkan pesan saat peperangan tetapi
digunakan untuk kebutuhan yang lain seperti untuk mengamankan data sehingga
saat ini banyak bermunculan algoritma modern.
Twofish merupakan algoritma kriptografi modern yang menjadi kandidat
AES yang menggantikan algoritma terdahulu yakni adalah algoritma DES.
Algoritma twofish diciptakan oleh Bruce Schneier yang sebelumnya menciptakan
algoritma blowfish. Twofish memenuhi semua kriteria yang dibutuhkan NIST,
yaitu 128-bit block, 128 bit, 192 bit dan 256 bit kunci. Beberapa kelebihan
twofish yaitu twofish adalah cipher blok 128 bit yang menerima kunci dengan
panjang variabel 256 bits dan twofish telah didesain dari awal dengan
menekankan pada kinerjanya. Twofish sangat efisien diimplementasikan pada
beragam platform, yaitu CPU 32 bit, smart card 8 bit, dan perangkat keras VLSI.
Hasilnya merupakan algoritma yang sangat fleksibel yang dapat
diimplementasikan secara efisien dalam beragam aplikasi kriptografi.
Melihat dari beberapa kelebihan algoritma twofish tersebut, maka pada
penelitian ini algoritma twofish diimplementasikan untuk merancang dan
membangun aplikasi enkripsi dan dekripsi file dan folder. Twofish merupakan
algoritma simetris sehingga kunci yang digunakan pada saat mengenkripsi dan
mendekripsi sama. Pada perangkat lunak yang telah dibangun dapat
meraharasiakan file dan folder sehingga tidak dapat dimengerti.



BAB I
PENDAHULUAN

1.1 Latar Belakang
Adanya perkembangan teknologi yang sangat pesat pada masa sekarang,
membuat manusia membutuhkan suatu sistem informasi untuk mempermudah
mengakses, mengirim, atau bertukar informasi pada suatu instansi ataupun
perusahaan yang sesuai dengan kebutuhan. Kemampuan untuk mengakses
informasi secara cepat, tepat, dan akurat menjadi suatu hal yang penting.
Kemudahan suatu sistem informasi bisa memanfaatkan jaringan internet ataupun
dengan Local Area Network (LAN) sehingga jarak dan waktu dalam mengirim,
menerima, maupun bertukar data yang memiliki muatan informasi bukan menjadi
suatu hambatan lagi.
Kemajuan sistem informasi memiliki banyak keuntungan tetapi juga rawan
dari hal yang negatif seperti pencurian informasi. Misalnya pada sebuah
perusahaan, beberapa informasi yang sifatnya rahasia dan hanya boleh diketahui
oleh orang-orang tertentu dalam sebuah perusahaan tersebut seperti informasi
tentang cara membuat produk yang sedang dikembangkan. Seandainya data yang
berisi informasi tersebut jatuh kepada pihak lawan bisnis, maka perusahaan akan
mengalami kerugian. Untuk mengantisipasi hal yang tidak diinginkan seperti
pencurian informasi, maka dibutuhkan suatu sistem untuk mengamankan suatu
informasi. Keamanan informasi yang terkomputasi merupakan suatu masalah

yang amat penting bagi sebuah perusahan, lembaga, perguruan tinggi maupun
individu. Sistem untuk mengamankan informasi pada masalah ini dapat
memanfaat kriptografi. Menurut Bruce Schneier, kriptografi adalah ilmu dan seni
untuk menjaga keamanan pesan (Munir : 2006 : 2).
Terkait tentang konsep kerahasiaan pada kriptografi, kerahasiaan menurut
konsep agama Islam bahwa kejadian-kejadian apapun yang ada di alam semesta
ini merupakan suatu rahasia Allah yang telah dituliskanNya di dalam lauhul
mahfuzh. Menyangkut tentang hal tersebut, Allah berfirman dalam surah Al-
Hadiid pada ayat 22 :
!. ,!. _. ,,.. _ _ _ >.. | _ .. _. _,
!>. | l: _ls < ,. __

Tiada suatu bencanapun yang menimpa di bumi dan (Tidak pula) pada
dirimu sendiri melainkan Telah tertulis dalam Kitab (Lauhul Mahfuzh)
sebelum kami menciptakannya. Sesungguhnya yang demikian itu adalah
mudah bagi Allah. (QS. Al-Hadiid : 22)

Kerahasiaan dan keamanan merupakan hal yang dituntut pada ilmu
kriptografi. Kriptografi itu sendiri telah dikenal sejak zaman kekaisaran romawi
pada saat J ulius Caesar memimpin. Pada saat itu cara dalam menyampaikan pesan
rahasia tidak boleh diketahui oleh pihak manapun khususnya pada pihak musuh.
Metode Caesar yang merupakan metode yang dipakai pada saat itu yang dikenal
hingga sekarang. Metode Caesar itu sendiri adalah cara merahasiakan pesan pada
saat itu dengan menggunakan teknik pergeseran dengan menggeser tiap huruf ke
kanan atau ke kiri pada urutan alphabet beberapa buah. Pada zaman perang dunia

kedua kriptografi juga sangat dibutuhkan untuk merahariakan pesan. Media yang
dipakai pada saat itu menggunakan mesin untuk mengenkripsi pesan yang
bernama Enigma. Enigma merupakan mesin andalan yang digunakan J erman,
namun pihak sekutu berhasil memecahkannya. (Octamanullah, 2007:1)
Sejak perang dunia kedua berakhir, kriptografi dirasa masih dibutuhkan
pada saat kehidupan sehari-hari untuk mengamankan data-data yang bersifat
penting dan rahasia. Dengan begitu memicu banyaknya algoritma kriptografi yang
bermunculan sesuai dengan perkembangan zaman. Sampai saat ini algoritma
kriptografi modern sendiri berkembang pesat. Algoritma kriptografi modern dapat
dibagi menjadi dua algoritma kunci yaitu algoritma kunci simetris dan algoritma
asimetris. Algoritma simetris adalah algoritma yang menggunakan kunci enkripsi
dan dekripsi yang sama. Sedangkan algoritma asimetris adalah algoritma yang
menggunakan kunci enkripsi dan dekripsi yang berbeda. Adapula algoritma yang
beroperasi dalam mode bit dapat dibagi menjadi dua, yaitu stream chiper (chiper
aliran) dan block chiper (cipher blok). Stream chiper adalah algoritma yang
melakukan operasi dalam bentuk bit tunggal. Sedangkan block chiper adalah
algoritma yang melakukan operasi dalam bentuk blok bit. Stream chiper dan block
chiper adalah algoritma yang digunakan pada algoritma kunci simetris.
Saat ini sudah banyak aplikasi enkripsi yang menggunakan algoritma
kunci simetris. Salah satu algoritma dengan kunci simetris adalah DES (Data
Encryption Standards). DES merupakan algoritma enkripsi standart yang
dikeluarkan oleh National Institute of Standards and Technology (NIST).
Algoritma DES (Data Encryption Standard) yang banyak digunakan sebagai

standard enkripsi kriptografi kunci simetris mendekati akhir penggunaannya
karena mengandung banyak kontroversi dan dianggap sudah tidak aman lagi.
Beberapa kriptografer keberatan karena proses pembuatannya yang bersifat
tertutup. Selain itu panjang kuncinya juga dianggap terlalu pendek untuk dapat
digunakan secara luas dalam berbagai bidang, dengan perangkat keras khusus
kuncinya bisa ditemukan dalam beberapa hari. National Institute of Standard and
Technology (NIST) sebagai agensi Departemen Perdagangan Amerika Serikat
mengusulkan kepada Pemerintah Federal Amerika Serikat untuk sebuah standard
kriptografi yang baru. (Mukmin, 2007 : 1)
Dengan alasan tersebut, NIST mengadakan Advanced Encryption
Standard (AES) sebagai standart baru. Salah satu kandidat AES adalah algoritma
twofish dibuat oleh Bruce Schneier. Twofish memenuhi semua kriteria yang
dibutuhkan NIST, yaitu 128-bit block, 128 bit, 192 bit dan 256 bit kunci.
Beberapa kelebihan twofish yaitu twofish adalah cipher blok 128 bit yang
menerima kunci dengan panjang variabel 256 bits, twofish tidak mengandung
kunci lemah, dan twofish telah didesain dari awal dengan menekankan pada
kinerjanya. Twofish sangat efisien diimplementasikan pada beragam platform,
yaitu CPU 32 bit, smart card 8 bit, dan perangkat keras VLSI. Hasilnya
merupakan algoritma yang sangat fleksibel yang dapat diimplementasikan secara
efisien dalam beragam aplikasi kriptografi. (Mukmin, 2007 : 7)
Berdasarkan semua hal yang telah dijabarkan di atas, maka pada skripsi ini
algoritma twofish digunakan untuk merancang dan membangun aplikasi enkripsi
dan dekripsi file serta folder sebagai aplikasi untuk mengamankan data.


1.2 Rumusan Masalah
Berdasarkan latar belakang di atas maka diperoleh rumusan permasalahan
pada penelitian ini yaitu bagaimana merancang dan membuat aplikasi enkripsi dan
dekripsi menggunakan metode twofish ?

1.3 Tujuan Penelitian
Penelitian ini bertujuan untuk merancang dan membuat aplikasi kriptografi
enkripsi dan dekripsi menggunakan metode twofish.

1.4 Manfaat Penelitian
Hasil penelitian ini diharapkan berguna sebagai sarana pengembangan
keilmuan dalam bidang teknik informatika dan kemampuan dalam membangun
perangkat lunak pada ilmu kriptorafi yaitu aplikasi enkripsi dan dekripsi dengan
mengimplementasikan algoritma twofish sehingga peneliti bisa merasakan
manfaatnya. Bagi masyarakat yang membutuhkan keamanan dan kerahasiaan
data, aplikasi enkripsi dan dekripsi dengan algoritma twofish dapat dipergunakan
sebagai aplikasi alternatif.

1.5 Batasan Masalah
Adapun batasan permasalahan pada skripsi ini adalah :
a. Aplikasi enkripsi dan dekripsi menggunakan algoritma twofish.
b. Objek yang dienkripsi maupun didekripsi berupa file dan folder.


1.6 Sistematika Penyusunan Skripsi
Sistematika dalam penulisan skripsi ini akan dibagi menjadi beberapa bab
sebagai berikut :
a. Bab 1 Pendahuluan
Pendahuluan adalah bab pertama dari tugas akhir yang memuat tentang
berbagai alasan tentang pentingnya dilakukan penelitian ini, untuk apa penelitian
tersebut dan mengapa penelitian itu harus dilakukan. Oleh karena itu, bab
pendahuluan terdiri atas : Latar belakang masalah, tujuan penelitian, manfaat
penelitian, rumusan masalah, batasan masalah, dan sistematika penyusunan
skripsi.
b. Bab 2 Tinjauan Pustaka
Bab dua berisi tentang acuan ilmiah yang dipakai sebagai referensi. Bahan
pustaka yang digunakan diperoleh dari berbagai sumber seperti : J urnal penelitian,
laporan penelitian, buku, maupun temuan-temuan hasil browsing di internet.
Adapun teori yang akan digunakan pada penelitian ini adalah tentang kriptografi
dan algoritma twofish. Berikutnya mengkaji hasil temuan pustaka yang
berhubungan dengan konsep-konsep yang dipermasalahkan dan akan dipakai
dalam analisis, termasuk mengkaji tentang integrasi keislaman yang berkaitan
dengan penelitian ini.
c. Bab 3 Analisis dan Perancangan
Bab tiga berisi analisa dan desain sistem secara terstruktur, yang
dilengkapi dengan beberapa diagram dan pseudocode algoritma. Selain itu akan

dilakukan pembuatan aplikasi yang dibangun sesuai dengan permasalahan dan
batasannya yang telah dijabarkan pada bab pertama.
d. Bab 4 Hasil dan Pembahasan
Bab empat membahas tentang implementasi dari aplikasi yang dibuat
secara keseluruhan. Serta melakukan pengujian terhadap aplikasi yang dibuat
untuk mengetahui apakah aplikasi tersebut telah berjalan sesuai dengan yang
diharapkan, termasuk relevansi dalam kajian keislamannya.
e. Bab 5 Penutup
Penutup berisi kesimpulan dan saran dari hasil penelitian. Kesimpulan
merupakan pernyataan singkat yang dijabarkan dari hasil penelitian dan
pembahasan, untuk membuktikan kebenaran dari temuan pustaka yang diperoleh
sekaligus menjawab tujuan penelitian. Sedangkan saran adalah rekomendasi untuk
penelitian selanjutnya, yang didasarkan atas pengalaman dan pertimbangan dari
hasil penelitian yang telah dilakukan.



BAB II
TINJAUAN PUSTAKA

Pada bab ini membahas tentang argumentasi yang diambil dari sumber
pustaka yaitu buku teks, paper, dan browsing internet mengenai penelitian yang
dilakukan. Adapun yang dibahas tentang penelitian ini adalah ilmu kriptografi,
algoritma twofish, dan kaitannya dengan agama Islam. Berikut adalah uraian yang
dibahas terkait skripsi ini.

2.1 Kerahasiaan Hidup Manusia
Segala macam kejadian yang ada pada alam semesta ini merupakan
rahasia dari Allah yang maha kuasa di mana telah tertulis di dalam lauhul
mahfudz. Kejadian pada masa awal zaman sampai akhir zaman telah ditentukan
oleh Allah. Dari terciptanya Nabi Adam, banjir besar yang terjadi di zaman Nabi
Nuh, perang badar, turunnya dajjal hingga terjadinya kiamat pada dasarnya sudah
ditakdirkan sebelum Allah menciptakan alam semesta ini. Tak ada satu hal pun
yang luput dari kekuasaan Allah, semuanya telah digariskan di dalam Lauhul
Mahfuzh.
Allah berfirman pada pada surah Al-Hadiid ayat 22 :
!. ,!. _. ,,.. _ _ _ >.. | _ .. _. _,
!>. | l: _ls < ,. __


Tiada suatu bencanapun yang menimpa di bumi dan (Tidak pula) pada
dirimu sendiri melainkan Telah tertulis dalam Kitab (Lauhul Mahfuzh)
sebelum kami menciptakannya. Sesungguhnya yang demikian itu adalah
mudah bagi Allah. (QS. Al-Hadiid : 22)

Pada tafsir Al-Quran Al-Aisar karangan Syaikh Abu Bakar J abir Al-J azairi (2009
: 301) bahwa Tiada suatu bencana pun yang menimpa, maksudnya yang
menimpa, wahai orang-orang yang beriman di muka bumi ini, seperti kelaparan,
kekeringan, badai dan hama yang menyerang tanaman dan, (tidak pula) pada
dirimu sendiri, seperti sedang sakit dan anakmu meninggal dunia, maka semua
ini telah tertulis du Lauh Mahfuzh dengan sangat terperinci; jumlah, keadaan,
waktu dan tempatnya. sebelum Kami menciptakannya, sebelum Allah
menciptakannya.
Segala sesuatu yang terjadi di alam semesta ini adalah qadar (takdir) dari
Allah SWT, yang mana mempercayai qadha dan qadar merupakan rukun yang
harus diimani oleh umat Islam. Al Asbahani dalam Al Washifi mendifinisikan
qadha adalah penetapan sesuatu, baik berupa perkataan maupun perbuatan.
Sedangkan qadar (takdir) menurut Ibnu Atsir dalam Al Washifi (2005 : 51) adalah
ketentuan Allah SWT untuk seluruh makhluk dan ketetapan-Nya atas segala
sesuatu. Misalnya pada kamis siang Rudy sedang melakukan shalat zuhur
berjamaah di masjid. Sebelum Rudy lahir bahkan sejak zaman azali Allah telah
menetapkan seorang manusia bernama Rudy akan melakukan shalat zuhur
berjamaah di masjid pada hari kamis siang. J adi ketetapan Allah pada zaman azali
itu disebut qadar, sedangkan kenyataan bahwa saat terjadinya disebut qadha.
Dengan kata lain qadha merupakan perwujudan dari qadar.

Adapun qadha itu terbagi menjadi dua yaitu qadha muallaq dan qadha
mubram. Qadha muallaq adalah qadha yang diketahui, ditulis dan dikehendaki-
Nya(Al Washifi, 2005 : 191). Contoh qadha muallaq, Amir yang telah bekerja
dua tahun sebagai staf di sebuah perusahaan mempunyai gaji yang pas-pasan dan
hanya cukup untuk dirinya sendiri, tetapi dengan kesabaran dan keuletannya
disertai dengan doa dalam bekerja dia diangkat atasannya menjadi asisten manajer
dan alhasil kesejahteraan hidupnya lebih meningkat. Sedangkan Qadha mubram
adalah qadha yang pasti terjadi dan tidak bisa ditolak dengan sebab apapun (Al
Washifi, 2005 : 196). Contoh qadha mubram, Ahmad terlahir pada tanggal 12 juni
2001 dengan jenis kelamin laki-laki. Dari contoh ini bahwa Ahmad tidak bisa
mengatur kapan ia dilahirkan dan berjenis kelamin apa.
Dengan mengimani qadha dan qadar terkandung pelajaran yang dapat
diambil bahwa manusia harus menerima kenyataan terhadap keadaan hidup yang
telah ditakdirkan, dan manusia dianjurkan untuk berusaha dan berdoa dalam
menggapai keinginannya. Namun manusia hanya bisa berusaha dan berdoa tetapi
hanya Allah lah yang mengabulkan segala keinginan manusia.

2.2 Teori Kriptografi
Kriptografi adalah bidang ilmu yang sangat penting keberadaannya untuk
menjaga kerahasiaan dan keamanan suatu informasi. Untuk mendefinisikannya
lebih lanjut tentang kriptorafi, Munir (2006: 2) menjelaskan bahwa kriptografi
(Cryptography) berasal dari bahasa Yunani : cryptos artinya secret (rahasia),
sedangkan graphien artinya writing (tulisan). J adi, kriptografi (Cryptography)

berarti secret writing (tulisan rahasia). Menurut Bruce Schneier, kriptografi
adalah ilmu dan seni untuk menjaga keamanan pesan. Kata seni dalam definisi
tersebut berasal dari fakta sejarah bahwa pada masa-masa awal sejarah
kriptografi, setiap orang mungkin mempunyai cara yang unik untuk merahasiakan
pesan. Cara-cara unik tersebut mungkin berbeda-beda pada setiap pelaku
kriptografi sehingga setiap cara menulis pesan rahasia, pesan mempunyai nilai
estetika tersendiri sehingga kriptografi berkembang menjadi sebuah seni
merahasiakan pesan (kata graphy di dalam cryptography itu sendiri sudah
menyiratkan sebuah seni).
Kriptorafi mempunyai beberapa tujuan. Munir (2006: 9) menyampaikan
tujuan kriptografi bahwa untuk memberi layanan keamanan (yang juga dinamakan
sebagai aspek-aspek keamanan) sebagai berikut :
a. Kerahasiaan (confidentiality), adalah layanan yang ditujukan untuk
menjaga agar pesan tidak dapt dibaca oleh pihak-pihak yang tidak berhak.
Di dalam kriptografi, layanan ini direalisasikan dengan menyandikan
pesan menjadi chiperteks.
b. Integritas data (data integrity), adalah layanan yang menjamin bahwa
pesan masih asli/utuh atau belum pernah dimanipulasi selama pengiriman.
Dengan kata lain, aspek keamanan ini dapat diungkapkan sebagai
pernyataan: Apakah pesan yang diterima masih asli atau tidak mengalami
perubahan (modifikasi)?. Untuk menjaga integritas data, system harus
memiliki kemampuan untuk mendeteksi manipulasi pesan oleh pihak-

pihak yang tidak berhak, antara lain penyisipan, penghapusan, dan
pensubstitusian data lain ke dalam pesan yang sebenarnya.
c. Otentikasi (authentication), adalah layanan yang berhubungan dengan
identifikasi, baik mengidentifikasi kebenaran pihak-pihak yang
berkomunikasi (user authentication atau entity authentication) maupun
mengidentifikasi kebenaran sumber pesan (data origin authentication).
Dua pihak yang saling berkomunikasi harus dapat mengontentikasi satu
sama lain sehingga ia dapat memastikan sumber pesan. Pesan yang dikirim
melalui saluran komunikasi juga harus diotentikasi asalnya. Dengan kata
lain, aspek keamanan ini dapat diungkapkkan sebagai pertanyaan:
Apakah pesan yang dterima benar-benar berasal dari pengirim yang
benar?. Otentikasi sumber pesan secara implisit juga memberikan
kepastian integritas data, sebab jika pesan telah dimodifikasi berarti
sumber pesan sudah tidak benar. Oleh karena itu, layanan integritas data
selalu dikombinasikan dengan layanan otentikasi sumber pesan.
d. Nirpenyalahgunaan (non-repudiation), adalah layanan untuk
mencegahentitas yang berkomunikasi melakukan penyangkalan, yaitu
pengiriman pesan menyangkal melakukan pengiriman atau penerima
pesan menyangkal telah menerima pesan.
Kriptografi sendiri mempunyai komponen-komponen untuk mencapai
tujuan keriptografi. Menurut Ariyus (2009: 19), pada dasarnya kriptografi terdiri dari
beberapa komponen seperti :

a. Enkripsi : Enkripsi merupakan hal yang sangat penting dalam kriptografi
sebagai pengamanan atas data yang dikirimkan agar rahasianya terjaga. Pesan
aslinya disebut plainteks yang diubah menjadi kode-kodeyang tidak dimengerti.
Enkripsi bisa diartikan sebagai chiper atau kode. Seperti ketika kita tidak
mengerti akan artisebuah kata, kita bisa melihatnya di dalam kamus atau daftar
istilah. Berbeda dengan enkripsi, untuk mengubah plainteks ke bentuk
chiperteks digunakan algoritma yang bisa mengkodekan data yang diinginkan.
b. Dekripsi : Dekripsi merupakan kebalikan dari enkripsi, pesan yang telah
dienkripsi dikembalikan ke bentuk asalnya (Plainteks), yang disebut dekripsi
pesan. Algoritma yang digunakanuntuk dekripsi tentu berbeda dengan yang
digunakan untuk enkripsi.
c. Kunci : Kunci yang yang dimaksud di sini adalah kunci yang dipakai untuk
melakukan enkripsi dan dekripsi. Kunci terbagi menjadi dua bagian, yakni kunci
pribadi (private key) dan kunci umum(public key).
d. Chiperteks : merupakan suatu pesan yang sudah melalui proses enkripsi. Pesan
yang ada pada chiperteks tidak bisa dibaca karena berisi karakter-karakter yang
tidak memiliki makna (arti).
e. Plainteks : sering juga disebut cleartext; merupakan suatu pesan bermakna yang
ditulis atau diketik dan palinteks itulah yang akan diproses menggunakan
algoritma kriptografi agar menjadi chiperteks.
f. Pesan : pesan bisa berupa data atau infomasi yang dikirim (melalui kurir, saluran
komunikasi data, dan sebagainya) atau yang disimpan di dalam media
perekaman (kertas, storage, dan sebagainya).

g. Cryptanalysis : bisa diartikan sebagai analisis sandi atau suatu ilmu untuk
mendapatkan plainteks tanpa harus mengetahui kunci secara wajar. J ika suatu
chiperteks berhasil menjadi plainteks tanpa menggunakan kunci yang sah, maka
proses tersebut dinamakan breaking code yang dilakukan oleh para cryptanalys.
Analisis sandi juga mampu menemukan kelemahan dari suatu algoritma
kriptografi dan akhirnya bisa menemukan kunci atau plainteks dari chiperteks
yang dienkripsi menggunakan algoritma tertentu.
Kriptografi mempunyai dua komponen utama yaitu enkripsi dan dekripsi. Selain
itu dibutuhkan kunci untuk mengubah plainteks menjadi chiperteks dan juga sebaliknya.
Tanpa kunci plainteks tidak bisa mengenkrip masukan menjadi chiperteks, demikian
juga sebaliknya. Kerahasiaan kunci sangatlah penting, apabila kerahasiaannya
terbongkar maka isi pesan akan terbongkar. Berikut adalah skema yang
mengilustrasikan enkripsi dan dekripsi.

Kunci Kunci

ciphertext
Plainteks Plainteks

Gambar 2.1 Skema Enkripsi dan Dekripsi
(Munir, 2006: 6)

Pada gambar 2.1 mengilustrasikan sebuah plainteks dienkripsi menggunakan
kunci enkripsi sehingga menjadi chiperteks dan chiperteks didekripsi kembali
menggunakan kunci dekripsi sehingga menjadi plainteks kembali.
Enkripsi Dekripsi

Secara formal proses enkripsi dapat dirumuskan sebagai berikut :
E
k
(P) = C (2.1)
Dimana E merupakan fungsi enkripsi dengan menggunakan k (kunci) beroperasi
pada P (plainteks) sehingga menghasilkan C (chiperteks). Sedangkan pada proses
dekripsi dirumuskan dengan :
D
k
(C) = P (2.2)
Dimana D merupakan fungsi enkripsi dengan menggunakan k (kunci) beroperasi
pada C (chiperteks) sehingga menghasilkan P (plainteks). Sehingga kedua hubungan
tersebut menjadi :
D
k
(E
k
(P)) = P (2.3)

2.2.1 Algoritma Berdasarkan Jenis Kunci
Algoritma kriptografi berdasarkan jenis kunci terbagi menjadi dua kategori
yaitu algoritma simetris dan algoritma asimetris. Berikut adalah penjelasan
algoritma simetis dan asimetris.

2.2.1.1 Algoritma Simetris
Algoritma simetris adalah algoritma kriptorgafi dimana kunci enkripsi dan
dekripsi sama. Contoh dari algoritma simetris adalah twofish, rijndael, camellia, dan
lain-lain. Berikut skema dari algoritma kunci simetris.




Plaintext ciphertext plaintext

kunci enkripsi (K) kunci dekripsi (K)
Gambar 2.2 Diagram Proses Enkripsi dan Dekripsi Algoritma Simetris

Pada gambar 2.2 merupakan diagram proses enkripsi dan dekripsi pada
algoritma simetris. Pada proses tersebut plainteks dienkripsi menggunakan kunci
enkripsi (K) sehingga menghasilkan chiperteks. Chiperteks didekripsikan kembali
menggunakan kunci dekripsi (K), artinya kunci pada dekripsi sama dengan kunci
ketika pengenkripsian dilakukan sehingga menghasilkan plainteks.
Kelebihan :
a. Kecepatan operasi lebih tinggi bila dibandingkan dengan algoritma asimetrik.
b. Karena kecepatannya yang cukup tinggi, maka dapat digunakan pada
sistem real-time
Kelemahan :
a. Untuk tiap pengiriman pesan dengan pengguna yang berbeda dibutuhkan
kunci yang berbeda juga, sehingga akan terjadi kesulitan dalam
manajemen kunci tersebut.
b. Permasalahan dalam pengiriman kunci itu sendiri yang disebut key
distribution problem
enkripsi dekripsi

2.2.1.2 Algoritma Asimetris
Algoritma asimetris adalah suatu algoritma kriptografi dimana kunci
untuk enkripsi yang digunakan berbeda dengan kunci dekripsi. Kunci enkripsi
dinamakan sebagai kunci public yaitu kunci yang bebas diketahui oleh siapapun,
sedangkan kunci dekripsi dinamakan kunci kunci privat yaitu kunci yang hanya
boleh diketahui oleh penerima pesan. Contoh dari algoritma kriptografi asimetris
adalah RSA, Elgamal, dan lain-lain. Berikut adalah skema dari algoritma
asimetris:

Plaintext ciphertext plaintext

kunci enkripsi (K1) kunci dekripsi (K2)
Gambar 2.3 Diagram Proses Enkripsi dan Dekripsi Algoritma Asimetris

Pada gambar 2.3 merupakan diagram proses enkripsi dan dekripsi pada
algoritma asimetris. Pada proses tersebut plainteks dienkripsi menggunakan kunci
enkripsi (K1) sehingga menghasilkan chiperteks. Chiperteks didekripsikan
kembali menggunakan kunci dekripsi (K2), artinya kunci pada saat pendekripsian
berbeda dengan kunci ketika pengenkripsian dilakukan sehingga menghasilkan
plainteks.

enkripsi dekripsi

Kelebihan :
a. Masalah keamanan pada distribusi kunci dapat lebih baik
b. Masalah manajemen kunci yang lebih baik karena jumlah kunci yang lebih
sedikit
Kelemahan :
a. Kecepatan yang lebih rendah bila dibandingkan dengan algoritma simetris
b. Untuk tingkat keamanan sama, kunci yang digunakan lebih
panjang dibandingkan dengan algoritma simetris.

2.2.2 Algoritma Berdasarkan Mode Bit
Berdasarkan mode bit yang diolah dalam satu kali proses, maka algoritma
kriptografi dapat dibedakan menjadi dua jenis yaitu algoritma block chiper dan
stream chiper. Algoritma block chiper dibagi menjadi beberapa mode blok yaitu
mode Electronic Code Book (ECB), Chiper Block Chaining (CBC), Chiper Feed
Back (CFB), dan Output Feed Back (OFB). Sedangkan algoritma stream chiper
dibagi menjadi dua yaitu Synchronous Stream Chiper dan Self-Synchronous
Stream Chiper.

2.2.2.1 Algoritma Block Cipher
Block chipher merupakan suatu algoritma yang mana input dan outputnya
berupa satu block, dan setiap block terdiri dari beberapa bit (1 block terdiri dari 64
bit atau 128 bit). (Ariyus, 2006: 58). Masukan dari plainteks biasanya dibagi
menjadi beberapa blok, misalnya 64 bit setiap blok, apabila masukan kurang dari

jumlah tersebut maka akan dilakukan penambahan bit (padding) sehingga menjadi
64 bit. Block chiper terbagi menjadi empat mode operasi yaitu, Mode Electronic
Code Book (ECB), Mode Chiper Block Chaining (CBC), Mode Chiper Feed Back
(CFB), dan Mode Output Feed Back (OFB).

2.2.2.1.1 Electronic Code Book (ECB)
Ariyus (2006: 58) mengemukakan ECB merupakan suatu block chiper
yang panjang dibagi dalam bentuk sequence binary menjadi satu block tanpa
mempengaruhi block-block yang lain, satu block terdiri dari 64 bit atau 128 bit,
setiap block merupakan bagian dari pesan yang dienkripsi. Keunggulan dari
mode blok ini adalah mode blok chiper yang sederhana, kerusakan satu blok
tidak akan mempengaruhi blok yang lainnya. J ika penerima menerima
mandapatkan satu blok yang rusak maka blok yang lainnya tidak akan rusak
dan penerima hanya perlu dikirim blok yang rusak. Dengan mode ini
pengiriman dilakukan dengan cepat karena tidak perlu mengirim ulang pesan
yang dikirim secara keseluruhan. Pengiriman blok yang rusak dikirim dengan
kode yang sama dan menghasilkan chiper yang sama pula. Namun kelemahan
dari mode ini adalah mudahnya penyerang dalam membaca pola ini karena
dapat dipelajari apabila hal ini sering terjadi.
Berikut merupakan ilustrasi dari mode ECB yang merupakan
penggambaran dari hal di atas.




kunci kunci


Gambar 2.4 SkemaModeOperasi ECB
(Ariyus, 2006: 58)

2.2.2.1.2 Chiper Bock Chaining (CBC)
Ariyus (2006: 59) mengemukakan bahwa sistem dari mode Chiper Bock
Chaining (CBC) adalah plainteks yang sama akan dienkripsi ke dalam bentuk
chiper yang berbeda, disebabkan block chiper yang satu tidak berhubungan
dengan block chiper yang lain. Melainkan tergantung pada chiper yang
sebelumnya. Tingkat keamanan dari mode ini lebih rumit dari pada mode ECB
dikarenakan tiap blok tergantung dari blok sebelumnya. Namun kalau terjadi
kesalahan 1 bit saja pada salah satu blok maka akan terjadi kesalahan pula pada
blok-blok selanjutnya, ini merupakan kelemahan mode CBC. Berikut adalah
skema mode CBC.



Plainteks Block 1
Plainteks Block 3 Plainteks Block 2
Algoritma
Enkripsi
Chiperteks Block 3 Chiperteks Block 2
Chiperteks Block 1
Algoritma
Enkripsi
Algoritma
Enkripsi



initial
value
xor xor . xor chipertks N-1
kunci kunci


Gambar 2.5 Skema ModeOperasi CBC

Pada gambar 2.5, terlihat bahwa mode CBC beroperasi menggunakan
operasi XOR antara plainteks dan chiperteks yang berulang. Hasil dari enkripsi
satu blok merupakan hasil pengXORan dari blok sebelumnya. IV (initial value)
pertama merupakan nilai kunci asal yang digunakan untuk enkripsi, sedangkan IV
pada blok selanjutnya adalah hasil dari blok sebelumnya. Sama halnya dengan
proses pendekripsian, setiap blok dekripsi merupakan hasil XOR dari blok
sebelumhnya. IV pada proses dekripsi yang digunakan dari blok sebelumnya lalu
diXORkan dengan hasil dekripsi. IV merupakan kunci yang harus dilindungi
keamanannya oleh pengguna, hal ini dapat dilakukan dengan mode ECB.

2.2.2.1.3 Cipher feedback (CFB)
Metode ini digunakan untuk melakukan enkripsi pada stream chiper, mode
ini tidak memerlukan padding bit (tambahan bit) karena jumlah panjang block
Plainteks Block 1
Plainteks Block N Plainteks Block 2
Algoritma
Enkripsi
Chiperteks Block N Chiperteks Block 2
Chiperteks Block 1
Algoritma
Enkripsi
Algoritma
Enkripsi

sama dengan jumlah panjang plainteks yang ada. Mode ini bekerja pada sistem
real time.
Satu hal yang tidak menguntungkan dari mode ini adalah jika satu block
chiper terjadi kesalahan maka, kesalahan untuk semua block yang lain, karena
satu block dan block yang lain saling berhubungan. Contoh proses enkripsi dari
mode CFB diilustrasikan pada gambar di bawah ini.

Initial Value Cn-1


64 bit 64 bit 64 bit

Kunci Kunci Kunci

64 bit 64 bit 64 bit


..
s-bit s-bit s-bit
P1 xor P2 xor Pn xor
s-bit s-bit s-bit
s-bit

Gambar 2.6 Skema Mode Operasi CFB

Pada gambar di atas s-bit, merupakan pergeseran 1 bit ke kiri dari nilai
yang sebtnarnya. Hal ini untuk mendapatkan sequence bit yang tidak mudah
dilacak oleh penyerang.
(Ariyus, 2006: 61)
Shift Register
64 s bit |s-bit
Select Discard
S bit | 64-s bit
Ciphertext Block 2
Algoritma
Enkripsi
Shift Register
64 s bit |s-bit
Select Discard
S bit | 64-s bit
Ciphertext Block 1
Algoritma
Enkripsi
Shift Register
64 s bit | s-bit
Select Discard
S bit | 64-s bit
Ciphertext Block 3
Algoritma
Enkripsi

2.2.2.1.4 Output Feed Back (OFB)
Ariyus (2006: 62) mengemukakan Mode Output Feed Back (OFB) tidak
mempengaruhi block yang lain jika terjadi error, satu bit yang error pada
chiperteks hanya akan mempengaruhi satu bit plainteks pada terjadinya proses
dekripsi. Hal ini sangat berguna untuk sistem analog seperti voice atau video, jika
satu bit yang error tidak merusak semua block yang ada, tapi jika rusak semua
maka akan mempengaruhi arti dari plainteks yang ada .


Initial Value Cn-1




64 bit 64 bit 64 bit

Kunci


64 bit 64 bit 64 bit



s-bit s-bit s-bit

P1 xor P2 xor Pn xor
s-bit s-bit s-bit

s-bit


Gambar 2.7 Skema Mode Operasi OFB

2.2.2.2 Algoritma Stream Cipher
Stream Chiper (aliran chiper) merupakan suatu chiper yang berasal dari
hasil XOR seperti pembahasan di atas. Setiap bit plainteks dengan setiap bit
Shift Register
64 s bit |s-bit
Select Discard
S bit | 64-s bit
Plaintext Block 2
Algoritma
Enkripsi
Shift Register
64 s bit | s-bit
Select Discard
S bit | 64-s bit
Plaintext Block 1
Algoritma
Enkripsi
Shift Register
64 s bit | s-bit
Select Discard
S bit | 64-s bit
Plaintext Block 3
Algoritma
Dekripsi

kunci.kunci merupakan kunci utama (kunci induk) yang digunakan untuk
membangkitkan kunci acak semu yang dibangkitkan dengan Pseudo-Random
Sequence Generator yang merupakan suatu nilai yang nampak seperti diacak,
tetapi sesungguhnya nilai tersebut merupakan suatu urutan. Secara khusus urutan
dari nilai yang dihasilkan oleh RNG (Random Number Generator) merupakan
kebalikan dari really random.
RNG secara umum adalah Pseudo-random yang memberikan initial state
atau seed (nilai yang diinput ke dalam state), seluruh urutan tersebut ditentukan
secara keseluruhan, tetapi meskipun demikian banyaknya karakteristik yang
ditampilkan dari suatu urutan yang acak tersebut. Pseudoramdomness
menghasilkan urutan yang sama secara berulang-ulang pada penempatan yang
berbeda. Kemudian kunci acak semu tersebut diberikan operasi XOR dengan
plainteks untuk mendapatkan chiperteks.
(Ariyus, 2006: 52)

2.2.2.2.1 Synchronous Stream Chiper
Untuk mensimulasikan suatu random, dengan kunci yang mempunyai
panjang terbatas, synchronous stream chiper menghasilkan bit dari sumber yang
lain dari pesan itu senndiri. Chiper yang paling sederhana dengan menyadap bit
dari register untuk digunakan sebagai kunc. Content berubah sesuai dengan
register yang ada.
Suatu struktur yang efisien menghasilkan sequence yang sering digunakan
oleh aplikasi random number generator adalah n-element shift register (SR), jika

akhir element dihubungkan ke element yang petama maka nilai n dapat berputar
sekitar SR didalam n tetapi jika kedua diantara element-element dikombinasikan
oleh exclusive-OR dan hasilnya dihubungkan ke element pertama dan mungkin
akan mendapatkan panjang sempurna yang maksimal dari 2n-1 (semua state
bernilai nol dan sistem akan mengamankannya).
Karena hanya 2n state yang berbeda dari nilai-nilai n biner dan tiap-tiap
nilai dinyatakan tapi cuma bisa digunakan sekali. Nilai-nilai yang dihasilkan
adalah suatu permutasi yang sempurna dari perhitungan dari angka-angka (12n-
1).
(Ariyus, 2006: 54)

2.2.2.2.2 Self-Synchronous Stream Chiper
Self-Synchronous Stream Chiper menggunakan metode pengambilan kunci
dari pesan itu sendiri, atau sering disebut dengan autokey chiper, menggunakan
pesan untuk kunci. Dengan menggunakan metode ini juga didapat kunci one
time pad, kemungkinan setiap pesan dikirim dua kali jarang terjadi, kunci dari
sistem ini menggunakan pesan yang akan dikirim dengan menambahkan satu
karakter yang berbeda di depan maupun di belakang dari kunci yang ada. (Ariyus,
2006: 57)

2.3 Twofish
Algoritma twofish diciptakan oleh Bruce Schneier, sebelumnya ia
menciptakan algoritma blowfish dengan 64 bit block chiper dan kunci 128 bit.

Twofish merupakan algoritma kunci simetris block chiper dengan blok masukan
128 bit dan kunci 128 bit, 192 bit, dan 256 bit. Schneier (1998: 3) menjelaskan
bahwa Pada tahun 1972 dan 1974, National of Standart (yang sekarang bernama
NIST) mengumumkan adanya standar enkripsi, yaitu DES yang sangat beralasan
karena penggunaannya yang luas dan merupakan algoritma yang sangat sukses di
dunia. Dalam proses perkembangannya ternyata key-key dalam DES dirasa terlalu
pendek bagi keamanan komersial sehingga membuat gusar para kriptografer yang
menginginkan proses algoritma yang closed door. Akhirnya, NIST
mengumumkan Advanced Encryption Standard (AES) pada tahun 1997
[NIST97a]. Salah satu kandidat AES adalah Twofish. Twofish memenuhi semua
kriteria yang dibutuhkan NIST, yaitu 128-bit block, 128 bit, 192 bit dan 256 bit
key (kata kunci), efisien pada platform manapun dan lain-lain, serta beberapa
desain berat lainnya Twofish dapat melakukan:
a. Melakukan enkripsi data pada 285 siklus per block di atas Pentium Pro
setelah menjalankan key setup 12700 siklus clock.
b. Melakukan enkripsi data pada 860 siklus per blok sdi atas Pentium Pro
setelah menjalankan key setup 1250 siklus clock.
c. Melakukan enkripsi data pada 26500 siklus per block di atas sebuah 6805
smart card setelah mejalankan key setup 1750 siklus clock.
(Mudeng, 2004 : 1)


2.3.1 Unsur Pembangun Algoritma Twofish
Unsur pembangun twofish terdiri dari feistel network (jaringan feistel), s-
boxes, matriks MDS, transformasi pseudo-hadamard (PHT), whitening, dan key
schedule (penjadwalan kunci). Berikut merupakan penjabaran dari unsur-unsur
pembangun twofish.

2.3.1.1 Feistel Network (Jaringan Feistel)
Schneier (1998: 4) menjelaskan bahwa sebuah Fietsel Network adalah
metoda umum untuk mentransformasi suatu fungsi menjadi bentuk permutasi.
Bagian paling fundamental dari J aringan Fietsel adalah fungsi F: sebuah pemetaan
key-dependent dari suatu input string menjadi output string. Dalam Twofish
dilakukan Fietsel Network sebanyak 16 kali. Pada twofish, jarungan feistel
terdiri dari Input Whitening, S-boxes, Transformasi Pseudo Hadamard, dan
Output Whitening.

2.3.1.2 S-Boxes
Sebuah S-box adalah operasi subsitusi table-driven non linear yang
digunakan dalam block chipper. S-boxes bervariasi antara setiap ukuran input dan
ukuran outputnya, dan bisa diciptakan secara random atau dengan algoritma.
Twofish menggunakan empat bijective, key-dependent dan 8-by-8-bit S-boxes. S-
boxes ini dibuat menggunakan dua permutasi 8-by-8-bit dan material key.
(Schneier dkk, 1998: 5).


2.3.1.3 Matrik MDS
Code Maximum Distance Separable (MDS) melalui sebuah pemetaan
linear dari elemen field a ke elemen field b, menghasilkan campuran dari vektor
a+b elemen, dengan properti jumlah minimum angka tidak nol dalam vector tidak
nol paling kurang b+1 [MS77]. Dengan kata lain Distance adalah jumlah
element yang berbeda antara dua vector yang berbeda yang dihasilkan oleh MDS
paling kurang b+1. Pemetaan MDS bisa direpresentasikan oleh matriks MDS
yang terdiri dari a x b elemen. (Schneier dkk, 1998: 5).

2.3.1.4 Transformasi Pseudo-Hadamard (PHT)
Transformasi Pseudo-Hadamard (PHT) adalah operasi sederhana yang
bekerja dengan cepat dalam software. Diberikandua input, a dan b, dan PHT 32
bit didefinisikan sebagai :

A
0
=a +b mod 2
32
(2.4)

B
0
=a +2b mod 2
32
(2.5)

SAFER [Mas94] manggunakan PHT 8 bit secara meluas untuk proses
difusi. Sementara itu, Twofish menggunakan PHT 32 bit untuk melakukan mixing
terhadap outputnya dari dua buah fungsi g 32 bit parallel. PHT ini dapat
dieksekusi dalam dua opcode diatas kebanyakan microprocessor modern,
termasuk keluarga Pentium.
(Schneier dkk, 1998: 5).

2.3.1.5 Whitening
Schneier (1998: 5) menjabarkan bahwa whitening merupakan teknik
mengXORkan key material sebelum ronde pertama dan sesudah ronde terakhir.
Dalam serangan terhadap Twofish, terbukti bahwa whitening secara substansial
meningkatkan kesulitan menyerang chipper, dengan jalan menyembunyikan input
spesifik untuk awal dan akhir ronde dari Twofish.

2.3.1.6 Key Schedule (Penjadwalan Kunci)
Key schedule adalah suatu cara dimana bit-bit key diubah menjadi key-
key bulat yang dapat digunakan oleh chipper. Twofish memerlukan material key
yang sangat banyak, dan memiliki key schedule yang rumit. (Schneier dkk, 1998:
5). J adi secara singkat, key schedule (penjadwalan kunci) adalah proses
pengacakan kunci untuk melakukan proses enkripsi sehingga tingkat
kerumitannya menjadi tinggi.

2.3.2 Algoritma Twofish
Twofish menggunakan sebuah Struktur Feistel-like 16-round dengan
tambahan whitening pada masukan dan keluaran. Satu-satunya unsur non-Feistel
adalah 1-bit rotasi. Perputaran dapat dipindah ke dalam fungsi F untuk membuat
suatu struktur Feistel murni, tapi memerlukan suatu tambahan perputaran kata-
kata yang tepat sebelum langkah keluaran whitening. Plaintext dipecah menjadi
empat kata 32-bit. Pada langkah whitening masukan terdapat xored dengan empat
kata kunci. Ini diikuti oleh enambelas putaran. Pada setiap putaran, dua kata-kata

pada sisi kiri digunakan sebagai masukan kepada fungsi g (Salah satu darinya
diputar pada 8 bit pertama). Fungsi g terdiri dari empat byte-wide S-Box key-
dependent, yang diikuti oleh suatu langkah pencampuran linier berdasar pada
suatu matriks MDS. Hasil kedua fungsi g dikombinasikan menggunakan suatu
Pseudo Hadamard Transform (PHT), dan ditambahkan dua kata kunci. Kedua
hasil ini kemudian di-XOR ke dalam kata-kata pada sisi kanan (salah satunya
diputar ke kanan 1 bit pertama, yang lainnya diputar ke kanan setelahnya). Yang
kiri dan kanan dibelah dua kemudian ditukar untuk putaran yang berikutnya,
pertukaran yang terakhir adalah dibalik, dan yang empat kata di-XOR dengan
lebih dari empat kata kunci untuk menghasilkan ciphertext. Secara formal, 16 byte
plaintext p
0
, p
15
yang yang pertama dipecah menjadi 4 kata P
0,
P
3
dari 32 bit
masing-masing menggunakan konvensi little-endian.

=
3
0 j
P(4i+j).2
8j
(2.6)
i=0,,3

Di dalam langkah whitening, kata-kata ini di-XOR dengan 4 kata dari
kunci yang diperluas.

R
0,i
=P K
i
(2.7)
i=0,,3



Gambar 2.8 Blok Diagram Twofish
(Schneier, 1998 : 9)

Pada setiap 16 putaran, dua kata pertama digunakan sebagai masukan
kepada fungsi F, yang juga mengambil angka bulat itu sebagai masukan. Kata
yang ketiga di-XOR dengan keluaran pertama F dan kemudian diputar ke kanan
satu bit. Kata keempat diputar ke kiri satu bit kemudian di-XOR dengan kata

keluaran F Yang kedua . Akhirnya, keduanya saling ditukar menghasilkan
persamaan :
(F
r,0,
F
r,1
) = F(F
r,0,
F
r,1
,r) (2.8)
R
r+1,0
= ROR(R
r,2
F
r,0
,1) (2.9)
R
r+1,1
= ROL(R
r,3
,1)F
r,1
(2.10)
R
r+1,2
= R
r,0
(2.11)
R
r+1,3
= R
r,1
(2.12)

untuk r=0,,15 di mana ROR dan ROL adalah berfungsi memutar argumentasi
pertama (32-bit kata) ke kanan dengan angka bit-bit diindikasikan dengan
argumentasi keduanya. Langkah whitening keluaran membatalkan `pertukaran
putaran terakhir dan meng XOR kata-kata dengan 4 kata dari kunci yang
diperluas.

C
i
= R
16,(i+2) mod 4
K
i+4
(2.13)
i =0,,3

Empat kata dari ciphertext kemudian menulis seperti 16 byte c
0
,,c
15
sama
seperti menggunakan konversi little-endian untuk plaintext.

c
i
=

(

) 4 mod ( 8
2
4 /
i
i C
mod 2
8
(2.14)
i =0,,15

(Schneier dkk, 1998: 5).
2.3.2.1 Fungsi F
Fungsi F adalah suatu permutasi key-dependent di atas nilai 64-bit. Untuk
mengambil tiga argumentasi, dua kata masukan R
0
Dan R
1
, dan angka bulat r
digunakan untuk memilih subkey yang sesuai. R
0
yang dilewati fungsi g,
menghasilkan T
0
. i

diputar 8 bit ke kanan kemudian melewati fungsi g untuk
menghasilkan T
1
. Hasil T
0
danT
1
selanjutnya dikombinasikan dalam sebuah PHT
danditambahkan 2 kata dari kunci yang diperluas menghasilkan persamaan :

T
0
= g(R
0
) (2.15)
T
1
= g(ROL(R
1
,8)) (2.16)
F
0
= (T
0
+T
1
+K
2r+8
) mod 2
32
(2.17)
F
1
= (T
0
+2T
1
+K
2r+9
) mod 2
32
(2.18)

Di mana ( F
0
, F
1
) adalah hasil dari F. (Schneier dkk, 1998: 7).

2.3.2.2 Fungsi g
Fungsi g membentuk jantungnya Twofish. Kata masukan X dipecah
menjadi empat byte. Masing-masing byte dijalankan melewati S-box key-
dependent. Masing-masing S-box adalah bijective, mengambil 8 bit masukan, dan
menghasilkan 8 bit keluaran. Ke empat hasil diinterpretasikan sebagai vektor yang
panjangnya 4 di atas GF (28), dan dikalikan dengan yang matriks MDS 4x4

(menggunakan bidang GF (28) untuk perhitungannya). Untuk menghasilkan
vektor diinterpretasikan sebagai 32-bit kata sebaga adalah hasil dari g :
x
i
=

i
X
8
2 / mod 2
8
(2.19)
i =0,,3
y
i
= s
i
| |
i
x (2.20)
i =0,,3

|
|
|
|
|
.
|

\
|
3
2
1
0
z
z
z
z
=
|
|
|
.
|

\
|
.
.
.
MDS .
|
|
|
|
|
.
|

\
|
3
2
1
0
y
y
y
y

(2.21)
Z =
8
3
0
2 .

= i
i
z

(2.22)

Di mana s
i
adalah S-Box key-dependent dan Z adalah hasil dari g. Untuk
merumuskan dengan baik, kita harus menetapkan koresponden antara nilai-nilai
byte dan elemen-elemen bidang GF (28). Kita merepresentasikan GF (2
8
) sebagai
GF(2)[x]/v(x) di mana v(x)=x
8
+x
6
+x
5
+x
3
+1 adalah suatu polynomial primitif dari
8 tingkat di atas GF(2). Unsur Bidang a=

=
7
0 i
a
i
x
i
dengan a
i
GF (2) adalah
dikenal dengan nilai byte

=
7
0 i
a
i
x
i
. Ini adalah beberapa pengertian pemetaan
alamiah"; penambahan di dalam GF (28) berkorespondensi dengan suatu XOR
dari bytes.
Matriks MDS-nya adalah sebagai berikut :


MDS =
|
|
|
|
|
.
|

\
|
B EF EF
EF B EF
EF EF B
B B EF
5 01
01 5
01 5
5 5 01

(2.23)

Di mana elemen-elemen ditulis sebagai nilai-nilai byte heksadesimal.
(Schneier dkk, 1998: 7).

2.3.2.3 Jadwal Kunci
J adwal kunci harus menyediakan 40 kata dari kunci yang diperluas
K
0
,,K
39
, dan 4 buah S-Box key-dependent yang digunakan di dalam fungsi g.
Twofish didefinisikan untuk kunci-kunci dengan panjang N=128, N=192, dan N=
256. Beberapa kunci yang lebih pendek dari 256 bit dapat digunakan oleh
lapisannya dari nol hingga yang lebih besar yang didefinisikan sebagai panjang
kunci. Kita mendefinisikan k=N/64. Kunci M terdiri dari 8k byte m
0
,,m
8k-1
.
Byte-byte adalah yang pertama diubah ke dalam 2k kata dari 32 bit masing-
masing :

M
i
=
j
j
j i
m
8
3
0
) 4 (
2 .

=
+
(2.24)
i =0,2k-1

dan kemudian ke dalam dua vektor kata dari panjang k :


M
e
= (M
0
,M
2
,,M
2k-2
) (2.25)
M
o
= (M
1
,M
3
,,M
2k-2
) (2.26)

Sepertiga vektor kata dari panjang k adalah juga diperoleh dari kunci itu.
Hal ini dilakukan dengan mengambil byte-byte kunci di dalam kelompok
8, menginterpretasikannya sebagai vektor di atas GF (28), dan mengalikannya
dengan matrils 4x8 yang diperoleh dari suatu kode R. Masing-masing hasil dari 4
byte kemudian diinterpretasikan sebagai suatu kata 32 bit.. Kata-kata ini
menyusun vektor yang ketiga :


|
|
|
|
|
.
|

\
|
3 ,
2 ,
1 ,
0 ,
i
i
i
i
s
s
s
s
=
|
|
|
.
|

\
|
.
.
.
RS .
|
|
|
|
|
|
|
|
|
|
|
.
|

\
|
+
+
+
+
+
+
+
7
6
5
4
3
2
1
Si
Si
Si
Si
Si
Si
Si
Si
m
m
m
m
m
m
m
m

(2.27)
S
i
=
j
j
j i
S
8
3
0
,
2 .

=

(2.28)
untuk i =0,,k-1, dan
S = (S
k
-1,S
k-2
,,S
0
) (2.29)

Catat bahwa daftar S kata-kata itu di dalam order terbalik". Karena Untuk
perkalian matriks RS, GF (28) diwakili oleh GF (2)[x]/w(x), di mana w(x)=
x
8
+x
6
+x
3
+x
2
+1 adalah polynomial primitif derajat dari 8 tingkat di atas GF(2).

Pemetaan antara nilai-nilai byte dan elemen-elemen GF (28) menggunakan
defnisi yang sama sebagaimana yang digunakan untuk perkalian matriks MDS.
Dalam pemetaan ini, matriks RS ditunjukkan sebagai berikut :

RS =
|
|
|
|
|
.
|

\
|
03 9 58
19 3 47
5 68 6 1
9 58 5
5 87 55 4
1 1 02
3 82 56 4
87 55 4 01
E DB
D AE
E C E
E DB A
A A
C FC A
F A
A

(2.30)

Ke tiga vektor M
e
, M
o
, dan S ini membentuk basis dari jadwal kunci.
(Schneier dkk, 1998: 8).

2.3.2.4 Penambahan Panjang Kunci
Twofish dapat menerima kunci-kunci dengan panjang byte di atas 256 bit..
Untuk ukuran-ukuran kunci yang tidak didefinisikan di atas, kunci diisi pada
bagian akhir dengan nol byte kepada yang lebih panjang berikutnya. Sebagai
contoh, suatu kunci 80-bit m
0
,,m
9
akan diperluas dengan mengatur m
i
=0 untuk
i=10,,15 dan diperlakukan sebagaimana pada kunci 128-bit. (Schneier dkk,
1998: 8).

2.3.2.5 Fungsi h
Pada gambar 2.9 menunjukkan suatu ikhtisar fungsi h. Ini adalah suatu
fungsi yang mengambil dua input-a 32-bit kata X dan sebuah daftar L = ( L
0
,,L
k-
1
) dari kata-kata X 32 dengan panjang k- dan menghasilkan satu kata pada

outputnya. Ini adalah pekerjaan fungsi di dalam langkah-langkah k. Pada setiap
langkah, empat byte itu masing-masing melintasi suatu fixed S-Box, dan di-XOR
dengan sebuah byte yang diperoleh dari daftar. Akhirnya, byte-byte sekali lagi
digeser melewati sebuah fixed S-box dan empat byte itu dikalikan dengan matriks
MDS seperti halnya dalam g. Lebih formal kita memisah-misahkan kata-kata itu
ke dalam bytes :

l
i,j
=

8
2 /
i
L mod 2
8
(2.31)

x
j
=

j
X
8
2 /

mod 2
8
(2.32)


untuk i=0,,k-1 dan j=0,,3. Kemudian urutan subtitusi dan XOR diterapkan :

y
k,j
= x
j
(2.33)
j =0,,3


Gambar 2.9 Skema Fungsi h
(Schneier, 1998 : 9)

jika k 3 didapatkan :
y
3,0
= q
1
[y
4,0
] l
3,0
(2.34)

y
3,1
= q
0
[y
4,1
] l
3,1
(2.35)

y
3,2
= q
0
[y
4,2
] l
3,2
(2.36)

y
3,3
= q
1
[y
4,3
] l
3,3
(2.37)



jika k = 4 didapatkan :
y
2,0
= q
1
[y
3,0
] l
3,0
(2.38)

y
2,1
= q
1
[y
3,1
] l
3,1
(2.39)

y
2,2
= q
0
[y
3,2
] l
3,2
(2.40)

y
2,3
= q
0
[y
3,3
] l
3,3
(2.41)


Dalam seluruh kasus didapatkan :
y
0
= q
1
[q
0
[q
0
[y
2,0
] l
1,0
] l
0,0
] (2.42)
y
1
= q
0
[q
0
[q
1
[y
2,1
] l
1,1
] l
0,1
] (2.43)
y
2
= q
0
[q
1
[q
0
[y
2,2
] l
1,2
] l
0,2
] (2.44)
y
3
= q
1
[q
1
[q
1
[y
2,3
] l
1,3
] l
0,3
] (2.45)


Di sini, q
0
dan q
1
ditetapkan permutasi di atas nilai 8-bit yang akan didefinisikan
segera. Menghasilkan vektor yang merupakan perkalian matriks MDS, seperti
halnya dalam fungsi g :


|
|
|
|
|
.
|

\
|
3
2
1
0
z
z
z
z
=
|
|
|
.
|

\
|
.
.
.
MDS .
|
|
|
|
|
.
|

\
|
3
2
1
0
y
y
y
y

(2.46)
Z =
i
i
i
z
8
3
0
2 .

=

(2.47)

di mana Z adalah hasil dari h. (Schneier dkk, 1998: 8).

2.3.2.6 S-Box Key-dependent
Sekarang dapat didefinisikan S-Box dalam fungsi g oleh :

g(x)=h(X; S) (2.48)

Hal itu adalah karena i=0,,3, S-Box Key-Dependent s
i
dibentuk oleh pemetaan
dari x
i
ke y
i
di dalam fungsi h, di mana daftar Lsama dengan vektor S yang
diperoleh dari kunci itu. (Schneier dkk, 1998: 10).

2.3.2.7 Kata-kata Kunci yang Diperluas Kj
Kata-kata dari kunci yang diperluas didefinisikan menggunakan fungsi h :

= 2
24
+2
16
+2
8
+2
0
(2.49)
A
i
= h(2
i
,M
e
) (2.50)
B
i
= ROL(h((2
i
+ 1) ,M
o
),8) (2.51)
K
2i
= (A
i
+B
i
) mod 2
32
(2.52)
K
2i+1
= ROL((A
i
+2B
i
) mod 2
32
,9) (2.53)

Konstanta digunakan untuk menduplikat byte yang mempunyai properti untuk
i= 0,,255, kata itu jika terdiri dari empat byte yang sama, masing-masing
dengan nilai i. Fungsi h diberlakukan bagi kata-kata jenis ini. Untuk A
i
nilai-nilai
byte itu adalah 2i, dan argumentasi yang kedua dari h adalah M
e
. B
i
dihitung
dengan cara yang sama menggunakan 2i+1 sebagai byte nilai dan M
o
sebagai

argumentasi yang kedua, dengan suatu putaran ekstra di atas 8 bit. Nilai-nilai A
i

dan B
i
Dua dikombinasikan dalam PHT. Salah satu dari hasil itu selanjutnya
diputar dengan 9 bit. Kedua hasil tersebut membentuk dua kata kunci yang
diperluas. (Schneier dkk, 1998: 10).

2.3.2.8 Permutasi q0 dan q1
Permutasi q
0
dan q
1
adalah ditetapkan permutasi di atas nilai-nilai 8 bit.
Mereka dibangun dari empat 4-bit permutasi yang masing-masing berbeda. Untuk
nilai masukan x didefinisikan sebagai nilai output y sebagai berikut :

a
0
, b
0
=

16 / x , x mod 16 (2.54)
a
1
= a
0
b
0
(2.55)
b
1
= a
0
ROR
4
(b
0
,1) 8a
0
mod 16 (2.56)
a
2
, b
2
= t
0
[a
1
],t
1
[b
1
] (2.57)
a
3
= a
2
b
2
(2.58)
b
3
= a
2
ROR
1
(b
2
,1) 8a
2
mod 16 (2.59)
a
4
, b
4
= t
2
[a
3
],t
3
[b
3
] (2.60)
y = 16b
4
+a
4
(2.61)

di mana ROR
4
adalah suatu fungsi yang serupa dengan ROR yang merupakan
putaran nilai 4-bit. Pertama, byte dipecah menjadi dua bagian. Ini dikombinasikan
dalam suatu bijective yang mencampur langkah. Masing-masing bagian kemudian

melintasi 4-bitfixed S-Box. Ini diikuti oleh yang lain. Akhirnya, dua bagian
dikombinasikan kembali ke dalam satu byte. Untuk permutasi q
0
S-Box 4-bit :

t
0
= [8 1 7 D 6 F 3 2 0 B 5 9 E C A 4] (2.62)
t
1
= [E C B 8 1 2 3 5 F 4 A 6 7 0 9 D] (2.63)
t
2
= [B A 5 E 6 D 9 0 C 8 F 3 2 4 7 1] (2.64)
t
3
= [D 7 F 4 1 2 6 E 9 B 3 0 8 5 C A] (2.65)

di mana masing-masing S-Box 4-Bit diwakili oleh daftar masukan yang
menggunakan notasi hexadecimal. (untuk masukan 0,,15 didaftarkan dalam
order.) Dengan cara yang sama, untuk q
1
S-Box 4-bit :

t
0
= [2 8 B D F 7 6 E 3 1 9 4 0 A C 5] (2.66)
t
1
= [1 E 2 B 4 C 3 7 6 D A 5 F 9 0 8] (2.67)
t
2
= [4 C 7 5 1 6 9 A 0 E D 8 2 B 3 F] (2.68)
t
3
= [B 9 5 1 C 3 D E 6 4 7 F 2 0 8 A] (2.69)


Gambar 2.10 Satu Putaran Fungsi F (Kunci 128-bit)
(Schneier dkk, 1998: 10).

2.3.3 Tujuan Desain Twofish
Twofish dirancang untuk memenuhi kriteria desain yang ditentukan oleh
NIST sebagai kandidat AES. Adapun criteria-kriteria yang ditetapkan oleh NIST
untu kandidat AES adalah sebagai berikut:
a. Blok cliper simetris 128-bit
b. Panjang key-nya adalah 128 bit, 192 bit, dan 256 bit.

c. Tidak ada key-key yang lemah.
d. Memiliki efisiensi, baik pada Pentium Pro maupun pada software dan
hardware dari platform yang berbeda.
e. Memiliki rancangan yang flkeksibel, misalnya menerima panjang key
tambahan, dapat diterapkan pada software dan hardware dari platform
berbeda, cocok untuk stream chipper, fungsi hash dan MAC.
f. Simple design, baik untuk memudahkan analisa dan implementasi.
Sebagai tambahannya, ditekankan kriteria kinerja sebagai berikut:
a. Mampu menerima panjang key diatas 256.
b. Mengenkripsi data kurang dari 500 siklus clock per block di atas Pantium,
Pentium Pro dan Pentium II, bagi algoritma yang dioptimasi secara penuh.
c. Mampu melakukan set-up key 128-bit (untuk kecepatan enkripsi optimal)
dalam waktu kurang dari yang diperlukan untuk mengenkripsi 32 blok di
atas Pentium, Pentium Pro, dan Pentium II.
d. Mengenkripsi data kurang dari 5000 siklus clock per blok di atas Pentium,
Pentium Pro, dan Pentium II tanpa melakukan key setup terlebih dahulu.
e. Tidak menggunakan operasi-operasi yang dapat mengurangi kinerja ketika
dijalankan pada mekroproc\sesor 3-bit yang lain.
f. Tidak menggunakan operasi-operasi yang mengurangi efisiensi ketika
dijalankan di atas processor 8-bit atau 16-bit.
g. Tidak menggunakan operasi-operasi yang mengurangi efisiensi ketika
dijalankan di atas processor 64-bit, seperti Merced.

h. Tidak melibatkan elemen apapun yang membuat tidak efisien dalam hal
hardware.
i. Memiliki bermacam kinerja yang mengacu pada key-schedule.
j. Mengenkripsi data dalam waktu kurang dari 10 millidetik pada processor
8-bit.
k. Dapat diimplementasikan di ats processor 8-bit dan dengan RAM 64 byte
saja.
l. Dapat diimplementasikan pada hardware yang menggunakan kurang dari
20000 gates.
Sementara itu, tujuan NIST dalam hubungannya dengan Twofish adalah
sebagai berikut:
a. Twofish 16-round tidak boleh memiliki chosen-plaintext attack yang
memerlukan kurang dari 2
80
chosen-plaintext dan menggunakan waktu
dari 2
N
dimana N adlah panjang key.
b. Twofish 12-round tidak boleh memiliki suatu related-key attack yang
memerlukan kurang dari 2
64
chosen-plaintext dan menggunakan waktu
kurang dari 2
N
dimana N adalah panjang key.
Akhirnya, diputuskan tujuan fleksibel dalam kriptografi Twofish sebagai
berikut:
a. Memiliki varian dengan sebuah nomor variable dari setiap round.
b. Memiliki key schedule yang dapat di-prekomputasikan untuk kecepatan
maksimum dan penggunaan memori manimum.

c. Cocok sebagai stream chipper, fungsi hash satu arah, MAC dan pseudo
ramdom number generator, dengan menggunakan metode konstruksi yang
dapat dimengerti.
d. Memiliki varian famili-key untuk memungkinkan versi chipper yang
berbeda dan non interoperable.
Dan twofish telah memenuhi semua kriteria-kriteria diatas.


BAB III
ANALISIS DAN PERANCANGAN SISTEM

Bab ini membahas tentang analisis dan perancangan sistem tentang
pembuatan aplikasi enkripsi serta dekripsi file dan folder dengan algoritma
twofish. Analisis dan perancangan ini meliputi analisis sistem, perancangan
proses, tahap pembuatan sistem, dan perancangan antarmuka.

3.1. Analisis Sistem
Masalah yang diselesaikan dalam skripsi ini antara lain adalah
menerapkan algoritma twofish digunakan untuk enkripsi dan dekripsi file dan
folder. Pada subbab ini dilakukan beberapa analisis yaitu deskripsi sistem dan
perancangan proses sistem yang akan dibangun.

3.1.1. Deskripsi Sistem
Subbab ini akan membahas mengenai deskripsi sistem yang dikerjakan
pada skripsi ini. Tujuan pembuatan sistem ini adalah menerapkan algoritma untuk
mengamankan file ataupun folder sehingga file atau folder tersebut menjadi tidak
dapat terbaca. Proses utama pada aplikasi perangkat lunak ini adalah melakukan
enkripsi dan dekripsi. Adapun proses dalam perangkat lunak ini sebagai berikut :
a. Melakukan enkripsi file dan folder.
1. Pengguna memasukkan input berupa file atau folder. File atau folder

yang akan diinputkan berupa file teks, file gambar, file suara, dan lain
sebagainya.
2. Masukkan kunci untuk mengenkripsi.
3. Lakukan enkripsi file atau folder yang telah diinputkan.
4. File atau folder yang telah terenkripsi menjadi file yang tidak terbaca.
Diagram alir untuk enkripsi file adalah sebagai berikut:

Gambar 3.1 Enkripsi File dan Folder

b. Melakukan dekripsi file dan folder

1. Masukkan file yang sudah terenkripsi.
2. Masukkan kunci yang sama ketika file atau folder dienkripsi.
3. Lakukan dekripsi untuk file yang telah diinputkan.
4. File akan menjadi seperti keadaan semula. Untuk folder yang
terenkripsi tidak dapat diketahui bahwa itu folder karena inputan
dekripsi berupa file terenkripsi, dengan kata lain folder yang dienkripsi
berupa file. Folder yang terenkripsi akan menjadi folder semula.
Diagram alir dekripsi file adalah sebagai berikut :


Gambar 3.2 Dekripsi File dan Folder

3.1.2 Perancangan Proses Sistem
Proses yang dirancang pada perangkat lunak ini berdasarkan pada
algortima yang digunakan yaitu algoritma twofish. Algotirma twofish sendiri
merupakan algoritma yang menggunakan kunci simetrik yaitu kunci yang
digunakan untuk mengenkripsi sama dengan kunci yang digunakan pada saat
mendekripsi. Twofish menggunakan 128 bit setiap blok yang akan dienkripsi.
Kunci yang digunakan dengan panjang maksimal 256 bit.
Pada bab teori dasar telah dijelaskan tentang unsur pembangun twofish
beseta algoritmanya. Berikut bagan dari algoritma twofish yang akn dijelaskan
pada subbab ini.


Gambar 3.3 Bagan Algoritma Twofish
(Schneier, 1998 : 9)
Secara lebih jelas tahapan-tahapan algoritma twofish akan dijabarkan
sebagai berikut.

Penjadwalan Kunci :
a. Sebelum melalui tahapan enkripsi, maka harus melalui penjadwalan kunci.
Panjang kunci yang didefinisikan twofish sepanjang 128 bit, 192, bit dan
256 bit. Apabila input kunci yang dimasukkan kurang dari ketentuan
tersebut, maka akan ditambahakan zero byte sampai panjang kunci
memenuhi ketentuan di atas.
b. Setelah itu kunci dibagi menjadi vector Me, Mo, dan S. Vector Me dan Mo
digunakan pada fungsi h sebagai list, sedangkan vector S digunakan untuk
tahap enkripsi pada fungsi g.
c. Masukkan masing-masing word kunci Kj yang diekspansi yaitu 2i dan
2i+1 ke dalam fungsi h yaitu melalui permutasi q0 dan q1 dilanjutkan
dengan matrik MDS.


Gambar 3.4 Fungsi h
(Schneier, 1998 : 9)
d. Hasil dari word 2i melalui proses PHT, sedangkan word 2i+1 sebelum
melalui proses PHT dilakukan rotasi kekiri sejauh 8 bit. Maka hasil dari
proses tersebut menjadi kunci yang sudah terjadwal.

Tahap Enkripsi :
a. Input plainteks sebesar 128 bit akan dibagi menjadi empat word yaitu P0,
P1, P2, P3 yang masing-masing sebesar 32 bit. P0 dan P1 akan menjadi
bagian kiri, sedangkan P2 dan P3 akan menjadi bagian kanan.

b. Plainteks akan melalui proses input whitening yaitu input akan di-XOR
dengan empat word kunci yang telah terjadwal yaitu K0, K1, K2, dan K3.
Secara formalnya adalah sebagai berikut :
Ro,i =Pi xor Ki (3.1)
i =0, , 3


Gambar 3.5 Proses Whitening

c. Proses berikutnya input akan melalui proses pada fungsi F yang meliputi
di dalamnya adalah fungsi g dan dilanjutkan dengan PHT (pseudo
hadamard transform), dan dilakukan penambahan hasil PHT dengan
kunci. Proses fungsi F tersebut dilakukan secara bertahap. R0 dan R1 yang
merupakan hasil whitening akan menjadi input untuk fungsi F.
d. R0 dan R1 akan dimasukkan ke dalam fungsi g yang merupakan bagian
awal dari fungsi F. Untuk R1 sebelum dimasukkan ke dalam fungsi g akan
dirotasi ke kiri sejauh 8 bit. R0 dan R1 melalui S-box dan selanjutnya akan
dikalikan dengan matriks MDS. Hasil dari fungsi g ini masing-masing
menjadi T0 dan T1.
e. T0 dan T1 akan melalui proses PHT yang merupakan penggabungan T0
dan T1 dimana T0 +T1 dan T0 +2T1. Setelah itu hasil dari PHT tersebut
masing-masing akan ditambahkan dengan kunci yang sudah terjadwal

yaitu K2r+8 dan K2r+9. Hasil dari fungsi F adalah F0 dan F1, maka
dengan demikian fungsi F telah terpenuhi.


Gambar 3.6 Fungsi F

f. Setelah itu F0 dan F1 masing-masing di-XOR dengan R2 dan R3. Hasil
dari R2 XOR F0 dirotasi ke kanan sejauh 1 bit. Sedangkan R3 XOR F1,
sebelumnya R3 dirotasi ke kiri sejauh 1 bit.
g. Setelah itu, maka akan dilakukan iterasi sebanyak 16 kali. Setiap iterasi
sama dengan proses sebelumnya.
h. Hasil dari swap blok terakhir adalah penukaran bagian kanan dan kiri yang
di-undo.
i. Hasil dari 16 round enkripsi kan melalui output whitening yaitu proses
peng-XORan 16 round enkripsi dengan K4, K5, K6, dan K7.


Gambar 3.7 Swap Blok Terakhir dan Output Whitening

Pada proses dekripsi, cara yang dilalui sama saja dengan proses enkripsi
tetapi hanya arahnya saja yang berlawanan. Proses yang dilalui secara berurutan
yaitu : output whitening, swap blok trakhir, 16 iterasi dekripsi, dan input
whitening. Inputnya adalah chiperteks dan kunci untuk memperoleh plainteks.
Kunci untuk dekripsi sama saja dengan kunci enkripsi, begitupun juga panjang
maksimal kunci yaitu 256 bit atau 32 karakter.

3.2 Tahapan Penelitian
Dalam pembuatan proses sistem yang dibangun melalui beberapa tahapan.
Secara garis besar tahapan pembutan sistem yang akan dibangun adalah sebagai
berikut :
a. Melakukan studi literatur
Melakukan studi literatur yang berhungan dengan penelitian yang dikutip
dari buku teks, paper, dan browsing internet. Bahasan yang ambil
mengenai teori kriptografi, algoritma twofish, dan hubungan keilmuan
yang dibahas dengan agama Islam. Melalui studi literatur, teori tersebut

dianalisis untuk mengimplementasikannya ke dalam bentuk perangkat
lunak.
b. Analisis dan perancangan perangkat lunak.
Menganalisis dan merancang perangkat lunak enkripsi dan dekripsi file
dan folder untuk memperoleh perangkat lunak yang sesuai dengan teori
dan rancangan yang telah dilakukan.
c. Pembuatan perangkat lunak
Pembuatan perangkat lunak berdasarkan analisis dan perancangan yang
dilakukan sehingga diperoleh hasil yang optimal.
d. Uji coba dan evaluasi sistem.
Melakukan uji coba terhadap perangkat lunak. Uji coba yang dilakukan
yaitu menguji keberhasilan enkripsi file atau folder serta
mendekripsikannya kembali sehingga menjadi file semula. Bahan yang
akan diuji berupa file yang mempunyai kapasitas yang beragam. Selain itu
mengevaluasi sistem yang telah diselesaikan dengan menganalisa kinerja
perangkat lunak yang telah dibangun.

3.3 Perancangan Antarmuka
Rancangan antarmuka yang akan dibangun mempunyai dua form yaitu
form enkripsi dan form dekripsi. Form enkripsi adalah form untuk mengenkripsi
file, dimana bagian dari form ini yaitu text field kunci untuk menginputkan kunci
atau password dengan panjang maksimal 256 bit atau 32 karakter, text field file
input untuk menginputkan file atau folder yang akan dienkripsi dengan open

file/folder, text field file output untuk menyimpan file yang akan dienkripsi, dan
button enkrip file adalah tombol untuk mengenkripsi file. Berikut adalah gambar
rancangan form enkripsi yang akan dibangun.













Gambar 3.8 Rancangan Form Enkripsi
Keterangan gambar :
1. Button form enkripsi
2. Button form dekripsi
3. Text Field kunci
4. Text Field file input
5. Text Field file output




KUNCI

FILE INPUT

FILE OUTPUT

Waktu Enkrip :


6. Check box open file/folder enkripsi
7. Button open file/folder enkripsi
8. Button destinasi file/folder enkripsi
9. Button enkrip file
Sedangkan form dekripsi adalah form untuk mendekripsi file, dimana
bagian dari form ini yaitu text field kunci untuk menginputkan kunci atau
password yang harus sama dengan kunci pada saat mengenkripsi file, text field
file input untuk menginputkan file yang terenkripsi dengan open file, text field file
output untuk menyimpan file yang telah didekripsi, dan button dekrip file adalah
tombol untuk mendekripsi file. Berikut adalah gambar rancangan form dekripsi
yang akan dibangun.
















KUNCI

FILE INPUT

FILE OUTPUT

Waktu Dekrip :

Gambar 3.9 Rancangan Form Dekripsi
Keterangan gambar :
1. Button form enkripsi
2. Button form dekripsi
3. Text Field kunci
4. Text Field file input
5. Text Field file output
6. Button open file
7. Button destinasi file/folder dekripsi
8. Button dekrip file


BAB IV
IMPLEMENTASI DAN EVALUASI

Bab ini akan membahas tentang pengujian dan analisa hasil program yang
telah dibuat. Tujuan dari pengujian ini adalah untuk mengetahui apakah aplikasi
yang telah dibuat sesuai dengan perancangannya.

4.1 Ruang Lingkup Pendukung Implementasi
Untuk menjalankan aplikasi yang telah dibangun maka dibutuhkan
beberapa ruang lingkup pendukung implementasi yaitu berupa perangkat keras
maupun perangkat lunak. Berikut adalah ruang lingkup untuk menjalankan
aplikasi yang telah dibangun.

4.1.1 Ruang Lingkup Perangkat Keras
Dalam pembuatan aplikasi enkripsi menggunakan perangkat keras
Notebook Acer Aspire 5315. Adapun spesifikasi yang perangkat keras yang
digunakan adalah :
a. Prosesor Intel Celeron 560 (2,13Ghz).
b. RAM DDR II 512 MB.
c. Hardisk dengan Kapasitas 80 GB.
d. Monitor WXGA Acer CrystalBrite LCD 15,4 inci.



4.1.2 Ruang Lingkup Perangkat Lunak
Perangkat lunak yang digunakan untuk pengembangan aplikasi ini antara
lain :
1. Sistem Operasi Windows XP Profesional SP2.
2. Borland Delphi 7.0.

4.2 Implementasi Sistem
Pada subbab ini akan memaparkan implentasi sistem berdasarkan
rancangan program. Rancangan yang telah dirancang akan diimplentasikan ke
dalam bentuk sourcecode dalam bahasa pemrograman borland delphi 7.0. Berikut
adalah paparan implementasi dari perangkat lunak yang telah dibangun.

4.2.1 Implementasi Algoritma Twofish
4.2.1.1 Penjadwalan Kunci
Sebelum melalukan proses enkripsi pada twofish maka diperlukan
penjadwalan kunci. Sebelum penjadwalan kunci, vector Me, Mo, dan S,
dipersiapkan terlebih dahulu. Setelah itu vector Me dan Mo menjadi bagian dari
penjadwalan kunci sebagai masukan, sedangkan vector S akan digunakan pada
saat enkripsi. Lalu proses berikutnya akan dilakukan perhitungan fungsi h. Berikut
adalah source code dari penjaadwalan kunci :
procedure Hitung_J adKunci;
var
p :LWord;
Ai, Bi, K2i, K2i1 :LWord;

i :byte;
begin
fillchar(K2i, sizeof(K2i),0);
fillchar(K2i1, sizeof(K2i1),0);
p:=0;
for i:=0 to 19 do
begin
fillchar(p,sizeof(p),0);
p:=p+$01010101;
Ai:=h(p, VectorMe);
p:=p+$01010101;
Bi:=ROL(h(p, VectorMo), 8);
J adKunci[i+i]:=Ai+Bi;
J adKunci[i+i+1]:=RoL(Bi+Bi+Ai, 9);
end;
end;


4.2.1.2 Tahap Enkripsi File
Proses enkripsi pada algoritma twofish melalui beberapa tahapan. Pertama
masukan dari plainteks sebesar 128 bit dipecah menjadi empat bagian yang
masing-masing sebesar 32 bit lalu di XOR-kan dengan kunci yang sudah
terjadwal yang masing-masing juga dibagi menjadi empat bagian. Hal ini disebut
dengan proses whitening. Hasil whitening akan akan melalui fungsi F yang
mempunyai output F0 dan F1 dan masing-masing di-XORkan dengan R2 dan R3
(melalui rotasi kekiri 1 bit). Setelah itu dilakukan iterasi sebanyak 16 kali iterasi,
sebelum iterasi dilakukan sama dengan proses sebelumnya. Dilakukan swap blok
akhir yaitu dengan meng-undo swap blok paling akhir tersebut. Terakhir
dilakukan peng-XORan terhadap beberapa kunci yang terjadwal yaitu K4, K5,
K6, dan K7. Demikian proses enkripsi yang dilakukan. Berikut adalah source
code untuk proses enkripsi:



Function BlokEnkrip(Blok:Block16) :Block16;
var
i :byte;
T0, T1 :LWord;
begin
InputWhitening(Blok);
for i:=0 to 7 do
begin
T0 :=h(Blok[0], Vectors);
T1 :=h(ROL(Blok[1], 8), VectorS);
F0 :=T0+T1+J adKunci[4*i+8];
F1 :=T0+T1+T1+J adKunci[4*i+9];
blok[2] :=ROR (T0 xor blok[2], 1);
blok[3] :=T1 XOR ROL (blok[3], 1);
T0 :=h(blok[2], VectorS);
T1 :=h(RoL(Blok[3], 8), VectorS);
F0 :=T0+T1+J adKunci[4*i+10];
F1 :=T0+T1+T1+J adKunci[4*i+11];
blok[0] :=ROR (T0 XOR blok[0], 1);
blok[1] :=T1 XOR ROL (blok[1], 1);
end;
SwapBlock(Blok);
OutputWhitening(Blok);
BlokEnkrip:=Blok;
end;


4.2.3.3 Tahap Dekripsi File
Proses yang dilalui pada saat dekripsi sama saja dengan proses enkripsi
tetapi hanya arahnya saja yang berlawanan. Proses yang dilalui secara berurutan
yaitu : output whitening, swap blok trakhir, 16 iterasi dekripsi, dan input
whitening. Inputnya adalah chiperteks dan kunci untuk memperoleh plainteks.
Kunci untuk dekripsi sama saja dengan kunci enkripsi, begitupun juga panjang
maksimal kunci yaitu 256 bit atau 32 karakter. Berikut adalah source code untuk
mendekripsi file :


Function BlockDekrip(Blok:Block16) :Block16;
var
i :byte;
T0, T1 :LongWord;
begin
OutputWhitening(Blok);
for i :=7 downto 0 do
begin
T0 :=h(Blok[0], VectorS);
T1 :=h(ROL(Blok[1], 8), VectorS);
F0 :=T0+T1+J adKunci[4*i+10];
F1 :=T0+T1+T1+J adKunci[4*i+11];
blok[2] :=ROL (blok[2], 1) xor T0;
blok[3] :=ROR ((blok[3] xor T1), 1);
T0 :=h(blok[2], VectorS);
T1 :=h(ROL(Blok[3], 8), VectorS);
F0 :=T0+T1+J adKunci[4*i+8];
F1 :=T0+T1+T1+J adKunci[4*i+9];
blok[0] :=ROL (blok[0], 1) XOR T0;
blok[1] :=ROR ((blok[1] XOR T1), 1);
end;
SwapBlock(Blok);
InputWhitening(Blok);
BlokDekrip:=Blok;
end;


4.2.2 Enkripsi dan Dekripsi Folder
Teknik enkripsi folder berbeda dengan enkripsi file karena di dalam folder
terdapat jumlah file yang lebih dari satu. Untuk teknik enkripsi folder yaitu nama
direktori dimasukkan pada header masing-masing file, dengan kata lain proses
enkripsi folder harus melalui penyatuan file lalu dilakukan proses pengenkripsian,
dan folder itu sendiri dienkrip berdasarkan namanya. Sedangkan untuk dekripsi
folder yaitu header file dibongkar terlebih dahulu, lalu folder di-create dan isi dari
folder tersebut dimasukkan file-file isi dari folder yang terlebih dahulu dibongkar.
Berikut source code dari penginputan folder.

procedure TMainFrm.CInBrowseBtnClick(Sender: TObject);
Var
I: Integer;
Hasil, J adi, S : String;

Begin
If CheckBox1.Checked Then
Begin
Ffolder.ShowModal;
CInFileBox.Text:=Ffolder.DirectoryListBox1.Directory;
Y.Caption:=Ffolder.DirectoryListBox1.Directory;

S:=CInFileBox.Text;
I:=Length( CInFileBox.Text);
Hasil:='';
Repeat
Hasil:=Hasil+S[i];
I:=I-1;
Until ((S[i]='/') Or (S[i]='\') or (I<=1));

J adi:='';
For I:=Length(Hasil) DownTo 1 Do
Begin
J adi:=J adi+Hasil[i];
End;
H2.Caption:=J adi;

End Else
Begin
if OpenDlg.Execute then
CInFileBox.Text:=OpenDlg.Filename;
End;


Sedangkan adalah source code dari dekripsi folder adalah:

procedure TMainFrm.Button1Click(Sender: TObject);
var
NewFileName: string;
Msg: string;

NewFile: TFileStream;
OldFile: TFileStream;
begin
NewFileName :=ExtractFilePath(Application.ExeName) +
ExtractFileName(CInFileBox.Text);
Msg :=Format('Copy %s to %s?', [CInFileBox.Text, NewFileName]);
if MessageDlg(Msg, mtCustom, mbOKCancel, 0) =mrOK then
begin
OldFile :=TFileStream.Create(CInFileBox.Text, fmOpenRead or
fmShareDenyWrite);
try
NewFile :=TFileStream.Create(NewFileName, fmCreate
or fmShareDenyRead);
try
NewFile.CopyFrom(OldFile, OldFile.Size);
finally
FreeAndNil(NewFile);
end;
finally
FreeAndNil(OldFile);
end;
end;
end;

4.3 Implementasi Antarmuka
Dalam antarmuka yang dibangun, ada dua form utama yaitu form enkripsi
dan form dekripsi. Form enkripsi adalah form untuk mengenkripsi file, sedangkan

form dekripsi adalah form untuk mendekripsi file. Adapun form enkripsi adalah
sebagai berikut.

Gambar 4.1 Form Enkripsi
Keterangan gambar :
10. Button form enkripsi
11. Button form dekripsi
12. Text Field kunci
13. Text Field file input
14. Text Field file output
15. Check box open file/folder enkripsi
16. Button open file/folder enkripsi
17. Button destinasi file/folder enkripsi

18. Button enkrip file

Text field kunci untuk menginputkan kunci atau password dengan panjang
maksimal 256 bit atau 32 karakter, text field file input untuk menginputkan file
atau folder yang akan dienkripsi dengan open file/folder, text field file output
untuk menyimpan file yang akan dienkripsi, dan button enkrip file adalah tombol
untuk mengenkripsi file. Sedangkan form dekripsi adalah sebagai berikut.


Gambar 4.2 Form Dekripsi
Keterangan gambar :
9. Button form enkripsi
10. Button form dekripsi

11. Text Field kunci
12. Text Field file input
13. Text Field file output
14. Button open file
15. Button destinasi file/folder dekripsi
16. Button dekrip file
Text field kunci untuk menginputkan kunci atau password yang harus
sama dengan kunci pada saat mengenkripsi file, text field file input untuk
menginputkan file yang terenkripsi dengan open file, text field file output untuk
menyimpan file yang telah didekripsi, dan button dekrip file adalah tombol untuk
mendekripsi file.

4.4. Uji Coba Perangkat Lunak
Untuk mencoba keberhasilan perangkat lunak yang akan dibuat maka akan
dilakukan uji coba perangkat lunak. Uji coba perangkat lunak enkripsi dan
dekripsi bertujuan untuk menguji keberhasilan pengenkripsian pada file dan folder
sehingga file atau folder yang telah dienkripsi sehingga tidak bisa terbaca, dan
menguji keberhasilan pendekripsian file atau folder tersebut sehingga kembali
menjadi kondisi semula. Uji coba yang dilakukan adalah dengan dengan mencoba
mengenkripsi berbagai macam tipe file yaitu file suara, teks dokumen, video,
gambar, aplikasi, dan folder. Twofish merupakan algoritma yang bekerja secara
blok chiper simetris, sehingga kunci dekripsi yang digunakan sama dengan kunci
enkripsi.

Berikut adalah tahapan penggunaan perangkat lunak untuk melakukan
enkripsi file :
a. Untuk mengenkripsi file terlebih dahulu menginputkan file yang akan
dienkrip.
b. Setelah itu menempatkan destinasi file hasil enkripsi.
c. Masukkan kunci untuk mengenkripsi file.
d. Hasil enkrip dapat diberi nama sesuai dengan keinginan.
e. Tekan button Enkrip File, setelah itu file akan terenkrip.
Sedangkan tahapan untuk melakukan dekripsi file adalah :
a. Untuk mendekripsi file terlebih dahulu menginputkan file yang akan
didekrip.
b. Setelah itu menempatkan destinasi file hasil dekripsi.
c. Masukkan kunci untuk mendekripsi file. Kunci dekripsi sama seperti kunci
enkripsi.
f. Hasil dekrip dapat diberi nama sesuai dengan keinginan.
g. Tekan button Dekrip File, setelah itu file akan terenkrip.
Ekstensi file yang diuji yaitu .exe, .doc, .jpg, mp3, mp4, dan folder. Kunci yang
dipergunakan adalah kata uji_coba.

4.4.1 Uji Coba dengan Ekstensi File .doc.
Uji coba pertama yang dilakukan dengan tipe file tipe file teks dokumen
yaitu .doc, .doc merupakan file dari Microsoft Word Office 2003. Berikut adalah

susunan file KRIPTOGRAFI.doc dalam bentuk heksadesimal yang diuji untuk
dienkripsi.

Gambar 4.3 File KRIPTOGRAFI.doc dalam Heksadesimal
FileKRIPTOGRAFI.doc setelah dienkripsi beri nama enkrip KRIPTOGRAFI.
Berikut adalah file .doc yang sudah terenkripsi.


Gambar 4.4 File enkrip KRIPTOGRAFI dalam Heksadesimal
Pada gambar 4.4, bagian kiri menunjukkan struktur file dalam bentuk
heksadesimal, sedangkan pada bagian kanan merupakan perwujudan bentuk
karakter (ASCII) dari heksadesimal. Dengan begitu file tersebut sudah tidak bisa
dimengerti.
Untuk menguji keberhasilan mengembalikan file menjadi bentuk semula
maka dilakukan pendekripsian file. Nama file asli dibedakan dengan file hasil
dekripsi bertujuan untuk membandingkan keberhasilan dekripsi bahwa apakah
hasil dekripsi sesuai dengan file asli sebelum enkripsi. Nama ekstensi hasil

dekripsi harus sama dengan ekstensi file asli, kalau tidak maka file tidak akan bisa
dibuka. Berikut file .doc yang telah didekripsi, nama file hasil dekripsi adalah
dekrip KRIPTOGRAFI.doc.

Gambar 4.5 File dekrip KRIPTOGRAFI.doc dalam Heksadesimal
Hasil dekripsi menunjukkan bahwa susunan heksadesimalnya sesuai dengan file
asli sebelum enkripsi.




4.4.2 Uji Coba dengan Ekstensi File .exe.
Uji coba kedua yang dilakukan dengan tipe file aplikasi yaitu .exe. Berikut
adalah susunan file QuranInWord.exe dalam bentuk heksadesimal yang diuji
untuk dienkripsi.

Gambar 4.6 File QuranInWord.exe dalam Heksadesimal
FileQuranInWord.exe setelah dienkripsi beri nama enkrip QuranInWord.
Berikut adalah file .exe yang sudah terenkripsi.



Gambar 4.7 File enkrip QuranInWord dalam Heksadesimal
Berikut file .exe yang telah didekripsi, nama file hasil dekripsi adalah dekrip
QuranInWord.exe.



Gambar 4.8 File dekrip QuranInWord.exe dalam Heksadesimal
Hasil dekripsi menunjukkan bahwa susunan heksadesimalnya sesuai dengan file
asli sebelum enkripsi.

4.4.3 Uji Coba dengan Ekstensi File .jpg.
Uji coba selanjutnya dilakukan dengan tipe file gambar yaitu .jpg. Berikut
adalah susunan file Spiderman.jpg dalam bentuk heksadesimal yang diuji untuk
dienkripsi.


Gambar 4.9 File Spiderman.jpg dalam Heksadesimal
FileSpiderman.jpg setelah dienkripsi beri nama enkrip Spiderman. Berikut
adalah file .jpg yang sudah terenkripsi.


Gambar 4.10 File enkrip Spiderman dalam Heksadesimal
Berikut file .jpg yang telah didekripsi, nama file hasil dekripsi adalah dekrip
Spiderman.jpg.


Gambar 4.11 File dekrip Spiderman.jpg dalam Heksadesimal
Hasil dekripsi menunjukkan bahwa susunan heksadesimalnya sesuai dengan file
asli sebelum enkripsi.

4.4.4 Uji Coba dengan Ekstensi File .mp3.
.mp3 merupakan salah satu ekstensi dari file suara yang akan diuji. Berikut
adalah susunan file Firasat.mp3 dalam bentuk heksadesimal yang diuji untuk
dienkripsi.


Gambar 4.12 File Firasat.mp3 dalam Heksadesimal
File Firasat.mp3 setelah dienkripsi beri nama enkrip Firasat. Berikut adalah
file .mp3 yang sudah terenkripsi.


Gambar 4.13 File enkrip Firasat dalam Heksadesimal
Berikut file .mp3 yang telah didekripsi, nama file hasil dekripsi adalah dekrip
Firasat.mp3.


Gambar 4.14 File dekrip Firasat.mp3 dalam Heksadesimal
Hasil dekripsi menunjukkan bahwa susunan heksadesimalnya sesuai dengan file
asli sebelum enkripsi.

4.4.5 Uji Coba dengan Ekstensi File .mp4.
.mp4 merupakan salah satu ekstensi dari file video yang akan diuji.
Berikut adalah susunan file Best in Me.mp4 dalam bentuk heksadesimal yang
diuji untuk dienkripsi.


Gambar 4.15 File Best in Me.mp4 dalam Heksadesimal
File Best in Me.mp4 setelah dienkripsi beri nama enkrip BestInMe. Berikut
adalah file .mp4 yang sudah terenkripsi.


Gambar 4.16 File enkrip BestInMe dalam Heksadesimal
Berikut file .mp4 yang telah didekripsi, nama file hasil dekripsi adalah dekrip
BestInMe.mp4.


Gambar 4.17 File dekrip BestInMe.mp4 dalam Heksadesimal
Hasil dekripsi menunjukkan bahwa susunan heksadesimalnya sesuai dengan file
asli sebelum enkripsi.

4.4.6 Uji Coba Enkripsi-Dekripsi Folder.
Struktur folder berbeda dengan file, di dalam terdapat jumlah file lebih
dari satu. Struktur foder tidak bisa dilihat secara langsung. Berikut adalah
pengujian enkripsi folder dengan nama folder PROPOSAL.


Gambar 4.18 Folder PROPOSAL
Untuk membedakan dengan file yang terenkripsi, maka untuk nama folder yang
sudah terenkripsi diberi nama dengan diakhiri x. Sedangkan untuk penamaan
hasil enkripsi terserah. Penamaan pada folder PROPOSAL menjadi proposalx

Gambar 4.19 Folder enkrip proposalx dalam Heksadesimal

Pada gambar 4.19 merupakan struktur folder yang sudah teracak sehingga folder
tersebut brubah menjadi file yang tidak bisa dimengerti.

Gambar 4.20 Folder dekrip proposal
Pada gambar 4.20 menunjukkan hasil dekripsi dengan dengan nama folder
dekrip proposal. Pada hasil dekripsi tersebut menunjukkan bahwa folder hasil
dekripsi menghasilkan file yang sama dengan folder asli sebelum enkripsi.

4.5 Evaluasi Sistem
Hasil evaluasi yang didapatkan setelah ujicoba yang dilakukan adalah :
a. Twofish merupakan algoritma kriptografi simetris sehingga kunci yang
digunakan pada saat mengenkripsi dan mendekripsi sama.
b. Perangkat lunak yang dibangun berhasil mengenkripsi dan mendekripsi
file maupun folder, rincian hasil enkripsi dan dekripsi dapat dilihat pada
table berikut.




File/Folder Kinerja Enkripsi Kinerja Dekripsi
KRIPTOGRAFI.doc Berhasil Terenkripsi Berhasil Terdekripsi
QuranInWord.exe Berhasil Terenkripsi Berhasil Terdekripsi
Spiderman.jpg Berhasil Terenkripsi Berhasil Terdekripsi
Firasat.mp3 Berhasil Terenkripsi Berhasil Terdekripsi
Best in Me.mp4 Berhasil Terenkripsi Berhasil Terdekripsi
PROPOSAL Berhasil Terenkripsi Berhasil Terdekripsi
Tabel 4.1 Hasil Enkripsi dan Dekripsi
File yang telah dienkripsi berhasil teracak sehingga file tersebut tidak bisa
dimengerti, dan hasil dekripsi sama dengan file asli sebelum dienkripsi.

4.6 Hubungan Kriptografi Dengan Kerahasiaan Menurut Islam
Kriptografi adalah seni untuk mengamankan dan merahasiakan informasi.
Kerahasiaan merupakan aspek yang penting dari ilmu kriptografi sehingga
informasi yang dirahasiakan tetap aman dari orang-orang tidak diperkenankan
untuk mengetahuinya.
Sedangkan kerahasiaan menurut agama Islam merupakan kuasa dari Allah
SWT. Segala rahasia dari yang ada di alam semesta ini merupakan ketentuan dari
Allah SWT. Kelahiran, kematian, rejeki, dan lain-lain sudah ditentukan Allah
SWT yang telah dituliskan di dalam Lauhul Mahfuzh. Namun takdir yang sudah
ditentukanAllah masih bisa dirubah dengan usaha dan doa.
Hasil yang telah diperoleh dari skripsi ini adalah perangkat lunak yang
dibangun telah berhasil mengenkripsi file sehingga tidak file tersebut tidak bisa
dibuka oleh orang yang tidak diperkenankan. Hal ini sudah memenuhi
kerahasiaan yang menjadi salah satu aspek dari kriptografi. Kaitannya dengan
keislaman tentang rahasia bahwa segala yang ada pada alam semesta ini
merupakan rahasia dari Allah SWT yang sudah tertulis di Lauhul Mahfuzh.

BAB V
PENUTUP

5.1 Kesimpulan
Dari hasil penelitian yang didapat maka dapat disimpulkan bahwa:
a. Twofish menggunakan 128 bit setiap blok yang akan dienkripsi. Kunci
yang digunakan dengan panjang maksimal 256 bit dengan menggunakan
kunci simetrik dimana kunci pada saat enkripsi sama dengan dekripsi.
b. Perangkat lunak yang dibangun berhasil mengenkripsi dan mendekripsi
file maupun folder.
c. File yang telah dienkripsi berhasil teracak sehingga file tersebut tidak bisa
dimengerti, dan hasil dekripsi sama dengan file asli sebelum dienkripsi.

5.2 Saran
Untuk pengguna aplikasi ini disarankan untuk mengamankan file yang
dianggap penting untuk keamanan data. Disarankan mengembangkan aplikasi
enkripsi ini dengan menambahkan fitur enkripsi dan dekripsi drive dan dijalankan
pada Local Area Network (LAN) atau jaringan internet.

DAFTAR PUSTAKA

Al-J azairi, Syaikh Abu Bakar J abir. 2009. Tafsir AlQuran Al-Aisar jilid 7.
J akarta: Darus Sunnah Press
Ariyus, Dony. 2006. Kriptografi : Keamanan Data dan Komunikasi. Yogyakarta :
Graha Ilmu
Ariyus, Dony. 2009. Keamanan Multimedia. Yogyakarta : Andi
Dani. Algoritma Twofish Sebagai Finalis AES dan Metode Kriptanalisisnya,
(Online) (http://www.informatika.org/~rinaldi/Kriptografi/2006-
2007/Makalah1 /Makalah1 -006.pdf, diakses 2 Desember 2009)
Kriptografi. (Online), (robby.c.staff.gunadarma.ac.id/Downloads/files/4565
/KRIPTOGRAFI.doc, diakses 25 November 2009)
Mudeng, Denny. Kriptografi Twofish, (Online) (budi.insan.co.id/courses/el7010/
dikmenjur-2004/denny-report.doc, diakses 25 November 2009)
Mukmin, Indra. Algoritma Twofish : kinerja dan implementasinya sebagai salah
satu kandidat algoritma AES (Advanced Encryption Standard), (Online)
(www.informatika.org/~rinaldi/Kriptografi/2006-2007/Makalah1/
Makalah1-006.pdf, diakses 5 November 2009)
Munir, Rinaldi. 2006. Kriptografi. Bandung : Informatika
Octamanullah, Mohamad. Perbandingan Algoritma Kriptografi Kunci Simetrik
BlowFish dan TwoFish, (Online) (http://www.informatika.org/~rinaldi/
Kriptografi/2006-2007/Makalah1/Makalah1-004.pdf, diakses 29
November 2009)

Schneier, Bruce dkk. 1998. Twofish: A128-Bit Block Cipher, (Online)
(http://www.schneier.com/paper-twofish-paper.pdf, diakses 25 November 2009)
Twofish, (Online), (http://prastowo.staff.ugm.ac.id/kuliah/kriptografi/tugas-
akhir/kel7-twofish/kriptoTWOFISH.doc, diakses 25 November 2009)


Lampiran 1
LISTING PROGRAM (MAIN)

unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
Buttons, DCPcrypt, UTwofish, ExtCtrls, ComCtrls, ShlObj, FileCtrl;
type
TMainFrm=class(TForm)
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
HashGrp: TGroupBox;
HInFileBox: TEdit;
HInBrowseBtn: TSpeedButton;
HInFileLbl: TLabel;
HOutputLbl: TLabel;
HOutputBox: TEdit;
HHashBtn: TButton;
DCP_twofish1: TDCP_twofish;
OpenDlg: TOpenDialog;
SaveDlg: TSaveDialog;
Shape1: TShape;
StatusBar1: TStatusBar;
Timer1: TTimer;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
CryptGrp: TGroupBox;
CInBrowseBtn: TSpeedButton;
COutBrowseBtn: TSpeedButton;
CAlgorithmLbl: TLabel;
CInFileBox: TEdit;
CAlgorithmCBx: TComboBox;
COutFileBox: TEdit;
CPassphraseBox: TEdit;
CStrings: TMemo;
CEncryptStrBtn: TButton;
CDecryptStrBtn: TButton;
Panel1: TPanel;
Panel5: TPanel;
Panel6: TPanel;
P1: TPanel;
BB2: TBitBtn;
Panel10: TPanel;
TabSheet2: TTabSheet;
Panel11: TPanel;
GroupBox1: TGroupBox;
SpeedButton2: TSpeedButton;
A: TSpeedButton;
Label1: TLabel;
E2: TEdit;
ComboBox1: TComboBox;

E3: TEdit;
E1: TEdit;
Memo1: TMemo;
Button2: TButton;
Button3: TButton;
Panel7: TPanel;
Panel8: TPanel;
Panel9: TPanel;
BTSimpan: TBitBtn;
P2: TPanel;
PB1: TProgressBar;
Pb2: TProgressBar;
CheckBox1: TCheckBox;
H2: TPanel;
H5: TPanel;
Button1: TButton;
SpeedButton1: TSpeedButton;
B: TSpeedButton;
Y: TPanel;
Memo2: TMemo;
E5: TEdit;
L1: TLabel;
Label2: TLabel;
L2: TLabel;
Label4: TLabel;
Tx: TTimer;
procedure FormCreate(Sender: TObject);
procedure CInBrowseBtnClick(Sender: TObject);
procedure COutBrowseBtnClick(Sender: TObject);
procedure HInBrowseBtnClick(Sender: TObject);
procedure CEncryptStrBtnClick(Sender: TObject);
procedure CDecryptStrBtnClick(Sender: TObject);
procedure BB2Click(Sender: TObject);
procedure BTSimpanClick(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure AClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure BClick(Sender: TObject);
procedure TxTimer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
MainFrm: TMainFrm;
Waktu:Integer;
implementation
uses
ShellApi, Base64, UFolder, UDeFolder, UTwofish;


{$R *.DFM}

function CompareMem(I1, I2: PByte; Size: integer): boolean;
begin
Result:=true;
repeat
if I1^<>I2^then
begin
Result:=false;
Exit;
end;
Inc(I1);
Inc(I2);
Dec(Size);
until Size=0;
end;

procedure TMainFrm.FormCreate(Sender: TObject);
var
i: integer;
begin
for i:=0 to ComponentCount-1 do
begin
if Components[i] is TDCP_blockcipher then

CAlgorithmCBx.Items.AddObject(TDCP_blockcipher(Components[i]).Algorithm,Components[i])
End;
CAlgorithmCBx.ItemIndex:=0;
HAlgorithmCBx.ItemIndex:=0;
end;

procedure TMainFrm.CInBrowseBtnClick(Sender: TObject);
Var
I: Integer;
Hasil, Jadi, S : String;

begin
If CheckBox1.Checked Then
Begin
Ffolder.ShowModal;
CInFileBox.Text:=Ffolder.DirectoryListBox1.Directory;
Y.Caption:=Ffolder.DirectoryListBox1.Directory;

S:=CInFileBox.Text;
I:=Length( CInFileBox.Text);
Hasil:='';
Repeat
Hasil:=Hasil+S[i];
I:=I-1;
Until ((S[i]='/') Or (S[i]='\') or (I<=1));

Jadi:='';
For I:=Length(Hasil) DownTo 1 Do
BEgin
Jadi:=Jadi+Hasil[i];

End;
H2.Caption:=J adi;

End Else
Begin
if OpenDlg.Execute then
CInFileBox.Text:=OpenDlg.Filename;
End;
end;

procedure TMainFrm.COutBrowseBtnClick(Sender: TObject);
begin
if SaveDlg.Execute then
COutFileBox.Text:=SaveDlg.Filename;
end;

procedure TMainFrm.HInBrowseBtnClick(Sender: TObject);
begin
if OpenDlg.Execute then
HInFileBox.Text:=OpenDlg.Filename;
end;


procedure TMainFrm.CEncryptStrBtnClick(Sender: TObject);
var
i: integer;
Cipher: TDCP_blockcipher;
s: string;
begin
Cipher:=TDCP_blockcipher(CAlgorithmCBx.Items.Objects[CAlgorithmCBx.ItemIndex]);
Cipher.InitStr(CPassphraseBox.Text); // initialize cipher sebagai kuncinya
for i:=0 to CStrings.Lines.Count-1 do
begin
s:=CStrings.Lines[i];
Cipher.EncryptCFB(s[1],s[1],Length(s)); // encrypt semuanya dengan trings
CStrings.Lines[i]:=B64Encode(s);
end;
Cipher.Reset;
Cipher.Burn;
end;

procedure TMainFrm.CDecryptStrBtnClick(Sender: TObject);
var
i: integer;
Cipher: TDCP_blockcipher;
s: string;
begin
Cipher:=TDCP_blockcipher(CAlgorithmCBx.Items.Objects[CAlgorithmCBx.ItemIndex]);
Cipher.InitStr(CPassphraseBox.Text);
for i:=0 to CStrings.Lines.Count-1 do
begin
s:=B64Decode(CStrings.Lines[i]);
Cipher.DecryptCFB(S[1],S[1],Length(S));
CStrings.Lines[i]:=s;
end;

Cipher.Reset;
Cipher.Burn;
end;

procedure TMainFrm.BB2Click(Sender: TObject);

var
Source, Dest: file;
Buffer: array[0..8191] of byte;
Encrypt: TDCP_blockcipher;
Read: integer;
A, B, C : TTime;
begin
Waktu:=0;
Tx.Enabled:=True;
A:=NOw;
if CPassphraseBox.Text='' then
begin
MessageDlg('Masukkan Passwordnya !!',mtInformation,[mbOK],0);
CPassphraseBox.SetFocus;
Exit;
end;

PB2.Position:=5;
Sleep(10);
if CInFileBox.Text='' then
begin
MessageDlg('Masukkan File Input..........',mtInformation,[mbOK],0);
CInFileBox.SetFocus;
Exit;
end
else if COutFileBox.Text='' then
begin
MessageDlg('Masukkan File Output.........',mtInformation,[mbOK],0);
COutFileBox.SetFocus;
Exit;
end
else if COutFileBox.Text=CInFileBox.Text then
begin
MessageDlg('Harus beda dong, file input dan Output....',mtInformation,[mbOK],0);
COutFileBox.SetFocus;
COutFileBox.SelectAll;
Exit;
end;
If CheckBox1.Checked Then
Begin
AssignFile(Source,H5.Caption);
End Else
Begin
AssignFile(Source,CInFileBox.Text);
End;
try
Reset(Source,1);
except
MessageDlg('File tidak bisa dikenali....',mtInformation,[mbOK],0);

Exit;
end;
Application.ProcessMessages;
If CheckBox1.Checked Then
AssignFile(Dest,COutFileBox.text+'x') Else
AssignFile(Dest,COutFileBox.Text);
Application.ProcessMessages;
try
Rewrite(Dest,1);
except
CloseFile(Source);
MessageDlg('Tidak Bisa membuak File Output....',mtInformation,[mbOK],0);
Exit;
end;
Application.ProcessMessages;
PB2.Position:=15;
Sleep(10);
Application.ProcessMessages;
Application.ProcessMessages;
PB2.Position:=25;
Sleep(10);
Application.ProcessMessages;
Encrypt:=TDCP_blockcipher(CAlgorithmCBx.Items.Objects[CAlgorithmCBx.ItemIndex]);
else
PB2.Position:=55;
Sleep(10);
Application.ProcessMessages;
Application.ProcessMessages;
Encrypt.Reset;
repeat
Application.ProcessMessages;
BlockRead(Source,Buffer,Sizeof(Buffer),Read);
Encrypt.EncryptCBC(Buffer,Buffer,Read);
BlockWrite(Dest,Buffer,Read);
until Read<>Sizeof(Buffer);
PB2.Position:=75;
Sleep(10);
Application.ProcessMessages;
Encrypt.Burn;
PB2.Position:=100;
Sleep(10);
Application.ProcessMessages;
CloseFile(Source);
CloseFile(Dest);
B:=NOw;
C:=B-A;
Tx.Enabled:=False;
L1.Caption:=Inttostr(Waktu);

MessageDlg('File Telah Sukses Di Encrypt',mtInformation,[mbOK],0);

CPassphraseBox.Text:='';
CInFileBox.Text:='';
COutFileBox.Text:='';
PB2.Position:=0;

Sleep(10);

end;

Procedure fileCopyx ( sourcefilename, targetfilename:string);
var
s, T:Tfilestream;
begin
s :=TFilestream.Create(sourcefilename,fmopenread);
try
T:=Tfilestream.Create(targetfilename, fmopenwrite or fmcreate);
try
T.CopyFrom(s, s.size);
finally
T.Free;
end;
finally
S.Free;
end;
End;

procedure TMainFrm.BTSimpanClick(Sender: TObject);
var
I : Integer;
Source, Dest: file;
Buffer: array[0..8191] of byte;
Decrypt: TDCP_blockcipher;
Read: integer;
A,B: Pchar;
AA, BB, CC : TTime;
begin
Waktu:=0;
Tx.Enabled:=True;
AA:=Now;
Application.ProcessMessages;
If E3.Visible=True Then
Begin
PB1.Position:=10;
Sleep(10);
if E2.Text='' then
begin
MessageDlg('Masukkan File...',mtInformation,[mbOK],0);
PB1.Position:=0;
E2.SetFocus;
Exit;
end
else if E3.Text='' then
begin
MessageDlg('Masukkan File Output.....',mtInformation,[mbOK],0);
PB1.Position:=0;
E3.SetFocus;
Exit;
end
else if E3.Text=E2.Text then
begin

MessageDlg('Harus beda dong, file input dan Output....',mtInformation,[mbOK],0);
PB1.Position:=0;
E3.SetFocus;
E3.SelectAll;
Exit;
end;
Application.ProcessMessages;

AssignFile(Source,E2.Text);
try
Reset(Source,1);
except
MessageDlg('File Tidak Bisa dikenali.......',mtInformation,[mbOK],0);
PB1.Position:=0;
Exit;
end;
AssignFile(Dest,E3.Text);
try
Rewrite(Dest,1);
except
CloseFile(Source);
MessageDlg('File tidak bisa dibuka',mtInformation,[mbOK],0);
PB1.Position:=0;
Exit;
end;
PB1.Position:=20;
Sleep(10);
Application.ProcessMessages;
Decrypt:=TDCP_blockcipher(CAlgorithmCBx.Items.Objects[CAlgorithmCBx.ItemIndex]);
else
PB1.Position:=50;
Application.ProcessMessages;
Sleep(10);
Application.ProcessMessages;
Decrypt.Reset;
Application.ProcessMessages;
PB1.Position:=80;
Sleep(10);
Application.ProcessMessages;
begin
CloseFile(Source);
CloseFile(Dest);
Application.ProcessMessages;
Decrypt.Burn;
MessageDlg('Password Salah..........',mtInformation,[mbOK],0);
PB1.Position:=0;
Exit;
end;
repeat
BlockRead(Source,Buffer,Sizeof(Buffer),Read);
Decrypt.DecryptCBC(Buffer,Buffer,Read);
BlockWrite(Dest,Buffer,Read);
PB1.Position:=90;
Application.ProcessMessages;
Sleep(10);

until Read<>Sizeof(Buffer);
PB1.Position:=100;
Sleep(10);
Decrypt.Burn;
CloseFile(Source);
Application.ProcessMessages;
CloseFile(Dest);
End Else
Begin
if not DirectoryExists(E5.Text) then
if not CreateDir(E5.Text) then
raise Exception.Create('Tidak bisa membuat folder');
Application.ProcessMessages;
Begin
For I:=0 To Ffolder.FB.Count-1 DO
Begin
Memo2.Lines.Add(Ffolder.FB.Items.GetText);
A:=Pchar(Y.Caption+'\'+Ffolder.FB.Items[i]);
B:=Pchar(E5.Text+'\'+Ffolder.FB.Items[i]);
CopyFile(A,B, True);
Application.ProcessMessages;
End;
End;

End;
Application.ProcessMessages;
E5.Text:='';
BB:=Now;
CC:=BB-AA;
Tx.Enabled:=False;
L2.Caption:=Inttostr(Waktu);

MessageDlg('File Telah Di Decrypt',mtInformation,[mbOK],0);
PB1.Position:=0;

E1.Text:='';
E2.Text:='';
E3.Text:='';
PB1.Position:=0;
end;

procedure TMainFrm.SpeedButton2Click(Sender: TObject);
begin
if OpenDlg.Execute then
E2.Text:=OpenDlg.Filename;
If COpY(E2.Text,Length(E2.Text),1) ='x' then
Begin
A.Visible:=False;
E3.Visible:=False;

B.Visible:=TRue;
E5.Visible:=TRue;
End Else
Begin
A.Visible:=TRue;

E3.Visible:=TRue;

B.Visible:=False;
E5.Visible:=False;
End;

end;

procedure TMainFrm.AClick(Sender: TObject);
begin
if SaveDlg.Execute then
E3.Text:=SaveDlg.Filename;
end;

procedure TMainFrm.Timer1Timer(Sender: TObject);
begin
If P1.Color=clBtnFace Then P1.Color:=clRed Else P1.Color:=clBtnFace;
If P2.Color=clBtnFace Then P2.Color:=clRed Else P2.Color:=clBtnFace;
StatusBar1.Panels[0].Text:=FOrmatDatetIme('Dd/mm/yyyy',Date);
StatusBar1.Panels[1].Text:=FOrmatDatetIme('hh:mm:ss',time);
end;

procedure TMainFrm.FormShow(Sender: TObject);
begin
PageControl1.ActivePageIndex:=0;
Tx.Enabled:=False;
end;

function BrowseForFolder(var Folder: String; Title: String): Boolean;
var
BrowseInfo: TBrowseInfo;
ItemIDList: PItemIDList;
DisplayName: array[0..MAX_PATH] of Char;
begin
Result :=False;

FillChar(BrowseInfo, SizeOf(BrowseInfo), #0);

with BrowseInfo do begin
hwndOwner :=Application.Handle;
pszDisplayName :=@DisplayName[0];
lpszTitle :=PChar(Title);
ulFlags :=BIF_RETURNONLYFSDIRS;
end;

ItemIDList :=SHBrowseForFolder(BrowseInfo);

if Assigned(ItemIDList) then
if SHGetPathFromIDList(ItemIDList, DisplayName) then begin
Folder :=DisplayName;
Result :=True;
end;
end;

procedure TMainFrm.CheckBox1Click(Sender: TObject);

begin
CInFileBox.Text:='';
if CheckBox1.Checked Then
Begin
CInBrowseBtn.Caption:='Folder';
E5.Visible:=True;

End Else
Begin
CInBrowseBtn.Caption:='File';
E5.Visible:=False;
ENd;
end;

procedure TMainFrm.Button1Click(Sender: TObject);
var
NewFileName: string;
Msg: string;
NewFile: TFileStream;
OldFile: TFileStream;
begin
NewFileName :=ExtractFilePath(Application.ExeName) +ExtractFileName(CInFileBox.Text);
Msg :=Format('Copy %s to %s?', [CInFileBox.Text, NewFileName]);
if MessageDlg(Msg, mtCustom, mbOKCancel, 0) =mrOK then
begin
OldFile :=TFileStream.Create(CInFileBox.Text, fmOpenRead or fmShareDenyWrite);
try
NewFile :=TFileStream.Create(NewFileName, fmCreate or fmShareDenyRead);

try
NewFile.CopyFrom(OldFile, OldFile.Size);
finally
FreeAndNil(NewFile);
end;
finally
FreeAndNil(OldFile);
end;
end;

end;

procedure TMainFrm.BClick(Sender: TObject);
begin
FDeFolder.ShowModal;
E5.Text:=FDeFolder.DirectoryListBox1.Directory;
end;

procedure TMainFrm.TxTimer(Sender: TObject);
begin
Waktu:=Waktu+1;
Application.ProcessMessages;
end;
end.


Lampiran 2
LISTING ALGORITMA TWOFISH

Unit UTwofish;
Interface
Procedure AturKunci(const AturKunci:String);
Procedure TambahBit;
Procedure Enkrip_File(const fname1, fname2:string; const KeyWord:String);
Procedure Dekrip_File(const fname1, fname2:string; const KeyWord:String; checking:boolean);
Implementation
Uses
Sysutils, dialogs, forms;
Type
Word =Array[0..3]of byte;
Empword=Array[0..3]of Word;
Block16 =Array[0..3]of LWord;
Mat4x4=Array[0..3, 0..3]of byte;
Mat4x8=Array[0..3, 0..7]of byte;
const
t0q0 : Array[0..15]of Byte=
( $08, $01, $07, $0D, $06, $0F, $03, $02, $00, $0B, $05, $09, $0E, $0C, $0A, $04);
t1q0 : Array[0..15]of Byte=
( $0E, $0C, $0B, $08, $01, $02, $03, $05, $0F, $04, $0A, $06, $07, $00, $09, $0D);
t2q0 : Array[0..15]of Byte=
( $0B, $0A, $05, $0E, $06, $0D, $09, $00, $0C, $08, $0F, $03, $02, $04, $07, $01);
t3q0 : Array[0..15]of Byte=
( $0D, $07, $0F, $04, $01, $02, $06, $0E, $09, $0B, $03, $00, $08, $05, $0C, $0A);
t0q1 : Array[0..15]of Byte=
( $02, $08, $0B, $0D, $0F, $07, $06, $0E, $03, $01, $09, $04, $00, $0A, $0C, $05);
t1q1 : Array[0..15]of Byte=
( $01, $0E, $02, $0B, $04, $0C, $03, $07, $06, $0D, $0A, $05, $0F, $09, $00, $08);
t2q1 : Array[0..15]of Byte=
( $04, $0C, $07, $05, $01, $06, $09, $0A, $00, $0E, $0D, $08, $02, $0B, $03, $0F);
t3q1 : Array[0..15]of Byte=
( $0B, $09, $05, $01, $0C, $03, $0D, $0E, $06, $04, $07, $0F, $02, $00, $08, $0A);

M5B :Array[0..255]of Byte=(
$00, $5B, $B6, $ED, $05, $5E, $B3, $E8, $0A, $51, $BC, $E7, $0F, $54, $B9, $E2,
$14, $4F, $A2, $F9, $11, $4A, $A7, $FC, $1E, $45, $A8, $F3, $1B, $40, $AD, $F6,
$28, $73, $9E, $C5, $2D, $76, $9B, $C0, $22, $79, $94, $CF, $27, $7C, $91, $CA,
$3C, $67, $8A, $D1, $39, $62, $8F, $D4, $36, $6D, $80, $DB, $33, $78, $85, $DE,
$50, $0B, $E6, $BD, $55, $0E, $E3, $B8, $5A, $01, $EC, $B7, $5F, $04, $E9, $B2,
$44, $1F, $F2, $A9, $41, $1A, $F7, $AC, $4E, $15, $F8, $A3, $4B, $10, $FD, $A6,
$78, $23, $CE, $95, $7D, $26, $CB, $90, $72, $29, $C4, $9F, $77, $2C, $C1, $9A,
$6C, $37, $DA, $81, $69, $32, $DF, $84, $66, $3D, $D0, $8B, $63, $38, $D5, $8E,
$A0, $FB, $16, $4D, $A5, $FE, $13, $48, $AA, $F1, $1C, $47, $AF, $F4, $19, $42,
$B4, $EF, $02, $59, $B1, $EA, $07, $5C, $BE, $E5, $08, $53, $BB, $E0, $0D, $56,
$88, $D3, $3E, $65, $8D, $D6, $3B, $60, $82, $D9, $34, $6F, $87, $DC, $31, $6A,
$9C, $C7, $2A, $71, $99, $C2, $2F, $74, $96, $CD, $20, $7B, $93, $C8, $25, $7E,
$F0, $AB, $46, $1D, $F5, $AE, $43, $18, $F4, $A1, $4C, $17, $FF, $A4, $49, $12,
$E4, $BF, $52, $09, $E1, $BA, $57, $0C, $EE, $B5, $58, $03, $EB, $B0, $5D, $06,
$D8, $83, $6E, $35, $DD, $86, $6B, $30, $D2, $89, $64, $3F, $D7, $8C, $61, $3A,
$CC, $97, $7A, $21, $C9, $92, $7F, $24, $C6, $9D, $70, $2B, $C3, $98, $75, $2E);

MEF :Array[0..255]of Byte=(
$00, $EF, $B7, $58, $07, $E8, $B0, $5F, $0E, $E1, $B9, $56, $09, $E6, $BE, $51,
$1C, $F3, $AB, $44, $1B, $F4, $AC, $43, $12, $FD, $A5, $4A, $15, $FA, $A2, $4D,
$38, $D7, $8F, $60, $3F, $D0, $88, $67, $36, $D9, $81, $6E, $31, $DE, $86, $69,
$24, $CB, $93, $7C, $23, $CC, $94, $7B, $2A, $C5, $9D, $72, $2D, $C2, $9A, $75,
$70, $9F, $C7, $28, $77, $98, $C0, $2F, $7E, $91, $C9, $26, $79, $96, $CE, $21,
$6C, $83, $DB, $34, $6B, $84, $DC, $33, $62, $8D, $D5, $3A, $65, $8A, $D2, $3D,
$48, $A7, $FF, $10, $4F, $A0, $F8, $17, $46, $A9, $F1, $1E, $41, $AE, $F6, $19,
$54, $BB, $E3, $0C, $53, $BC, $E4, $0B, $5A, $B5, $ED, $02, $5D, $B2, $EA, $05,
$E0, $0F, $57, $B8, $E7, $08, $50, $BF, $EE, $01, $59, $B6, $E9, $06, $5E, $B1,
$FC, $13, $4B, $A4, $FB, $14, $4C, $A3, $F2, $1D, $45, $AA, $F5, $1A, $42, $AD,
$D8, $37, $6F, $80, $DF, $30, $68, $87, $D6, $39, $61, $8E, $D1, $3E, $66, $89,
$C4, $2B, $73, $9C, $C3, $2C, $74, $9B, $CA, $25, $7D, $92, $CD, $22, $7A, $95,
$90, $7F, $27, $C8, $97, $78, $20, $CF, $9E, $71, $29, $C6, $99, $76, $2E, $C1,
$8C, $63, $3B, $D4, $8B, $64, $3C, $D3, $82, $6D, $35, $DA, $85, $6A, $32, $DD,
$A8, $47, $1F, $F0, $AF, $40, $18, $F7, $A6, $49, $11, $FE, $A1, $4E, $16, $F9,
$B4, $5B, $03, $EC, $B3, $5C, $04, $EB, $BA, $55, $0D, $E2, $BD, $52, $0A, $E5);

RS :Mat4x8=(($01, $A4, $55, $87, $5A, $58, $DB, $9E),
($A4, $56, $82, $F3, $1E, $C6, $68, $E5),
($02, $A1, $FC, $C1, $47, $AE, $3D, $19),
($A4, $55, $87, $5A, $58, $DB, $9E, $03));
var
m : Array[0..31]of byte;
JadKunci : Array[0..39]of LWord;
TambahPanjang : byte;
VectorMe, VectorMo : EmpWord;
VectorS : EmpWord;
Function gf(a,b,p:Lword):Lword;
var
hasil:Lword;
begin
hasil:=0;
while (a<>0) do
begin
if (a and 1)=1 then hasil:=hasil xor b;
a:=a shr 1;
b:=b shl 1;
if (b and $100)=$100 then b:=b xor p;
end;
Result:=hasil and $FF;
end;
procedure Persiapan_VectorM;
var
i, j :byte;
begin
fillchar(VectorMe, sizeof(VectorMe), 0);
fillchar(VectorMo, sizeof(VectorMo), 0);
For i :=0 to PanjangKunci-1 do
For j :=0 to 3 do
begin
VectorMe [i,j] :=m[4*(2*i)+j];
VectorMo [i,j] :=m[4*(2*i+1)+j];
end;
end;

procedure Hitung_VectorS;
var
I, baris, kolom :byte;
begin
fillchar(VectorS, sizeof(VectorS),0);
for i:=0 to PanjangKunci-1 do
for baris:=0 to 3 do
for kolom:=0 to 7 do
VectorS[(PanjangKunci-1)-i,baris]:=VectorS[(PanjangKunci-1)-I,baris] xor gf_mult(RS[baris,
kolom], m[8*i+kolom], 333);
end;
function h(x:LWord; L:EmpWord) :LWord;
var
y, Output :Word;
OutputL :Lword;
q0 : begin
a[0] :=x/16;
b[0] :=x;
a[1] :=a[0] XOR b[0];
b[1] :=a[0] XOR b[0] shr 1 xor 8[a[0]];
a[2] :=t0q0[a[1]];
b[2] : =t1q0[b[1]];
a[3] :=a[2] XOR b[2];
b[3] :=a[2] XOR b[2] shr 1 xor 8[a[2]];
a[4] :=t2q0[a[3]];
b[4] :=t3q0[b[3]];
y :=16[b[4]] +a[4]
end
q1 : begin
a[0] :=x/16;
b[0] :=x;
a[1] :=a[0] XOR b[0];
b[1] :=a[0] XOR b[0] shr 1 xor 8[a[0]];
a[2] :=t0q1[a[1]];
b[2] : =t1q1[b[1]];
a[3] :=a[2] XOR b[2];
b[3] :=a[2] XOR b[2] shr 1 XOR 8[a[2]];
a[4] :=t2q1[a[3]];
b[4] :=t3q1[b[3]];
y :=16[b[4]] +a[4]
end
case PanjangKunci of
2:begin
y[0] :=q1[q0[q0[y[0]XOR L[1,0]]XOR L[0,0]]];
y[1] :=q0[q0[q1[y[1]XOR L[1,0]]XOR L[0,0]]];
y[2] :=q1[q1[q0[y[2]XOR L[1,0]]XOR L[0,0]]];
y[3] :=q0[q1[q1[y[3]XOR L[1,0]]XOR L[0,0]]];
End;
3:begin
y[0] :=q1[q0[q0[q1[y[0] XOR L[2,0]]XOR L[1,0]]XOR L[0,0]]];
y[1] :=q0[q0[q1[q1[y[1] XOR L[2,0]]XOR L[1,0]]XOR L[0,0]]];
y[2] :=q1[q1[q0[q0[y[2] XOR L[2,0]]XOR L[1,0]]XOR L[0,0]]];
y[3] :=q0[q1[q1[q0[y[3] XOR L[2,0]]XOR L[1,0]]XOR L[0,0]]];
end;
4:begin

y[0] :=q1[q0[q0[q1[q1[y[0] XOR L[3,0]] XOR L[2,0]] XOR L[1,0]] XOR L [0,0]]];
y[1] :=q0[q0[q1[q1[q0[y[1] XOR L[3,0]] XOR L[2,0]] XOR L[1,0]] XOR L [0,0]]];
y[2] :=q1[q1[q0[q0[q0[y[2] xor L[3,0]] XOR L[2,0]] XOR L[1,0]] XOR L [0,0]]];
y[3] :=q0[q1[q1[q0[q1[y[3] xor L[3,0]] XOR L[2,0]] XOR L[1,0]] XOR L [0,0]]];
end;
end;
fillchar(Output, sizeof(Output), 0);
Output[0] :=(y[0] XOR (MEF[y[1]]) XOR (M5B[y[2]]) XOR (M5B[y[3]]));
Output[1] :=(M5B[y[0]] XOR (MEF[y[1]]) XOR (MEF[y[2]]) XOR (y[3]));
Output[2] :=(MEF[y[0]] XOR M5B[y[1]]) XOR y[2] XOR (MEF[y[3]]);
Output[3] :=(MEF[y[0]] XOR y[1] XOR (MEF[y[2]]) XOR (M5B[y[3]]));
move(Output[0], OutputL, 4);
Result :=OutputL;
end;
Function RoL (x:LWord; n:byte) :LWord;
begin
RoL:=(x shl n) OR (x shr (32-n));
end;
Function RoR (x:LWord; n:byte) :LWord;
begin
RoR:=(x shr n) OR (x shl (32-n));
end;
procedure Hitung_JadKunci;
var
p :LWord;
Ai, Bi, K2i, K2i1 :LWord;
i :byte;
begin
fillchar(K2i, sizeof(K2i),0);
fillchar(K2i1, sizeof(K2i1),0);
p:=0;
for i:=0 to 19 do
begin
fillchar(p,sizeof(p),0);
p:=p+$01010101;
Ai:=h(p, VectorMe);

p:=p+$01010101;
Bi:=RoL(h(p, VectorMo), 8);

JadKunci[i+i]:=Ai+Bi;
JadKunci[i+i+1]:=RoL(Bi+Bi+Ai, 9);
end;
end;
procedure AturKunci(const KeyWord:String);
begin
fillchar(m, sizeof(m), 0);
move(KeyWord[1], m[0], Length(KeyWord));
case Length(KeyWord) of
0..16 :TambahPanjang:=2;
17..24 :TambahPanjang:=3;
25..32 :TambahPanjang:=4;
end;

Persiapan_VectorM;

Hitung_VectorS;
Hitung_JadKunci;
end;
procedure TambahBit;
begin
fillchar(m, sizeof(m), 0);
fillchar(VectorMe, sizeof(VectorMe), 0);
fillchar(VectorMo, sizeof(VectorMo), 0);
fillchar(VectorS, sizeof(VectorS), 0);
fillchar(JadKunci, sizeof(JadKunci), 0);
end;
procedure InputWhitening(var Output:Block16);
begin
Output[0] :=Output[0] XOR JadKunci[0];
Output[1] :=Output[1] XOR JadKunci[1];
Output[2] :=Output[2] XOR JadKunci[2];
Output[3] :=Output[3] XOR JadKunci[3];
end;
procedure OutputWhitening(var Output:Block16);
begin
Output[0] :=Output[0] XOR JadKunci[4];
Output[1] :=Output[1] XOR JadKunci[5];
Output[2] :=Output[2] XOR JadKunci[6];
Output[3] :=Output[3] XOR JadKunci[7];
end;
procedure SwapBlock(var Blok:Block16);
var
Temp :Array[0..1]of LWord;
begin
Temp[0] :=Blok[0];
Temp[1] :=Blok[1];
Blok[0] :=Blok[2];
Blok[1] :=Blok[3];
Blok[2] :=Temp[0];
Blok[3] :=Temp[1];
end;
Function Enc_Block(Blok:Block16) :Block16;
var
i :byte;
T0, T1 :LWord;
begin
InputWhitening(Blok);
for i:=0 to 7 do
begin
T0 :=h(Blok[0], Vectors);
T1 :=h(RoL(Blok[1], 8), VectorS);
F0 :=T0+T1+J adKunci[4*i+8];
F1 :=T0+T1+T1+J adKunci[4*i+9];
blok[2] :=RoR (T0 xor blok[2], 1);
blok[3] :=T1 xor RoL (blok[3], 1);

T0 :=h(blok[2], VectorS);
T1 :=h(RoL(Blok[3], 8), VectorS);
F0 :=T0+T1+J adKunci[4*i+10];
F1 :=T0+T1+T1+J adKunci[4*i+11];

blok[0] :=RoR (T0 xor blok[0], 1);
blok[1] :=T1 xor RoL (blok[1], 1);
end;
SwapBlock(Blok);
OutputWhitening(Blok);
BlokEnkrip:=Blok;
end;
Function Dec_Block(Blok:Block16) :Block16;
var
i :byte;
T0, T1 :LWord;
begin
OutputWhitening(Blok);
for i :=7 downto 0 do
begin
T0 :=h(Blok[0], VectorS);
T1 :=h(RoL(Blok[1], 8), VectorS);
F0 :=T0+T1+J adKunci[4*i+10];
F1 :=T0+T1+T1+J adKunci[4*i+11];
blok[2] :=RoL (blok[2], 1) xor T0;
blok[3] :=RoR ((blok[3] xor T1), 1);

T0 :=h(blok[2], VectorS);
T1 :=h(RoL(Blok[3], 8), VectorS);
F0 :=T0+T1+J adKunci[4*i+8];
F1 :=T0+T1+T1+J adKunci[4*i+9];
blok[0] :=RoL (blok[0], 1) xor T0;
blok[1] :=RoR ((blok[1] xor T1), 1);
end;
SwapBlock(Blok);
InputWhitening(Blok);
BlokDekrip:=Blok;
end;

Vous aimerez peut-être aussi