PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
ANALISIS EFISIENSI ALGORITMA KRIPTOGRAFI BLOWFISH MENGGUNAKAN NOTASI BIG-O BIG O DALAM PROSES ENKRIPSI DEKRIPSI FILE
Skripsi
Diajukan untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Komputer Program Studi Teknik Informatika
Oleh: Yohanes Catur Teguh Raharjo 085314081
PROGRAM STUDI TEKNIK INFORMATIKA JURUSAN TEKNIK INFORMATIKA FAKULTAS SAINS DAN TEKNOLOGI UNIVERSITAS SANATA DHARMA YOGYAKARTA 2015 i
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
EFFICIENCY ANALYSIS OF BLOWFISH CRYPTOGRAPHY CRYPTOGRAPH ALGORITHM USING BIG-O NOTATION DURING FILE ENCRYPTION ENCRYPTI AND DECRYPTION PROCESS
A Thesis Presented as Partial Fullfillment of the Requirements To Obtain the Sarjana Komputer Degree In Study Program of Informatics Engineering
By : Yohanes Catur Teguh Raharjo 085314081
INFORMATICS ENGINEERING STUDY PROGRAM DEPARTMENT OF INFORMATICS ENGINEERING FACULTY OF SCIENCE AND TECHNOLOGY SANATA DHARMA UNIVERSITY YOGYAKARTA 2015
ii
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
iii
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
iv
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
“JIKA KITA BERUSAHA, MAKA TUHAN AKAN MEMBERIKAN JALAN”
“KEGAGALAN HANYA TERJADI BILA KITA MENYERAH”
Skripsi ini saya persembahkan untuk:
Keluarga, Guru dan Dosen, serta Teman-Teman Tercinta v
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
vi
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
ANALISIS EFISIENSI ALGORITMA KRIPTOGRAFI BLOWFISH MENGGUNAKAN NOTASI BIG-O DALAM PROSES ENKRIPSI DEKRIPSI FILE
Yohanes Catur Teguh Raharjo
ABSTRAK Dalam kriptografi terdapat berbagai macam sandi untuk mengamankan suatu data.
Salah satunya adalah algoritma kriptografi blowfish yang bisa
digunakan untuk proses enkripsi dan dekripsi, sehingga data yang dikirim maupun diterima aman. Penelitian ini bertujuan mengetahui metode enkripsi dan dekripsi menggunakan algoritma kriptografi simetri blowfish dengan sebuah sistem. Selain itu
dibuktikan
efisiensi
algoritma
kriptografi
simetri
blowfish
dengan
menggunakan notasi Big-O. Data yang dipakai adalah file berekstensi (.txt).
Kata Kunci: blowfish, enkripsi, dekripsi, Big-O
vii
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
EFFICIENCY ANALYSIS OF BLOWFISH CRYPTOGRAPHY ALGORITHM USING BIG-O NOTATION DURING FILE ENCRYPTION AND DECRYPTION PROCESS
Yohanes Catur Teguh Raharjo
ABSTRACT In cryptography there are many kind of codes to secure the data. One of them is blowfish algorithm, that can be used for encryption and decryption so the sent and received data are safe. This research aims to know how encryption and decryption with blowfish symmetric cryptography algorithm work and be implemented in a system. More else, efficiency of blowfish symmetric cryptography algorithm using big-O notation is proven, which data that being used is .txt file.
Keywords: blowfish, encryption, decryption, Big-O
viii
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
ix
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
KATA PENGANTAR
Puji dan syukur kepada Tuhan yang Maha Esa, karena pada akhirnya penulis dapat menyelesaikan penelitian tugas akhir ini yang berjudul “Analisis Efisiensi Algoritma Kriptografi Blowfish Menggunakan Notasi Big-O Dalam Proses Enkripsi Dekripsi File”. Penelitian ini tidak akan selesai dengan baik tanpa adanya dukungan, semangat, dan motivasi yang telah diberikan oleh banyak pihak. Untuk itu, penulis ingin mengucapkan terima kasih kepada: 1. Ibu Dr. Anastasia Rita Widiarti selaku ketua program studi Teknik Informatika. 2. Bapak Iwan Binanto, M.Cs. selaku dosen pembimbing atas kesabaran, waktu, dan kebaikan yang telah diberikan. 3. Bapak Puspaningtyas Sanjoyo Adi S.T., M.T. dan Bapak Agung Hernawan, S.T., M.Kom. selaku dosen penguji atas kritik dan saran yang telah diberikan. 4. Seluruh staff pengajar Prodi Teknik Informatika Fakultas Sains dan Teknologi Universitas Sanata Dharma. 5. Orang Tua, Kakak, dan Saudara Tercinta atas kasih sayang, semangat, dan dukungan yang tak henti-hentinya diberikan kepada penulis. 6. Teman-Teman Seperjuangan, Danang, Apin, Dias, Ina, Tina, Iben, terima kasih atas segala bantuan dan dukungannya.
x
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
7.
Teman-teman
Prodi
Teknik
Informatika
angkatan
2008,
atas
kebersamaannya selama penulis menjalani masa studi. 8. Pihak-pihak lain yang turut membantu penulis dalam menyelesaikan tugas akhir ini, yang tidak dapat disebutkan satu per satu. Penelitian tugas akhir ini masih memiliki banyak kekurangan. Untuk itu, penulis sangat membutuhkan saran dan kritik yang bersifat membangun. Semoga penelitian tugas akhir ini dapat membawa manfaat bagi semua pihak.
Yogyakarta, September 2015
Penulis
xi
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
DAFTAR ISI
HALAMAN JUDUL……………………………………………………….……i HALAMAN JUDUL (INGGRIS)………………………………………………ii HALAMAN PERSETUJUAN …………………………………..……………..iii HALAMAN PENGESAHAN…………………………………..……………….iv HALAMAN MOTTO…………………………………………..………………..v HALAMAN PERSEMBAHAN……………………………...………………….v PERNYATAAN KEASLIAN KARYA…………………..…………….………vi ABSTRAK……………………………………………………...……………….vii ABSTRACT……………………………………………..………….…………..viii LEMBAR PERSETUJUAN PUBLIKASI……………......……………………ix KATA PENGANTAR…………...……………………………………………….x DAFTAR ISI.........................................................................................................xii DAFTAR TABEL.................................................................................................xv DAFTAR GAMBAR...........................................................................................xvi BAB I : PENDAHULUAN.....................................................................................1 1.1.Latar Belakang.............................................................................................1 1.2.Rumusan Masalah........................................................................................2 1.3.Batasan Masalah...........................................................................................2 1.4.Tujuan..........................................................................................................3 1.5.Manfaat........................................................................................................3 1.6.Metodologi Peneliti..................................................................................... 4 xii
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
1.7.Sistematika Penulisan Laporan Tugas Akhir...............................................5 BAB II : LANDASAN TEORI.............................................................................6 2.1. Konsep Dasar Kriptografi...........................................................................6 2.2.Aspek-aspek Keamanan Kriptografi............................................................7 2.3.Algoritma Kriptografi..................................................................................9 2.3.1.Alogoritma Kriptografi Klasik............................................................9 2.3.2.Algoritma Kriptografi Modern..........................................................10 2.3.2.1.Algoritma Kunci Simetris..................................................10 2.3.2.1.1.Reversibility algoritma kunci simetri..............11 2.3.2.1.2.Dekripsi chiper block......................................11 2.4.Algoritma Blowfish..............................................................................14 2.5.Enkripsi Algoritma Blowfish...............................................................18 2.5.1.Enkripsi Algoritma Blowfish................................................18 2.6.Dekripsi Algoritma Blowfish...............................................................22 2.6.1.Dekripsi Algoritma Blowfish................................................22 2.7.Notasi Big-O........................................................................................24 2.7.1.Pengenalan Notasi Big-O......................................................24 2.7.2.Penggunaan Notasi Big-O.....................................................25 2.7.3.Bentuk atau Kobinasi Notasi Big-O......................................29 BAB III . ANALISA DAN PERANCANGAN.............................................30 3.1. Analisa Sistem...........................................................................................30 3.1.1.Analisa kebutuhan Sistem.................................................................30 3.1.2.Analisa Teknologi.............................................................................31 xiii
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
3.2.Perancangan Sistem...................................................................................31 3.2.1. Flowchart Diagram........................................................................31 3.2.1.1.Diagram alir enkripsi Blowfish..........................................32 3.2.1.2.Diagram alir dekripsi Blowfish..........................................32 3.2.2. Perancangan Antarmuka Pengguna................................................33 3.2.2.1.Menu/tampilan halaman utama..........................................33 3.2.2.2.Tampilan pilihan Menu......................................................33 3.3.Perancangan Pengujian........................................................................34 BAB IV IMPLEMENTASI DAN PEMBAHASAN....................................35 4.1. Implementasi.....................................................................................35 4.2. Pembahasan.......................................................................................42 4.2.1. Penjelasan Sistem......................................................................42 4.2.2. Proses Enkripsi dan Dekripsi.....................................................54 4.2.3. Pengujian Aplikasi.....................................................................56 4.2.4. Uji Algoritma.............................................................................57 BAB V PENUTUP..........................................................................................68 5.1 Kesimpulan..........................................................................................68 5.2.Saran.....................................................................................................68 DAFTAR PUSTAKA...........................................................................................70 LAMPIRAN..........................................................................................................71
xiv
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
DAFTAR TABEL Tabel 3.1.
Keterangan Spesifikasi hardware dan software
Halaman 31
Tabel Hasil Pengujian Terhadap Kebutuhan Fungsional 4.1.
61 Tabel Waktu Enkripsi dan Dekripsi Algoritma Blowfish
4.2.
62
xv
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
DAFTAR GAMBAR
Gambar 2.1. 2.2. 2.3.
Keterangan Gambar Cryptosystem
Halaman 7
Gambar Algoritma Simetri
13
Gambar Algoritma Simetri
13
Gambar Jaringan Feistel 2.4.
21 Gambar Fungsi F
2.5.
22 Gambar diagram skema dekripsi algoritma Blowfish
2.6. 2.7.
24 Gambar Big O notation f(n) ∈ O(g(n))
25
Gambar Grafik Kompleksitas Algoritma Metode Big-O 2.8.
27
(1) Gambar Grafik Kompleksitas Algoritma Metode Big-O
2.9.
28
(2) Gambar Implementasi Halaman Utama
4.1.
35 Gambar halaman input kunci
4.2.
36
Gambar peringatan textbox kunci kosong 4.3.
36 xvi
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Gambar halaman input file 4.4. 4.5.
37 Gambar memilih file input
37
Gambar file input 4.6.
38 Gambar button enkripsi
4.7.
38 Gambar button dekripsi
4.8.
39 Gambar file output
4.9.
39 Gambar simpan file
4.10.
40 Gambar file Input
4.11.
40 Gambar waktu proses
4.12.
41 Gambar Grafik Waktu Enkripsi dan Dekripsi Algoritma
4.13.
65
Blowfish Gambar Grafik Kompleksitas Metode Big-O Kelas
4.14.
66
Linear Gambar Hasil Normalisasi Grafik Algoritma Blowfish
4.15.
67
xvii
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
BAB I PENDAHULUAN
1.1. LATAR BELAKANG : Dengan semakin berkembangnya teknologi komputer, sistem multiuser memungkinkan suatu data dapat dibagikan kepada komputer atau user lain dalam suatu jaringan komputer. Ketika user terhubung pada suatu jaringan, pengiriman pesan akan mudah untuk disadap oleh pihak yang tidak berhak. Pengiriman pesan teks jika tidak mengalami enkripsi maka informasi pesan teks menjadi sangat rentan untuk diketahui, diambil atau bahkan dimanipulasi dan disalahgunakan oleh pihak yang tidak berhak. Oleh karena itu informasi pesan harus dirahasiakan dan perlu mendapat perlindungan, sehingga data dapat terjamin dan tidak sembarang orang yang bisa membuka data tersebut. Untuk mengatasi pengiriman data dengan aman dalam proses pengiriman pesan, salah satu solusi yang dapat diambil adalah dengan cara penyandian atau kriptografi dengan proses enkripsi dan dekripsi. Dengan cara ini sebuah data akan disandikan
berdasarkan
metode
tertentu
sehingga
orang
yang
tidak
berkepentingan dan tidak memiliki hak akses akan mengalami kesulitan untuk melakukan hal-hal yang tidak diinginkan. Sebaliknya ketika data tersebut akan diakses kembali oleh orang yang berhak maka hasil penyandian tersebut kemudian akan dikembalikan ke bentuk semula.
1
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Algoritma Kriptografi yang akan digunakan dalam sistem keamanan data selain pertimbangan kekuatan terhadap serangan cryptanalis yang tidak kalah penting adalah pertimbangan kecepatan serta efisiensi suatu algoritma. Maka penulis memilih algoritma kriptografi blowfish untuk dilakukan pengujian dengan notasi Big-O, sehingga dapat dibuktikan tingkat efisiensi algoritma tersebut.
1.2. RUMUSAN MASALAH : Berdasarkan latar belakang permasalahan diatas, dapat dirumuskan 1. Bagaimana merancang algoritma kriptografi blowfish menggunakan java? 2. Bagaimana
menguji
efisiensi
algoritma
enkripsi
blowfish
menggunakan notasi Big-O ?
1.3. BATASAN MASALAH : Batasan masalah dalam penulisan skripsi ini adalah 1. Data yang akan diujicobakan pada algoritma blowfish merupakan data text bukan suara atau gambar. 2. Program aplikasi untuk algoritma blowfish menggunakan bahasa pemrograman Java yang berbasis desktop.
2
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
1.4. TUJUAN : Tujuan yang ingin dicapai dalam penulisan skripsi ini adalah 1. Mengetahui konsep dasar kriptografi serta implementasi dari algoritma algoritma blowfish dalam proses enkripsi dan dekripsi pesan teks. 2. Mengetahui pengujian efisiensi algoritma kriptografi blowfish dengan menggunakan notasi Big-O. 3. mengetahui kelebihan dan kekurangan penggunaan algoritma blowfish.
1.5. MANFAAT : Manfaat yang diperoleh dari penulisan skripsi ini adalah 1. Mengetahui analisa terkait tentang cara kerja algoritma kriptografi blowfish. 2. Mengetahui analisa efisiensi algoritma kriptografi blowfish menggunakan notasi big-O.
3
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
1.6. METODOLOGI PENELITIAN
Metodologi dan langkah-langkah yang digunakan dalam pelaksanaan tugas akhir ini adalah sebagai berikut : a. Studi Literatur Yaitu pengumpulan data yang penulis ambil dari buku-buku, situs-situs di internet dan sumber lainnya yang menunjang dalam penulisan tugas akhir ini. b. Analisan dan perancangan perangkat lunak Merupakan tahap menganalisis hal-hal yang diperlukan dalam pelaksanaan pembuatan perangkat lunak. Dalam hal ini dilakukan analisis data-data yang sudah terkumpul, yaitu dengan studi literature, dengan demikian diperoleh informasi data yang dibutuhkan dalam menganalisa dan pembuatan perangkat lunak. c. Implementasi dan Pengujian sistem Yaitu
tahapan
dimana penulis
melakukan
implemetasi
program,
melakukan uji coba terhadap algoritma Blowfish, untuk mengetahui besar data dan waktu proses dalam proses enkripsi dan dekripsi. Selanjutnya akan dilakukan analisa dengan menggunakan notasi Big-O. Analisis dilakukan untuk mencari kecepatan aplikasi dengan masukan file txt yang mempunyai besar berbeda-beda. Pengujian dilakukan dengan cara mengenkripsi file sebanyak mungkin dengan besar file yang berbeda-beda. Dengan melihat data-data yang sudah diuji. Hasil pengujian digambarkan
4
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
dengan table hasil pengujian.
Sehingga dapat dibuktikan efisiensi
algoritma kriptografi blowfish dengan menggunakan notasi Big-O.
1.7.Sistematika Penulisan Laporan Tugas Akhir Sistematika penulisan laporan tugas akhir yang disusun adalah sebagai berikut: BAB I
PENDAHULUAN Bab ini terdiri atas latar belakang, rumusan masalah, batasan masalah, tujuan, manfaat dari penulisan, batasan masalah, metodologi penelitian, dan sistem penulisan tugas akhir.
BAB II LANDASAN TEORI Bab ini menjelaskan mengenai teori yang berkaitan dengan dengan judul/ masalah tugas akhir. BAB III ANALISA DAN PERANCANGAN Bab ini membahas langkah-langkah yang akan dilakukan dalam penelitian, perancangan perangkat lunak, serta proses pengujian perangkat lunak. BAB IV IMPLEMENTASI DAN PEMBAHASAN Bab ini membahas mengenai implementasi dalam program, pengujian dan hasil analisa serta pembahasan. BAB V KESIMPULAN DAN SARANA Bab ini berisi kesimpulan dari tugas akhir ini dan saran-saran untuk pengembangan dan perbaikan dari tugas akhir ini.
5
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
BAB II LANDASAN TEORI
2.1. Konsep Dasar Kriptografi Kriptografi adalah suatu ilmu atau seni mengamankan pesan, dan dilakukan oleh cryptographer. Sedangkan cryptanalys adalah suatu ilmu dan seni membuka (breaking) ciphertext dan orang yang melakukannya disebut cryptanalys. Ditinjau dari terminologinya, kata kriptografi berasal dari bahasa Yunani yaitu kryptos, ‘menyembunyikan’, dan graphein ‘menulis;, sehingga dapat
didefinisikan
sebagai
ilmu
yang
mengubah
informasi
dari
keadaan/bentuk normal (dapat dipahami) menjadi bentuk yang tidak dapat dipahami. Algoritma Kriptografi selalu terdiri dari dua bagian, yaitu enkripsi dan dekripsi. Enkripsi (encryption) merupakan proses yang dilakukan untuk mengubah pesan yang tidak disandikan (plaintext atau cleartext) ke dalam bentuk yang tidak dapat dibaca (ciphertext) Sedangkan dekripsi (decryption) adalah proses kebalikannya. Proses enkripsi dan dekripsi diatur oleh satu atau beberapa kunci kriptografi. Dalam suatu sistem dimana terdapat algoritma kriptografi, ditambah seluruh kemungkinan plaintext, ciphertext dan kuncikuncinya disebut kriptosistem(cryptosystem atau cryptographic system). Secara sederhana proses kriptografi dapat digambarkan sebagai berikut[2]:
6
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Gambar 2.1. Proses Enkripsi dan Dekripsi Sederhana [2]
Setiap cryptosystem yang baik memiliki karakteristik sebagai berikut: a. Keamanan sistem terletak pada kerahasiaan kunci dan bukan pada kerahasian algoritma yang digunakan. b. Cryptosystem yang baik memiliki ruang kunci (keyspace) yang besar. c. Cryptosystem yang baik akan menghasilkan ciphertext yang terlihat acak dalam seluruh test statistik yang dilakukan. d. Cryptosystem yang baik mampu menahan seluruh serangan yang telah dikenal sebelumnya. Namun demikian, perlu diperhatikan bahwa bila suatu cryptosystem berhasil memenuhi seluruh karakteristik di atas, belum tentu ia merupakan sistem yang baik. Banyak cryptosystem lemah yang terlihat baik pada awalnya. Kadang kala untuk menunjukkan bahwa suatu cryptosystem kuat atau baik dapat dilakukan dengan menggunakan pembuktian matematika.[2]
2.2. Aspek-aspek Keamanan Kriptografi Kriptografi tidak hanya memberikan kerahasiaan dalam telekomunikasi, namun juga melibatkan sejumlah aspek, yaitu[2]:
7
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
a. Authentication. Penerima pesan dapat memastikan keaslian pengirimnya. Penyerang tidak dapat perpura-pura sebagai orang lain. b. Integrity.
Penerima harus dapat memeriksa apakah pesan telah
dimodifikasi ditengah dijalan atau tidak. Seorang penyusup seharusnya tidak dapat memasukan tambahan ke dalam pesan, mengurangi atau mengubah pesan selama data berada di perjalanan. c. Nonrepudiation. Pengirim seharusnya tidak dapat mengelak bahwa dialah pengirim pesan yang sesungguhnya. Tanpa kriptografi, seseorang dapat mengelak bahwa dia yang mengirim email yang sesungguhnya. d. Authority. Informasi yang berada pada sistem jaringan seharusnya hanya dapat dimodifikasi oleh pihak yang berwenang.
Suatu algoritma dikatakan aman, bila tidak ada cara ditemukan plaintextnya. Karena selalu terdapat kemungkinan ditemukannya cara baru untuk menembus algoritma kriptografi, maka algoritma kriptografi yang dikatakan “cukup” atau “mungkin” aman, bila memiliki keadaan sebagai berikut[1]: a. Bila harga untuk menjebol algoritma lebih besar daripada nilai informasi yang dibuka, maka algoritma itu cukup aman. b. Bila waktu yang digunakan untuk membobol algoritma tersebut lebih lama daripada lamanya waktu yang diperlukan oleh informasi tersebut harus tetap aman, maka algoritma tersebut mungkin aman.
8
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
c. Bila jumlah data yang dienkrip dengan kunci dan algoritma yang sama lebih sedikit dari jumlah data yang diperlukan untuk menembus algoritma tersebut, maka algoritma itu aman.
2.3. Algoritma Kriptografi Perkembangan algoritma kriptografi dapat kita bagi menjadi dua, yaitu[1]: •
Kriptografi Klasik
•
Kriptografi Modern
2.3.1. Alogoritma Kriptografi Klasik Pada algoritma klasik, diterapkan teknik enkripsi konvensional (simetris).
Algoritma ini merupakan algoritma kriptografi yang biasa
digunakan orang sejak berabad-abad yang lalu. Dua teknik dasar yang biasa digunakan, yaitu: a. Teknik Substitusi: penggantian setiap karakter plaintext dengan karakter lain. b. Teknik Transposisi: Teknik ini menggunakan permutasi karakter. Kombinasi subsitusi dan transposisi yang komplek menjadi dasar pembentukan algoritma algoritma kriptografi modern.
9
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
2.3.2. Algoritma Kriptografi Modern Algoritma modern selain memfokuskan diri pada tingkat kesulitan algoritma juga pada kunci yang digunakan. Macam-macam algoritma menurut kuncinya adalah algoritma simetris dan algoritma asimetris.
2.3.2.1. Algoritma Kunci Simetris Algoritma kunci simetri adalah algoritma kriptografi yang memiliki kunci yang sama untuk proses enkripsi dan dekripsinya. Kunci tersebut merupakan satu-satunya jalan untuk proses enkripsi (kecuali mencoba membobol algoritma tersebut), sehingga kerahasiaan kunci menjadi nomor satu. Untuk mengirimkan kunci tersebut ke suatu pihak tanpa diketahui pihak yang lain merupakan masalah awal dari algoritma kunci simetrik. Algoritma kunci simetri terbagi menjadi dua buah bergantung pada datanya. Keduanya adalah: cipher aliran (stream cipher) dan cipher blok (block cipher). Cipher aliran memproses satu bit pesan sekali dalam satu waktu, sedangkan cipher blok memproses sekumpulan bit sekaligus sebagai satu unit. Ukuran blok yang umum dipakai adalah 64 bit. Dari segi kecepatan komputasi, algoritma kunci simetri lebih cepat daripada algoritma asimetrik. Kelemahan utamanya seperti yang disebutkan diatas, yaitu dalam mendistribusikan kunci ke pihak-pihak yang berkepentingan. Jika dipakai dalam suatu lingkungan yang tidak membutuhkan
10
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
pendistribusian kunci (seperti penggunaan pribadi), maka algoritma ini merupakan algoritma yang terbaik. 2.3.2.1.1. Reversibility algoritma kunci simetri Semua fungsi kriptografi harus memiliki sifat reversibility, yaitu mampu mengembalikan cipher teks hasil enkripsi kembali ke plain teks melalui proses dekripsi. Kemampuan reversibility pada hampir semua metode pada algoritma kunci simetrik mengandalkan kemampuan reverse operation.
Metode ini berintikan membalik semua operasi yang ada.
Yaitu dengan melakukan operasi yang berlawanan. Misal operasi yang berlawanan adalah: penjumlahan & pengurangan, penggeseran ke kiri & ke kanan, dll. Namun tidak sedikit juga algoritma kunci simetrik blok cipher memiliki sub metode yang tidak bersifat reversible jika berdiri sendiri seperti metode Expand dan Filter. Namun metode tersebut akan bersifat reversible jika ditanamkan pada metode Jaringan Feistel. Dan metode yang digunakan tidak hanya mengandalkan reverse operation, namun melibatkan teknik teknik lain. 2.3.2.1.2. Deskripsi cipher blok Cipher blok merupakan salah satu pendekatan dalam algoritma kriptografi kunci simetrik.
Pendekatan lain adalah cipher aliran.
Perbedaan mendasar keduanya adalah jika cipher blok memproses dalam suatu kumpulan bit sekaligus sebagai suatu unit dan cipher aliran 11
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
memproses bit per bit. Panjang blok yang biasa diimplementasikan oleh perancang algoritma kriptografi adalah kelipatan 64 bit. Pada awal tahun 1990-an, panjang blok yang paling umum adalah 64 bit. Masyrakat merasa dengan panjang kunci 64 bit telah cukup aman dan tidak mungkin ada komputer yang mampu menyerang dengan metode brute force. Namun dengan berlalunya waktu, ternyata mungkin untuk menyerang algoritma dengan kunci 64 bit menggunakan metode brute force. Oleh karena itu panjang blok umum berkembang menjadi 128 bit pada awal 2000-an, atau bahkan akhir-akhir ini mulai umum ditemukan algoritma dengan panjang blok 256 bit. Dengan panjang blok
128 bit (hampir semua algoritma
mengimplementasikan panjang kunci sama dengan panjang blok), maka secara teoritis, memerlukan 2128/220 detik (dengan asumsi satu detik dapat mencoba 1000000 kemungkinan kunci) yang merupakan lebih dari 1 triliun tahun.
Blok cipher pertama kalinya diperkenalkan oleh IBM
dengan Lucifer-nya pada tahun 1970-an yang didasarkan pada karya Horst Feistel. Versi revisi dari Lucifer yang lebih dikenal dengan Data Encryption Standard (DES) diadopsi sebagai standar algoritma kriptografi oleh US National Bureau of Standard (NBS). Algoritma kunci simetri merupakan metode enkripsi yang menggunakan kunci yang sama untuk enkripsi dan dekripsi, seperti
12
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
ditunjukkan pada Gambar 2.2. atau bisa juga seperti Gambar 2.3. dibawah ini.
Gambar 2.2. Algoritma Simetri
Gambar 2.3. Algoritma Simetri
Dari gambar diatas dapat kita lihat bahwa untuk mengirimkan pesan antara si pengirim dan si penerima menggunakan satu kunci atau kunci yang digunakan sama. Maksudnya adalah kunci yang digunakan untuk mengenkripsi pesan dan kunci yang digunakan untuk mengdekripsikan pesan sama. Berarti mereka dalam
13
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
melakukan komunikasi menggunkan satu kunci yang disebut kunci asimetri. Proses enkripsi dan dekripsi keduanya menggunakan kunci yang sama K1=K2. Pertama kali sebelum pesan dikirim pesan tersebut masih dalam keadaan asli atau belum di enkripsi atau yang lebih dikenal dengan nama plaintext atau cleartext. Kemudian pada saat pesan tersebut dikirim pesan tersebut terlebih dahulu dilakukan proses encription (encipherment) yaitu proses menyandikan pesan plaintext kedalam chipertext yang apabila di buka akan berupa algoritma atau kata-kata yang sama sekali tidak dimengerti, sehingga orang lain tidak bisa membaca data yang telah di enkripsi tersebut. Kemudian setelah sampai di si penerima untuk mengubah chipertext tadi ke dalam plaintext disebut dengan decryption (dechiperment). Sedangkan Orang yang melakukan enkripsi terhadap suatu pesan atau praktisi kriptographi disebut “Cryptographer”. Pendistribusian Kunci pada
Kriptografi Kunci Simetri tidak dapat dilakukan menggunakan
saluran/ media yang akan digunakan untuk komunikasi, diperlukan media khusus untuk distribusi kunci, beberapa kunci mungkin membutuhkan beberapa media paralel untuk distribusinya. 2.4. Algoritma Blowfish Blowfish alias "OpenPGP.Cipher.4" merupakan enkripsi yang termasuk dalam golongan Symmetric Cryptosystem , metoda enkripsinya mirip
dengan
DES
(DES-like Cipher)
diciptakan
oleh
seorang
Cryptanalyst bernama Bruce Schneier Presiden perusahaan Counterpane Internet Security, Inc (Perusahaan konsultan tentang kriptografi dan keamanan Komputer) dan dipublikasikan tahun 1994. Sejak saat itu telah 14
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
dilakukan berbagai macam analisis, dan perlahan - lahan mulai mendapat penerimaan sebagai algoritma enkripsi yang kuat. Dibuat untuk digunakan pada komputer yang mempunyai microposesor besar (32-bit keatas dengan cache data yang besar). Sampai saat ini belum ada attack yang dapat memecahkan Blowfish[4]. Algoritma utama terbagi menjadi dua subalgoritma utama, yaitu bagian ekspansi kunci dan bagian enkripsi-dekripsi data. Pengekspansian kunci dilakukan pada saat awal dengan masukan sebuah kunci dengan panjang 32 bit hingga 448 bit, dan keluaran adalah sebuah array subkunci dengan total 4168 byte[4]. Bagian enkripsi-dekripsi data terjadi dengan memanfaatkan perulangan 16 kali terhadap jaringan feistel. Setiap perulangan terdiri dari permutasi dengan masukan adalah kunci, dan substitusi data.
Semua
operasi dilakukan dengan memanfaatkan operator Xor dan penambahan. Operator penambahan dilakukan terhadap empat array lookup yang dilakukan setiap putarannya. Blowfish juga merupakan cipher blok, yang berarti selama proses enkripsi dan dekripsi, Blowfish akan membagi pesan menjadi blok-blok dengan ukuran yang sama panjang.
Panjang blok untuk algoritma
Blowfish adalah 64-bit. Pesan yang bukan merupakan kelipatan delapan byte akan ditambahkan bit-bit tambahan (padding) sehingga ukuran untuk tiap blok sama.
15
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Blowfish adalah algoritma yang tidak dipatenkan dan license free, dan tersedia secara gratis untuk berbagai macam kegunaan.
Blowfish
dirancang dan diharapkan mempunyai kriteria perancangan yang diiginkan sebagai berikut : a. Cepat, Blowfish melakukan enkripsi data pada microprocessor 32bit dengan rate 26 clock cycles per byte. b. Compact, Blowfish dapat dijalankan pada memory kurang dari 5K. c. Sederhana, Blowfish hanya menggunakan operasi – operasi sederhana, seperti : penambahan, XOR, dan lookup tabel pada operan32-bit. d. Memiliki tingkat keamanan yang bervariasi, panjang kunci yang digunakan oleh Blowfish dapat bervariasi dan bisa sampai sepanjang minimal 32-bit, maksimal 448 -bit, Multiple 8 bit, defalutl 128 bit. Blowfish dioptimasikan untuk berbagai aplikasi dimana kunci tidak sering berubah, seperti pada jaringan komunikasi atau enkripsi file secara otomatis.
Dalam pengimplementasiannya dalam komputer
bermicroprosesor 32-bit dengan cache data yang besar (Pentium dan Power PC) Blowfish terbukti jauh lebih cepat dari DES. Tetapi Blowfish tidak cocok dengan aplikasi dengan perubahan kunci yang sering atau sebagai fungsi hast satu arah seperti pada aplikasi packet switching. Blowfish pun tidak dapat digunakan pada aplikasi kartu pintar (smart card) karena memerlukan memori yang besar.
16
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Algoritma Blowfish terdiri atas dua bagian : a. Key-Expansion Berfungsi merubah kunci (Minimum 32-bit, Maksimum 448-bit) menjadi beberapa array subkunci (subkey) dengan total 4168 byte. b. Enkripsi Data Terdiri dari iterasi fungsi sederhana (Feistel Network) sebanyak 16 kali putaran. Setiap putaran terdiri dari permutasi kunci-dependent dan substitusi kunci- dan data-dependent. Semua operasi adalah penambahan (addition) dan XOR pada variabel 32-bit.
Operasi tambahan lainnya
hanyalah empat penelusuran tabel (table lookup) array berindeks untuk setiap putaran. Blowfish menggunakan subkunci yang besar. Kunci tersebut harus dihitung sebelum enkripsi atau deskripsi data. Blowfish adalah algoritma yang menerapkan jaringan Feistel (Feistel Network) yang terdiri dari 16 putaran. Input adalah elemen 64-bit,X. Blowfish termasuk dalam kategori Kriptographi kunci Simetri yang mana kunci yang dipakai untuk menutup dan membuka itu menggunakan kunci yang sama. Pada algoritma Blowfish, digunakan banyak subkey. Kunci-kunci ini harus dihitung atau dibangkitkan terlebih dahulu sebelum dilakukan enkripsi atau dekripsi data.
Tujuan dari metode ini adalah untuk
mengacak urutan bit-bit pada sebuah blok. Metode ini berbeda dengan metode substitusi pada pemanipulasian bit. Perbedaannya adalah pada
17
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
metode ini digunakan acuan yang telah pasti dalam pensubstitusian bit. Acuan tersebut tidak memiliki pola khusus, dan pada kebanyakan algoritma kriptografi, acuan tersebut telah ditetapkan oleh si perancang algoritma. Dinamakan kotak permutasi, sebab merupakan sebuah kotak 2 dimensi yang setiap isinya memiliki informasi bit tersebut harus dipindahkan ke urutan keberapa pada blok tersebut. memanfaatkan kotak permutasi dalam beberapa prosesnya.
Blowfish Kotak
permutasi ini bertujuan untuk mengacaukan urutan bit, sehingga mencegah kriptanalis yang akan menyerang algoritma tersebut menggunakan metode seperti metode kunci lemah. 2.5. Enkripsi Algoritma 2.5.1. Enkripsi Algoritma Blowfish Blowfish menggunakan subkunci berukuran besar. Kunci-kunsi tersebut harus dikomputasikan pada saat awal, sebelum pengkomputasian enkripsi dan dekripsi data. Langkah-langkahnya adalah sebagai berikut: a. Terdapat kotak permutasi (P-box) yang terdiri dari 18 buah 32 bit subkunci: P1, P2, P3, ... P18. P-box ini telah ditetapkan sejak awal, 4 buah P-box awal adalah sebagai berikut: P1 = 0x243f6a88 P2 = 0x85a308d3
18
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
P3 = 0x13198a2e P4 = 0x03707344 b. Xorkan P1 dengan 32 bit awal kunci, xorkan P2 dengan 32 bit berikutnya dari kunci, dan teruskan hingga seluruh panjang kunci telah terxorkan. c. Terdapat 64 bit dengan isi kosong, bit-bit tersebut dimasukkan ke langkah 2. d. Gantikan P1 dan P2 dengan keluaran dari langkah 3. e. Enkripsikan keluaran langkah 3 dengan langkah 2 kembali, namun kali ini dengan subkunci yang berbeda (sebab langkah 2 menghasilkan subkunci baru). f. Gantikan P3 dan P4 dengan keluaran dari langkah 5 g. Lakukan seterusnya hingga seluruh P-box teracak sempurna h. Total keseluruhan, terdapat 521 iterasi untuk menghasilkan subkuncisubkunci yang
dibutuhkan. Aplikasi hendaknya menyimpannya
daripada menghasilkan ulang subkunci-subkunci tersebut. Kunci- kunci yang digunakan antara lain terdiri dari, 18 buah 32-bit subkey yang tergabung dalam P-array (P1, P2, ..., P18). Selain itu, ada pula empat 32-bit S-box yang masing-masingnya memiliki 256 entri : S1,0,S1,1,..., S1,255; S2,0, S2,1,..,, S2,255; S3,0, S3,1,..., S3,255; S4,0, S4,1,..,, S4,255.
19
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Pada jaringan feistel, Blowfish memiliki 16 iterasi, masukannya adalah 64-bit elemen data, X. Untuk melakukan proses enkripsi: a. Bagi X menjadi dua bagian yang masing-masing terdiri dari 32-bit: XL, XR. b. For i = 1 to 16: XL = XL XOR Pi XR = F(XL) XOR XR Tukar XL dan XR c. Setelah iterasi ke-enam belas, tukar XL dan XR lagi untuk melakukan undo pertukaran terakhir. d. Lalu lakukan XR = XR XOR P17 XL = XL XOR P1 e. Terakhir, gabungkan kembali XL dan XR untuk mendapatkan cipherteks.
Untuk lebih jelasnya, gambaran tahapan pada jaringan feistel yang digunakan Blowfish adalah seperti pada Gambar 3 diabawah ini :
20
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Gambar 2.4. Jaringan Feistel Pada langkah kedua, telah dituliskan mengenai penggunaan fungsi F. Fungsi F adalah: Bagi XL menjadi empat bagian 8-bit: a,b,c dan d. F(XL) = ((S1,a + S2,b mod 232) XOR S3,c) + S4,d mod 232. Agar dapat lebih memahami fungsi F, tahapannya dapat dilihat pada Gambar 2.7 di bawah ini :
21
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Gambar 2.5. Fungsi F Pada Algoritma Blowfish terdapat keunikan dalam hal proses dekripsinya, yaitu proses dekripsi dilakukan dengan urutan yang sama persis dengan proses enkripsi, hanya saja pada proses dekripsi P1, P2, …, P18 digunakan dalam urutan yang terbalik. 2.6. Dekripsi Algoritma 2.6.1. Dekripsi Algoritma Blowfish Dekripsi sama persis dengan enkripsi, kecuali P1, P2, . . . , P18 digunakan pada urutan yang terbalik. kecuali bahwa P1, P2,…, P18. Dekripsi untuk Blowfish bersifat maju kedepan. Mengakibatkan dekripsi bekerja dalam arah algoritma yang sama seperti halnya dengan enkripsi, namun sebagai masukannya adalah chipertext. Walaupun begitu, seperti yang diharapkan, sub-kunci yang digunakan dalam urutan terbalik.
22
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Subkunci dihitung menggunakan algoritma Blowfish, metodanya adalah sebagai berikut :
a. Pertama-tama inisialisasi P-array dan kemudian empat S-box secara berurutan dengan string yang tetap. String ini terdiri digit hexadesimal dari pi. b. XOR P1 dengan 32 bit pertama kunci, XOR P2 dengan 32 bit kedua dari kunci dan seterusnya untuk setiap bit dari kunci (sampai P18). Ulangi terhadap bit kunci sampai seluruh P-array di XOR dengan bit kunci. c. Enkrip semua string nol dengan algoritma Blowfiah dengan menggunakan subkunci seperti dijelaskan pada langkah (1) dan (2). d. Ganti P1 dan P2 dengan keluaran dari langkah (3) e. Enkrip keluaran dari langkah (3) dengan algoritma Blowfish dengan subkunci yang sudah dimodifikasi. f. Ganti P3 dan P4 dengan keluaran dari langkah (5). g. Lanjutkan proses tersebut, ganti seluruh elemen dari P-array, dan kemudian seluruh keempat S-box berurutan, dengan keluaran yang berubah secara kontinyu dari algoritma Blowfish
Total diperlukan 521 iterasi untuk menghasilkan semua subkunci yang dibutuhkan. Aplikasi kemudian dapat menyimpan subkunci ini dan tidak dibutuhkan langkah-langkah proses penurunan ini berulang kali, kecuali kunci yang digunakan berubah.
23
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Gambar diagram skema dekripsi algoritma Blowfish :
.
Gambar 2.6. diagram skema dekripsi algoritma Blowfish
2.7. NOTASI BIG-O 2.7.1. Pengenalan Notasi Big O Big O notation adalah suatu notasi matematika yang digunakan untuk pembatasan dari sebuah fungsi ketika argumen dari sebuah fungsi menuju nilai tertentu atau tak terhingga. Biasanya terdapat dalam fungsi sederhana. Pada ilmu komputer, Big O termasuk asymptotic notations (asimtot adalah sebuah kurva geometri dari 0 sampai tak terhingga) digunakan untuk
24
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
mengukur kompleksitas dari sebuah algoritma. Secara matematis dapat didefinisikan sebagai berikut : Ada 2 buah fungsi f dan g yang keduanya merupakan fungsi pada bilangan real. f(n) = O(g(n)) (“=” di sini bukan berarti “bernilai sama” akan tetapi “adalah”) disebut f(n) Big-O dari g(n) jika terdapat dua buah bilangan real positif C dan n0 untuk n ≥ n0 dalam bentuk notasi dapat digambarkan sebagai berikut[6] : ( ) = (( )) ↔ {∃ > 0, ∃ 0 > 0, ∀ ≥ 0: ( ) ≤ ( )} Secara geometri dapat digambarkan sebagai berikut :
Gambar : 2.7. Big O notation f(n) ∈ O(g(n)) 2.7.2. Penggunaan Notasi Big O Terdapat 2 macam penggunaan pada notasi ini : 1. Infinite asymptotic 2. Infinitesimal asymptotic. Perbedaan keduanya hanya pada pengaplikasian bukan pada metode dasar. Infinite Asymptotic Untuk penggunaan pada infinite asymptotic biasanya terdapat dalam bidang ilmu komputer untuk menganalisa kompleksitas dari suatu algoritma. Misal adalah waktu (di mana waktu adalah indikator kemangkusan dan efisiensi dari suatu algoritma) yang diperlukan algoritma untuk
25
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
penyelesaian masalah : T(n)≤cg(n) untuk semua n≥n0 Contoh : T(n) = 100n+5 ∈ O(n2) 100n + 5 ≤ 100n + n ( untuk semua n≥5) = 101n ≤ 101n2 Kita dapat menentukan konstanta C = 101 dan n0 = 5. Tetapi kita dapat menentukan konstanta C dan n0 yang lain : Doesn’ t matter 100n+5 ≤ 100n+5n (untuk semua n≥1) = 105n≤n2 Sehingga misal untuk menghitung waktu efisiensi dari suatu algoritma : T(n)= 5n2+n+1, di mana ketika n bertambah semakin besar maka suku n 2 akan mendominasi pertumbuhan sehingga jika n = 100, suku 5n2 akan 500 kali lebih besar dari suku n. Maka kita dapat mengabaikan suku-suku yang lebih kecil yang tidak akan memberikan efek yang signifikan. Ekspresi untuk penggunaan pada infinite asymptotic kasus tadi adalah : T(n) ∈ O(n2 ) Infinitesimal Asymptotic Penggunaan pada infinitesimal asymptotic dilakukan untuk menggambarkan kesalahan dalam sebuah aproksimasi dalam fungsi matematika di mana contoh ekspresinya seperti di bawah : ℯ
-(1 +
+
2 2 ) Notasi Pernyataan f(n) adalah O(g(n))
sebagai- mana didefinisikan di atas ditulis sebagai berikut : f(n) = O(g(n)) Pernyataan di atas sebenarnya merupakan penyalahgunaan notasi. Persamaan dari dua buah fungsi tidak dinyatakan pada ekspresi di atas. Properti dari O(g(n) tidaklah simetrik : O(n) = O(n2 ) tetapi O(n2 ) ≠ O(n) Karena alasan ini, penggunaan notasi himpunan dirasa lebih tepat dengan menulis[7] : f(n) ∈ O(g(n))
26
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
2.7.3. Bentuk atau Kombinasi Notasi Big O Notasi O diklasifikaskan dalam beberapa bentuk kombinasi [6]: Bentuk O(1) memiliki arti bahwa algoritma yang sedang dianalisis merupakan algoritma konstan.
Hal ini mengindikasikan bahwa running time
algoritma tersebut tetap, tidak bergantung pada n. O(n) berarti bahwa algoritma tersebut merupakan algoritma linier. Artinya, bila n menjadai 2n maka running time akan menjadi dua kali running time semula. O(n²) berarti bahwa algoritma tersebut merupakan algoritma kuadratik. Algoritma kuadratik biasanya hanya digunakan untuk kasus dengan n yang berukuran kecil. Sebab, bila n dinaikkan menjadi dua kali semula,maka running time algoritma akan menjadi empat kali semula. O(n³) berarti bahwa algoritma tersebut merupakan algoritma kubik. Pada algoritma kubik, bila n dinaikkan menjadi dua kali semula, maka running time algoritma akan menjadi kuadrat kali semula. O(log n) berarti algoritma tersebut merupakan algoritma logaritmik. Pada kasus ini, laju pertumbuhan waktu lebih lambat dari pada pertumbuhan n. algoritma
yang
termasuk
algoritma
logaritmik
adalah
algoritma
yang
memecahkan persoalan besar dengan mentransformasikannya menjadi beberapa persoalan yang lebih kecil dengan ukuran sama. Basis algoritma tidak terlalu penting, sebab bila misalkan n dinaikkan menjadi dua kali semula, log n meningkat sejumlah besar tetapan.
27
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Bentuk O(n log n) terdapat pada algoritma yang membagi pesoalan menjadi beberapa persoalan yang lebih kecil, menyelesaikan setiap persoalan secara independen, kemudian menggabungkan solusi masing-masing persoalan. Sedangkan O(n!) berarti factorial.
Algoritma
jenis
ini
bahwa algoritma tersebut adalah algoritma akan
memproses
setiap
masukan
dan
menghubungkanya dengan n – 1 masukkan lainnya. Bila n menjadi dua kali semula, maka running time algoritma akan mejadi factorial dari 2n . Menurut Rowel dkk. (2015) [7], grafik untuk masing-masing kelas efisiensi algoritma dapat digambarkan secara visual. Gambar ini dapat digunakan untuk membandingkan bentuk garis atau kurva algoritma yang dianalisis. Berikut ini adalah visualisasi kelas kompleksitas algoritma.
Gambar 2.8. Gambar Grafik Kompleksitas Algoritma Metode Big-O (1)
28
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Visualisasi kompleksitas algoritma menggunakan metode Big-O juga ditemukan
pada
halaman
situs
http://science.slc.edu/~jmarshall/courses/
2002/spring/cs50/BigO/[8]. Berikut ini adalah gambar yang diambil dari halaman tersebut.
Gambar 2.9. Gambar Grafik Kompleksitas Algoritma Metode Big-O (2)
29
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
BAB 3 ANALISA DAN PERANCANGAN 3.1. ANALISA SISTEM 3.1.1. Analisa kebutuhan Sistem Pada penelitian ini akan dibangun sistem dengan menggunakan algoritma kriptografi blowfish, yang mampu melakukan proses enkripsi dan dekripsi file. dalam proses enkripsi dan dekripsi dapat diketahui waktu proses, sehinggal akan dilakukan analisa terhadap waktu proses dengan menggunakan notasi big-O. Sistem ini akan dibagun dengan menggunakan algoritma kriptografi yaitu algoritma kriptografi simetri(Blowfish). Sistem ini akan diimplementasikan ke dalam sebuah aplikasi yang dibangun menggunakan bahasa pemrograman Java. Dalam sistem enkripsi dan dekripsi yang dibutuhkan user agar dapat berinteraksi dengan sistem antara lain : a. Tombol masuk ke sistem b. Tombol enkripsi dan dekripsi algoritma blowfish c. Input kunci d. Tombol browse input file e. Tombol output file
30
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
3.1.2. Analisa Teknologi Perangkat keras(hardware) dan perangkat lunak(software) yang digunakan dalam pembuatan sistem ini adalah : Spesifikasi hardware: Hardware
Spesifikasi
Processor
Intel(R) Core (TM) i3 CPU @2,13GHz
Memory
2.00 GB RAM
Hardisk
Hitachi 320GB
Software yang digunakan: Operating system
Windows 7 Ultimate SP 2
Bahasa pemrograman
Java
Tabel 3.1. Spesifikasi hardware dan software
3.2. PERANCANGAN SISTEM 3.2.1. Flowchart Diagram Untuk memudahkan dalam pembuatan program, maka penulis membuat diagram flowchart yang akan menggambarkan alur program secara umum. Flowchart tersebut dapat digambarkan sebagai berikut :
31
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
3.2.1.1.
Diagram alir enkripsi Blowfish
3.2.1.2.
Diagram alir dekripsi Blowfish
32
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
3.2.2. Perancangan Antarmuka Pengguna 3.2.2.1.
Menu/tampilan halaman utama Menu ini merupakan tampilan awal ketika membuka aplikasi enkripsi dan dekripsi file dengan blowfish. Pada halaman ini menampilkan judul aplikasi, dan satu tombol untuk dapat masuk ke aplikasi.
3.2.2.2.
Tampilan pilihan Menu
33
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
3.3. PERANCANGAN PENGUJIAN Yaitu tahapan dimana penulis melakukan uji coba terhadap algoritma Blowfish kecepatan waktu proses dari proses enkripsi dan dekripsi file dengan besar file yang berbeda. a. Analisis Kecepatan Algoritma Blowfish Analisis kecepatan dilakukan dengan melakukukan Analisis kecepatan aplikasi dalam proses mengenkripsi dan mendekripsi file untuk mencari nilai kecepatan terbaik. Analisis dilakukan dengan menginputkan file dengan besaran file yang berbeda-beda. Pengujian dilakukan dengan cara mengenkripsi dan dekripsi file. Dari hasil pengujian terhadap algoritma Blowfish
dapat diperoleh waktu proses dari algoritma
Blowfish. b. Analisis Efisiensi algoritma Blowfish Melihat hasil percobaan proses enkripsi dan dekripsi dengan menggunakan algoritma blowfish, maka perlu dibuktikan tingkat efisiensi algoritma blowfish, dan kompleksitas algoritma blowfish dibuktikan dengan notasi big-O. Hasil dari analisa digambarkan dalam bentuk grafik. Dari grafik tersebut dapat dikategorikan dalam kelas efisiensi;
apakah
O(1)Konstan,
O(logn)Logaritmik,
O(n)Linear,
O(nlogn)n log n, O(n2)Kuadratik, O(nm)Polinomiale, O(n!)Faktorial.
34
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
BAB IV IMPLEMENTASI DAN PEMBAHASAN
4.1. IMPLEMENTASI Implementasi sistem telah berhasil dilakukan sesuai dengan analisis dan perancangan yang telah dilakukan. Hasil dari penelitian adalah sebuah aplikasi, data pengujian aplikasi dan data pengujian algoritma. Aplikasi dapat digunakan untuk mengenkripsi dan mendekripsi data dengan algoritma blowfish.
Hasil
pengujian aplikasi berupa data pengujian kesalahan sintaks, kesalahan logika, whitebox dan blackbox. Hasil pengujian algoritma berupa data pengujian waktu yang dibutuhkan untuk enkripsi dan dekripsi algorirma blowfish berdasarkan besar data yang diproses. Aplikasi dibuat menggunakan Windows 7 sebagai sistem operasi dan Netbeans 8 sebagai aplikasi terpadu pengembangan aplikasi web. Bahasa yang digunakan untuk membuat aplikasi adalah Java. Antarmuka aplikasi terdiri atas 3 bagian utama, yaitu header, content dan footer. Bagian header berfungsi untuk menampilkan nama aplikasi dan bagian footer berfungsi untuk menampilkan identitas pembuat aplikasi.
Antarmuka
bagian content mempunyai fungsi pokok untuk melakukan pengujian enkripsi dan dekripsi algoritma blowfish. Antarmuka memiliki elemen berikut ini : 1. Textbox untuk mengetik kata kunci. 2. Tombol untuk membuka file yang akan digunakan sebagai input.
35
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
3. Textbox untuk menampilkan nama file input. 4. Textarea untuk menampilkan isi file input. 5. Tombol enkripsi untuk memicu proses enkripsi. 6. Tombol dekripsi untuk memicu proses dekripsi. 7. Textarea untuk menampilkan output proses enkripsi dan dekripsi. 8. Tombol untuk menyimpan output enkripsi dan dekripsi. 9. Textbox untuk menampilkan nama file output. Berikut ini adalah screenshot antarmuka aplikasi yang telah berhasil dibuat. Antar muka yang telah dirancang sebelumnya, diimplementasikan ke dalam sebuah sistem dengan hasil sebagai berikut : 1. Halaman Utama
Gambar 4.1 Gambar Implementasi Halaman Utama
Pada halaman ini, muncul tampilan utama, dimana user dapat melakukan proses enkripsi dan dekripsi file dengan menggunakan
36
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
algoritma blowfish, sehingga diperoleh hasil enkripsi, hasil dekripsi dan waktu proses enkripsi dan dekripsi. 2. Form Input Kunci
Gambar 4.2 Gambar halaman input kunci Pada halaman ini, user diminta untuk menginputkan kunci, baik dalam proses enkripsi maupun proses dekripsi. Jika user belum menginputkan kunci, maka sistem akan memunculkan peringatan :
Gambar 4.3 Gambar peringatan textbox kunci kosong Pada halaman ini user diminta untuk menginputkan kunci, baik kunci untuk melakukan proses enkripsi maupun kunci untuk melakukan proses dekripsi.
37
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
3. Tombol Input File
Gambar 4.4 Gambar halaman input file Pada halaman ini, jika user akan melakukan proses enkripsi dan dekripsi, user harus mengklik button BUKA, maka akan muncul halaman sebagai berikut :
Gambar 4.5 Gambar memilih file input Pada halaman ini, user diminta untuk memilih file mana yang akan diproses baik file yang akan di enkripsi maupun file yang akan di dekripsi. Jika user sudah menginputkan file, maka isi file akan tertampil pada form input :
38
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Gambar 4.6 Gambar file input 4. Tombol Enkripsi
Gambar 4.7 Gambar button enkripsi Pada halaman ini, jika user sudah menginputkan kunci enkripsi dan file yang akan dienkripsi, maka user dapat mengklik button ENKRIPSI, maka hasil input dan output akan tertampil pada halaman utama, beserta waktu proses.
39
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
5. Tombol Dekripsi
Gambar 4.8 Gambar button dekripsi Pada halaman ini, jika user sudah menginputkan kunci dekripsi dan file yang akan didekripsi, maka user dapat mengklik button DEKRIPSI, hasil input dan output akan tertampil pada halaman utama, beserta waktu proses :
Gambar 4.9 Gambar file output
40
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
6. Halaman Simpan File
Gambar 4.10 Gambar simpan file Pada halaman ini user dapat menyimpan file hasil proses enkripsi maupun proses dekripsi. Jika user mengklik button SIMPAN, maka akan muncul tampilan sebagia berikut :
Gambar 4.11 Gambar file input Pada halaman ini user dapat memilih lokasi file yang akan disimpan.
41
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
7. Halaman waktu Proses Enkripsi dan Dekripsi
Gambar 4.12 Gambar waktu proses Pada halaman ini, setelah user melakukan proses enkripsi maupun proses dekripsi maka sistem akan menampilakan waktu proses enkripsi dan waktu proses dekripsi dalam satuan millisecond. 4.2. PEMBAHASAN 4.2.1. Penjelasan Sistem 1. Kelas Utama Kelas yang pertama kali diekseskusi adalah kelas Main pada file Main.java.
Kelas ini berfungsi untuk menginisiasi dan menginstantiasi kelas
untuk menampilkan tampilan antarmuka grafis utama (DisplayMain). Kelas yang diperlukan untuk membuat dasar antarmuka grafis adalah Display dan Shell. Berikut ini adalah inti kode program untuk menginisisasi dan menginstantiasi antarmuka utama.
42
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
display = new Display(); shell = new Shell(display, SWT.DIALOG_TRIM);
@SuppressWarnings("unused") DisplayMain displayMain = new DisplayMain(display, shell);
2. Antarmuka Utama Kelas yang berfungsi untuk membuat antarmuka utama adalah kelas DisplayMain yang berada pada file DisplayMain.Java. Kelas ini juga berfungsi untuk membuat struktur layout dari antarmuka yang meliputi bagian header, content dan footer. Masing bagian akan diinstantiasi sesuai dengan nama kelasnya. Ukuran tinggi dan lebar jendela antarmuka diatur menggunakan metode setSize(). Berikut ini adalah inti kode program untuk membuat struktur layout dasar halaman. initHeader = new InitHeader(display, shell); initHeader.Create();
initFooter = new InitFooter(display, shell); initFooter.Create();
43
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
initPanel = new InitPanel(display, shell); initPanel.Create();
shell.pack(); shell.setSize(1010, 620); shell.open();
3. Bagian Header Bagian header merupakan instantiasi dari kelas InitHeader yang berada pada file InitHeader.java. Kelas ini berfungsi untuk menampilkan elemen-elemen yang ada pada bagian header. Tulisan nama aplikasi dan metode ditampilkan menggunakan elemen CLabel. Berikut ini adalah inti kode program untuk menampilkan tulisan pada bagian header.
CLabel labelApplication = new CLabel(containerHeader, SWT.NONE); labelApplication.setText("Aplikasi Enkripsi Dan Dekripsi "); labelApplication.setLayoutData(new GridData(500, 26)); FontData[] fontApplication = labelApplication.getFont().getFontData(); fontApplication[0].setHeight(18); labelApplication.setBackground(new Color(display.getCurrent(), 32,
44
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
32, 32)); labelApplication.setForeground(new Color(display.getCurrent(), 255, 255, 255)); labelApplication.setFont(new Font(containerHeader.getDisplay(), fontApplication));
CLabel labelAlgorithm = new CLabel(containerHeader, SWT.NONE); labelAlgorithm.setText("Menggunakan Algoritma Kriptografi Blowfish"); labelAlgorithm.setLayoutData(new GridData(500, 20)); FontData[] fontAlgorithm = labelAlgorithm.getFont().getFontData(); fontAlgorithm[0].setHeight(12); labelAlgorithm.setBackground(new Color(display.getCurrent(), 32, 32, 32)); labelAlgorithm.setForeground(new Color(display.getCurrent(), 223, 223, 223)); labelAlgorithm.setFont(new Font(containerHeader.getDisplay(), fontAlgorithm));
45
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Label yang digunakan merupakan instantiasi dari kelas CLabel. Metode setText() digunakan untuk memberikan tulisan pada label. setLayoutData() merupakan
metode untuk mengatur ukuran tinggi dan lebar label. Untuk
mengatur warna latar label digunakan metode setBackground(). Warna tulisan diatur menggunakan metode setForeground(). Besar tulisan dapat diatur menggunakan metode setFont(); 4. Bagian Footer Bagian footer merupakan instantiasi dari kelas InitFooter yang berada pada file InitFooter.java. Kelas ini berfungsi untuk menampilkan elemen-elemen yang ada pada bagian footer. Tulisan identitas pembuat ditampilkan menggunakan elemen CLabel. Berikut ini adalah inti kode program untuk menampilkan tulisan pada bagian footer.
CLabel labelCreator = new CLabel(containerFooter, SWT.NONE); labelCreator.setText("Oleh : Yohanes Catur Tegus Raharjo (085314081) "); labelCreator.setLayoutData(new GridData(900, 16)); labelCreator.setBackground(new Color(display.getCurrent(), 32, 32, 32)); labelCreator.setForeground(new Color(display.getCurrent(), 223, 223, 223));
46
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
CLabel labelUniversity = new CLabel(containerFooter, SWT.NONE); labelUniversity.setText("Program Studi Teknik Informatika, Fakultas Sains dan Teknologi, Universitas Sanata Dharma, Yogyakarta, 2015"); labelUniversity.setLayoutData(new GridData(900, 16)); labelUniversity.setBackground(new Color(display.getCurrent(), 32, 32, 32)); labelUniversity.setForeground(new Color(display.getCurrent(), 223, 223, 223));
5. Bagian Content Bagian content merupakan instantiasi dari kelas InitFooter yang berada pada file InitFooter.java. Kelas ini berfungsi untuk menginisiasi panel yang berupa composite untuk content. Layout panel diatur menggunakan metode setLayout(),
sedangkan
ukuran
panel
diatur
menggunakan
metode
setLayoutData(). Panel pengujian (PanelTest) kemudian diinstantiasi dan dilekatkan pada panel content. Berikut ini adalah inti kode program InitFooter.
FormData formData = new FormData(); formData.left = new FormAttachment(0,8);
47
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
formData.top = new FormAttachment(14); formData.width = 990; formData.height = 535;
containerTest = new Composite(shell, SWT.NONE); containerTest.setLayout(new RowLayout(SWT.VERTICAL)); containerTest.setLayoutData(formData); panelTest = new PanelTest(display, shell, containerTest);
Panel pengujian merupakan kelas yang berfungsi untuk menginstantiasi form pengujian (FormTest) serta menangani kejadian (event handler) yang terjadi pada form pengujian. Tulisan dibuat menggunakan elemen CLabel, textbox dibuat menggunakan elemen Text, sedangkan tombol dibuat menggunakan elemen Button. Berikut ini adalah kode program untuk menampilkan label kunci, textbox kunci, label file input, textbox file input dan tombol buka. labelKey = new CLabel(compositeForm, SWT.NONE); labelKey.setText("Kunci"); labelKey.setLayoutData(new GridData(labelWidth, 17));
textKey = new Text(compositeForm, SWT.BORDER);
48
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
textKey.setLayoutData(new GridData(900, 17)); addSpanData(textKey, 2);
labelSource = new CLabel(compositeForm, SWT.NONE); labelSource.setText("File input"); labelSource.setLayoutData(new GridData(labelWidth, 17));
textSource = new Text(compositeForm, SWT.BORDER | SWT.READ_ONLY); textSource.setBackground(new Color(display.getCurrent(), 230, 230, 230)); textSource.setLayoutData(new GridData(textWidth, 17));
buttonSource = new Button(compositeForm, SWT.PUSH); buttonSource.setText("Buka"); buttonSource.setAlignment(SWT.CENTER); buttonSource.setLayoutData(new GridData(buttonWidth, 21));
Tombol enkripsi dan dekripsi dibuat menggunakan elemen button yang disusun secara horizontal pada composite. Metode setLayout() digunakan pengaturan layout. Metode setLayoutData() digunakan untuk mengatur ukuran
49
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
elemen tombol. Berikut ini kode program untuk membuat tombol enkripsi dan dekripsi. Composite compositeRow1 = new Composite(compositeForm, SWT.NONE); compositeRow1.setLayout(new RowLayout(SWT.HORIZONTAL)); addSpanData(compositeRow1, 2);
RowData buttonRowdata = new RowData(); buttonRowdata.height = 21; buttonRowdata.width = buttonWidth;
buttonEncrypt = new Button(compositeRow1, SWT.PUSH); buttonEncrypt.setText("Enkripsi"); buttonEncrypt.setAlignment(SWT.CENTER); buttonEncrypt.setLayoutData(buttonRowdata);
buttonDecrypt = new Button(compositeRow1, SWT.PUSH); buttonDecrypt.setText("Dekripsi"); buttonDecrypt.setAlignment(SWT.CENTER); buttonDecrypt.setLayoutData(buttonRowdata);
50
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Textarea untuk menampilkan isi file dibuat menggunakan elemen Text. Elemen ini dibuat menjadi bersifat multi baris menggunakan keyword SWT.MULTI, memiliki bilah pengguluh vertikal menggunakan keyword SWT.V_SCROLL, memenggal kata pada akhir baris menggunakan keyword SWT.WRAP
dan
membuat
tidak
bisa
ditulis
menggunakan
keyword
SWT.READ_ONLY. Berikut ini adalah kode program untuk membuat label input, textbox input, label output dan texbox output. CLabel labelInput = new CLabel(compositeForm, SWT.NONE); labelInput.setText("Input");
Composite compositeRow2 = new Composite(compositeForm, SWT.NONE); compositeRow2.setLayout(new RowLayout(SWT.HORIZONTAL)); addSpanData(compositeRow2, 2);
RowData textareaRowdata = new RowData(); textareaRowdata.height = 150; textareaRowdata.width = 855;
textInput = new Text(compositeRow2, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL | SWT.READ_ONLY);
51
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
textInput.setBackground(new Color(display.getCurrent(), 230, 230, 230)); textInput.setLayoutData(textareaRowdata);
CLabel labelOutput = new CLabel(compositeForm, SWT.NONE); labelOutput.setText("Output");
Composite compositeRow3 = new Composite(compositeForm, SWT.NONE); compositeRow3.setLayout(new RowLayout(SWT.HORIZONTAL)); addSpanData(compositeRow3, 2);
textOutput = new Text(compositeRow3, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL | SWT.READ_ONLY); textOutput.setBackground(new Color(display.getCurrent(), 230, 230, 230)); textOutput.setLayoutData(textareaRowdata);
Di bagian bawah bagian content terdapat label file output, tombol simpan, label waktu dan tombol waktu. Berikut ini adalah kode program untuk membuat elemen-elemen tersebut.
52
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
labelTarget = new CLabel(compositeForm, SWT.NONE); labelTarget.setText("File output"); labelTarget.setLayoutData(new GridData(labelWidth, 17));
textTarget = new Text(compositeForm, SWT.BORDER | SWT.READ_ONLY); textTarget.setBackground(new Color(display.getCurrent(), 230, 230, 230)); textTarget.setLayoutData(new GridData(textWidth, 17));
buttonTarget = new Button(compositeForm, SWT.PUSH); buttonTarget.setText("Simpan"); buttonTarget.setAlignment(SWT.CENTER); buttonTarget.setLayoutData(new GridData(buttonWidth, 21));
labelTime = new CLabel(compositeForm, SWT.NONE); labelTime.setText("Waktu (ms)"); labelTime.setLayoutData(new GridData(labelWidth, 17));
textTime = new Text(compositeForm, SWT.BORDER | SWT.READ_ONLY);
53
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
textTime.setBackground(new Color(display.getCurrent(), 230, 230, 230)); textTime.setLayoutData(new GridData(100, 17));
6. Event Handler Penanganan peristiwa (event handler) form pengujian (FormTest) terdapat pada kelas PanelTest. Metode yang digunakan untuk melekatkan event handler ke sebuah elemen adalah addSelectionListener. Penekanan tombol buka (Source) akan memicu metode LoadSource(). Penekanan tombol simpan (Target) akan memicu metode SaveTarget(). Proses enkripsi dipicu oleh penekanan tombol enkripsi. Proses dekripsi dipicu oleh penekanan tombol dekripsi. Berikut ini adalah kode program untuk melekatkan event handler untuk tombol buka, enkripsi, dekripsi dan simpan.
formTest.buttonSource.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { LoadSource(); } });
54
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
formTest.buttonTarget.addSelectionListener(new SelectionAdapter() {
@Override public void
widgetSelected(SelectionEvent e) { SaveTarget(); } });
formTest.buttonEncrypt.addSelectionListener(new SelectionAdapter() {
@Override public
void widgetSelected(SelectionEvent e) { Encrypt(); } });
formTest.buttonDecrypt.addSelectionListener(new SelectionAdapter() { void widgetSelected(SelectionEvent e) { Decrypt(); } });
55
@Override public
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
7. Pemuatan dan Penyimpanan File Pemuatan file dipicu oleh tombol buka. Proses ini menggunakan kelas BinaryReader. Hasil pembacaan file akan disimpan di memory dalam bentuk array byte sesuai besar file yang dibaca. Berikut ini adalah inti kode program untuk membuat isi file ke dalam memori.
File file = new File(filename); filebuffer = new byte[(int) file.length()]; try { FileInputStream inputStream = new FileInputStream(filename); int byteread = 0; while ((byteread = inputStream.read(filebuffer)) != -1) { filesize += byteread; } inputStream.close(); System.out.println("Read " + filesize + " bytes"); }
Penyimpanan file dipicu oleh tombol simpan. Proses ini menggunakan kelas BinaryWriter. Data yang akan disimpan berasal dari memory dalam bentuk 56
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
array byte. Berikut ini adalah inti kode program untuk menyimpan data ke dalam file.
try { FileOutputStream outputStream = new FileOutputStream(filename); outputStream.write(filebuffer,0,filesize); outputStream.close(); System.out.println("Wrote " + filebuffer.length + " bytes"); }
4.2.2. Proses Enkripsi dan Dekripsi Proses enkripsi dan dekripsi aplikasi menggunakan kelas yang sudah ada pada pustaka Java. Kelas yang digunakan untuk membuat kunci adalah kelas SecretKeySpec, sedangkan kelas yang digunakan untuk mengenkripsi dan mendekripsi adalah kelas Chiper. Proses enkripsi diawali dengan pembuatan kunci rahasia menggunakan algoritma Blowfish berdasarkan katakunci yang dimasukkan pengguna. Aplikasi selanjutnya menginstantiasi kelas Chiper untuk algoritma Blowfish. Inisiasi chiper dilakukan untuk menentukan mode proses ke enkripsi dengan kunci yang telah dibuat. Proses selanjutnya adalah melakukan enkripsi data menggunakan metode
57
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
doFinal(). Kunci, data asal dan hasil enkripsi berupa array byte. Berikut ini adalah kode program untuk enkripsi.
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "Blowfish"); Cipher cipher = Cipher.getInstance("Blowfish"); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); byte[] encryptedByte = cipher.doFinal(byteText); return encryptedByte;
Proses dekripsi diawali dengan pembuatan kunci rahasia menggunakan algoritma Blowfish berdasarkan katakunci yang dimasukkan pengguna. Aplikasi selanjutnya menginstantiasi kelas Chiper untuk algoritma Blowfish. Inisiasi chiper dilakukan untuk menentukan mode proses ke dekripsi dengan kunci yang telah dibuat. Proses selanjutnya adalah melakukan dekripsi data menggunakan metode doFinal(). Kunci, data asal dan hasil dekripsi berupa array byte. Berikut ini adalah kode program untuk dekripsi.
System.out.println("Decrypting"); SecretKeySpec secretKeySpec = new SecretKeySpec(key, "Blowfish"); Cipher cipher = Cipher.getInstance("Blowfish");
58
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); byte[] decryptedByte = cipher.doFinal(byteText); return decryptedByte;
Kode program yang digunakan untuk mengukur waktu enkripsi atau dekripsi diletakkan tepat diatas dan dibawah kode program untuk memanggil metode untuk enkripsi atau dekripsi. Peletakan kode program tepat sebelum dan sesudah dimaksudkan agar waktu yang dihasilkan merupakan waktu yang akurat untuk menggambarkan lamanya proses enkripsi dan dekripsi. Berikut ini adalah kode program yang digunakan untuk mengukur waktu proses enkripsi dan dekripsi. // Enkripsi: Long startTime = System.currentTimeMillis(); byteOutput = blowFish.encrypt(byteInput, byteKey); Long estimatedTime = System.currentTimeMillis() - startTime;
// Dekripsi: Long startTime = System.currentTimeMillis(); byteOutput = blowFish.decrypt(byteInput, byteKey); Long estimatedTime = System.currentTimeMillis() - startTime;
59
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
4.2.3. Pengujian Aplikasi Pengujian aplikasi yang digunakan uji kesalah sintaks, uji kesalahan logika, uji white box dan uji black box. Keberhasilan uji kesalahan sintaks dan uji kesalahan logika ditandai dengan tidak adanya pesan kesalahan sintaks penulisan kode program dan tidak adanya kesalahan logika program. Uji white box adalah pengujian aplikasi terhadap keberhasilan aplikasi melakukan kebutuhan minimal aplikasi dengan melihat kode program dari fungsi tersebut. Uji white box dilakukan dengan melihat kode program dan menguji hasil semua fungsi kebutuhan minimal yang dilakukan oleh aplikasi. Keberhasilan fungsi sistem ditandai dengan ketepatan penulisan kode program dan berhasilnya aplikasi melakukan fungsi yang telah ditentukan. Pengujian ini dilakukan oleh orang-orang yang mengerti dan memahami pemrograman. Uji black box adalah pengujian sistem terhadap keberhasilan aplikasi melakukan fungsi minimal yang harus dimiliki aplikasi tanpa melihat kode program fungsi tersebut. Uji black box dilakukan dengan menguji hasil semua fungsi minimal aplikasi. Keberhasilan fungsi sistem ditandai dengan berhasilnya aplikasi melakukan fungsi minimal aplikasi. Pengujian ini dilakukan oleh orangorang yang tidak mengerti pemrograman tetapi mengetahui apa yang seharusnya dapat dilakukan oleh sistem. Berikut ini adalah daftar proses yang telah diuji.
60
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Tabel 4.1. Hasil Pengujian Terhadap Kebutuhan Fungsional
No
Proses yang Diuji
Hasil Uji
White Box
Black Box
Sintaks
Logika
dan Non Fungsional
1
Membuka file yang akan dienkripsi atau didekripsi
OK
OK
OK
OK
dan menampilkannya 2
Melakukan enkripsi dan menampilkan hasilnya
OK
OK
OK
OK
3
Melakukan dekripsi dan menampilkan hasilknya
OK
OK
OK
OK
4
Menampilkan waktu yang diperlukan untuk proses
OK
OK
OK
OK
OK
OK
OK
OK
enkripsi dan dekripsi 5
Menyimpan hasil proses enkripsi atau dekripsi ke dalam file.
4.2.3. Uji Algoritma Pengambilan data waktu proses enkripsi dan dekripsi dilakukan terhadap 32 data teks yang memiliki besar berbeda. Besar data yang digunakan dimulai dari 1 Mega Byte sampai dengan 32 Mega Byte dengan masing-masing interval
61
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
konstan 1 Mega Byte. Masing-masing ukuran data diambil datanya sebanyak 3 kali. Nilai yang digunakan adalah nilai rerata dari ketiga nilai tersebut. Berikut ini adalah data waktu yang perlukan untuk proses enkripsi dan dekripsi.
Tabel 4.2. Tabel Waktu Enkripsi dan Dekripsi Algoritma Blowfish Waktu (ms) No
Besar Data (MB) Enkripsi
Dekripsi
1 1
17.33
18.33
2 2
34.00
36.33
3 3
51.67
57.00
4 4
69.33
75.00
5 5
87.67
93.67
6 6
105.33
114.67
7 7
123.00
132.67
8 8
142.00
152.33
9 9
158.67
168.67
10 10
175.67
188.67
62
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Waktu (ms) No
Besar Data (MB) Enkripsi
Dekripsi
11 11
194.00
209.67
12 12
210.67
228.33
13 13
228.00
244.00
14 14
245.00
265.67
15 15
263.33
285.00
16 16
290.67
304.33
17 17
298.67
321.67
18 18
315.67
342.67
19 19
332.67
359.00
20 20
350.00
381.33
21 21
374.00
405.00
22 22
391.67
420.00
23 23
402.00
433.33
24 24
420.33
446.67
63
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Waktu (ms) No
Besar Data (MB) Enkripsi
Dekripsi
25 25
438.00
470.67
26 26
458.33
492.00
27 27
473.33
512.33
28 28
489.67
533.33
29 29
507.33
563.00
30 30
524.67
589.67
31 31
543.67
619.00
32 32
560.67
646.00
Untuk mempermudah analisis algoritma menggunakan metode big O dilakukan secara visual. Cara ini dilakukan dengan membandingkan grafik waktu pengujian dengan grafik notasi big O. Berikut ini adalah garfik waktu yang dihasilkan.
64
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
700 600
Waktu Proses (ms)
500 400 300 200 100
Besar Data (MB)
Enkripsi
31
29
27
25
23
21
19
17
15
13
11
9
7
5
3
1
0
Dekripsi
Gambar 4.13. Gambar Grafik Waktu Enkripsi dan Dekripsi Algoritma Blowfish Hasil visual grafik di atas menunjukkan bahwa algoritma Blowfish termasuk dalam kelas linear atau konstan (O(n)). Kelas ini memiliki grafik yang cenderung berbentuk lurus. Besar data yang diproses tidak mempengaruhi bentuk garis. Berikut ini adalah gambaran berbagai macam kelas Linear [9] :
65
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Gambar 4.14. Gambar Grafik Kompleksitas Metode Big-O Kelas Linear
Normalisasi grafik diperlukan agar nilai aksis vertikal (waktu) memiliki nilai yang sama dengan nilai aksis horizontal (besar data). Nilai maksimal aksis vertikal diubah menjadi 32 sesuai dengan nilai maksimal nilai aksis horizontal. Satuan aksis vertikal diubah menjadi detik (s). Panjang aksis vertikal juga disamakan dengan panjang aksis horizontal. Berikut ini adalah gambar hasil normalisasi grafik.
66
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
30
Waktu Proses (s)
25
20
15
10
5
31
29
27
25
23
21
19
17
15
13
11
9
7
5
3
1
0
Besar Data (MB) Enkripsi Dekripsi
Gambar 4.15. Gambar Hasil Normalisasi Grafik Algoritma Blowfish
Perbandingan grafik kompleksitas metode big O kelas linear dengan grafik algoritma Blowfish yang telah dinormalisasi menunjukkan bahwa algoritma Blowfish memiliki efisiensi yang baik atau memiliki kompleksitas yang rendah (sederhana). Grafik hasil normalisasi menunjukkan bahwa algoritma Blowfish memiliki garis yang sangat landai. Algoritma yang kompleks (tidak efisien) akan memiliki bentuk curam sedangkan algoritma yang sederhana (efisien) akan memiliki bentuk landai.
67
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
BAB V PENUTUP
5.1 KESIMPULAN Analisis Algoritma kriptografi blowfish menggunakan metode Big-O bisa mengukur suatu program apakah kompleks atau tidak. Dalam penelitian kali ini Algoritma yang diuji adalah algoritma kriptografi blowfish. Dapat disimpulkan Implementasi sistem telah berhasil dilakukan sesuai dengan analisis dan perancangan yang telah dilakukan. Hasil dari penelitian adalah sebuah aplikasi, data pengujian aplikasi dan data pengujian algoritma. Aplikasi dapat digunakan untuk mengenkripsi dan mendekripsi data dengan algoritma blowfish. Pengujian algoritma blowfish dengan menggunakan big-O menunjukkan bahwa algoritma Blowfish termasuk dalam kelas linear atau konstan (O(n)). Kelas ini memiliki grafik yang cenderung berbentuk lurus. Besar data yang diproses tidak mempengaruhi bentuk garis.
5.2.SARAN Saran yang dapat penulis berikan bagi peneliti selanjutnya adalah : •
Sistem ini masih jauh dari kesempurnaan dan masih memiliki banyak kekurangan. Oleh karena itu, sebaiknya bagi peneliti
68
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
selanjutnya dapat memperbaiki kekurangan dan meningkatkan kualitas sistem, diantaranya adalah: •
Sistem mampu menerima data input dari berbagai jenis file.
•
Data yang dipakai dalam jumlah besar dan bervariasi.
•
Pengujian dengan menggunakan metode Big-O tidak hanya dilakukan secara visual dengan membandingkan waktu proses enkripsi dan dekripsi menggunakan grafik, tetapi juga dapat dilakukan dengan perhitungan matematis.
69
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
DAFTAR PUSTAKA
[1] Sadikin, Rifki. 2012. KRIPTOGRAFI UNTUK KEAMANAN JARINGAN [2] Rinaldi. 2007. http://www.informatika.org/~rinaldi/Kriptografi/20072008/Makalah1/ MakalahIF5054-2007-A-051.pdf, [online], diakses pada tanggal 5 Mei 2015 [3] Fanani, Ikhsan. 2007. PENGGUNAAN BIG O NOTATION UNTUK MENGANALISA EFISIENSI ALGORITMA, www.informatika.stei.itb.ac.id/~rinaldi.munir/Matdis/2006-2007/Makalah/ Makalah0607-129.pdf, [online], diakses pada tanggal 1 Juni 2015. [4] Trisnawati. 2007. SISTEM KEAMANAN MENGGUNAKAN ALGORITMA BLOWFISH ADVANCE CS PADA FILE DAN FOLDER DATA, www.unsri.ac.id/ upload/arsip/ Trisnawati 08053111015.doc, [online], diakses pada tanggal 4 April 2015 [5] Noname. 2002. BUKU AJAR NUMERIK, www.unsri.ac.id/upload/arsip/ ANALISIS% 20ALGORITMA.pdf, [online], diakses pada tanggal 1 Mei 2015 [6]Azizah Ulvah Nur. 2013. ANALISIS ALGORITMA. http://repository.upi.edu/ 2878/6/S_MTK_0900249_CHAPTER3.pdf, [online], diakses pada tanggal 2 Juni 2015 [7] Rowel, 2015. http://bigocheatsheet.com/, [online], diakses pada tanggal 17 Juli 2015 [8] Noname, 2002. http://science.slc.edu/~jmarshall/courses/2002/spring/cs50/ BigO/, [online], diakses pada tanggal 17 September 2015 [9] Noname, 2002. http://science.slc.edu/~jmarshall/courses/ 2002/spring/cs50/ BigO/. diakses pada tanggal 17 September 2015
70
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
LAMPIRAN I Stored Procedure
1. Stored Procedure BinaryReader •
Listing : package blowfish;
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException;
public class BinaryReader {
public String filename; public byte[] filebuffer; public int filesize;
public BinaryReader() { }
public BinaryReader(String filename) { this.filename = filename; }
public void readFile() { this.Read(); }
public void readFile(String filename) { this.filename = filename; this.Read(); }
private void Read() { File file = new File(filename); filebuffer = new byte[(int) file.length()];
71
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
try { FileInputStream inputStream = new FileInputStream(filename); int byteread = 0; while ((byteread = inputStream.read(filebuffer)) != -1) { filesize += byteread; } inputStream.close(); System.out.println("Read " + filesize + " bytes"); } catch (FileNotFoundException ex) { System.out.println("Unable to open file '" + filename + "'"); } catch (IOException ex) { System.out.println("Error reading file '" + filename + "'"); } } }
2. Stored Procedure BinaryWriter •
Listing : package blowfish;
import java.io.FileOutputStream; import java.io.IOException;
public class BinaryWriter {
public String filename; public byte[] filebuffer; public int filesize;
public BinaryWriter() { }
public BinaryWriter(String filename) { this.filename = filename; }
public void writeFile() { this.write(); }
72
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
public void writeFile(String filename) { this.filename = filename; this.write(); }
private void write() { try { FileOutputStream outputStream = new FileOutputStream(filename); outputStream.write(filebuffer,0,filesize); outputStream.close(); System.out.println("Wrote " + filebuffer.length + " bytes"); } catch (IOException ex) { System.out.println("Error writing file '" + filename + "'"); } } }
3. Stored Procedure Blowfish •
Listing : package blowfish;
import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec;
public class Blowfish {
public byte[] encrypt(byte[] byteText, byte[] key) throws Exception { System.out.println("Encrypting"); SecretKeySpec secretKeySpec = new SecretKeySpec(key, "Blowfish"); Cipher cipher = Cipher.getInstance("Blowfish"); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); byte[] encryptedByte = cipher.doFinal(byteText); return encryptedByte;
}
public byte[] decrypt(byte[] byteText, byte[] key) throws Exception {
73
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
System.out.println("Decrypting"); SecretKeySpec secretKeySpec = new SecretKeySpec(key, "Blowfish"); Cipher cipher = Cipher.getInstance("Blowfish"); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
//
byte[] hasil = cipher.doFinal(new
BASE64Decoder().decodeBuffer(string)); byte[] decryptedByte = cipher.doFinal(byteText); return decryptedByte; } }
4. Stored Procedure DisplayMain •
Listing : package blowfish;
import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell;
public class DisplayMain {
Display display; Shell shell;
InitHeader initHeader; InitFooter initFooter; InitPanel initPanel;
public DisplayMain(Display display, Shell shell) { this.display = display; this.shell = shell;
shell.setLayout(new FormLayout());
initHeader = new InitHeader(display, shell); initHeader.Create();
74
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
initFooter = new InitFooter(display, shell); initFooter.Create();
initPanel = new InitPanel(display, shell); initPanel.Create();
shell.pack(); shell.setSize(1010, 620); shell.open();
while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } }
display.dispose(); } }
5. Stored Procedure FormTest •
Listing : package blowfish;
import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.RowData; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Text;
public class FormTest {
75
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
Display display; Composite compositeParrent; Composite compositeForm;
CLabel labelInfo; CLabel labelKey; CLabel labelSource; CLabel labelTarget; CLabel labelTime;
Text textKey; Text textSource; Text textTarget; Text textInput; Text textOutput; Text textTime;
Button buttonSource; Button buttonTarget; Button buttonEncrypt; Button buttonDecrypt;
public FormTest(Display display, Composite composite) { this.display = display; this.compositeParrent = composite; }
public void Create() { compositeForm = new Composite(compositeParrent, SWT.NONE); compositeForm.setLayout(new RowLayout(SWT.VERTICAL));
GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 3; gridLayout.marginHeight = 0; gridLayout.verticalSpacing = 2; gridLayout.marginWidth = 0; gridLayout.horizontalSpacing = 2; compositeForm.setLayout(gridLayout); CreateForm(); }
76
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
private void CreateForm() { int labelWidth = 100; int buttonWidth = 100; int textWidth = 770; int fullWidth = 870;
System.out.println("Creating test form");
labelKey = new CLabel(compositeForm, SWT.NONE); labelKey.setText("Kunci"); labelKey.setLayoutData(new GridData(labelWidth, 17));
textKey = new Text(compositeForm, SWT.BORDER); textKey.setLayoutData(new GridData(900, 17)); addSpanData(textKey, 2);
labelSource = new CLabel(compositeForm, SWT.NONE); labelSource.setText("File input"); labelSource.setLayoutData(new GridData(labelWidth, 17));
textSource = new Text(compositeForm, SWT.BORDER | SWT.READ_ONLY); textSource.setBackground(new Color(display.getCurrent(), 230, 230, 230)); textSource.setLayoutData(new GridData(textWidth, 17));
buttonSource = new Button(compositeForm, SWT.PUSH); buttonSource.setText("Buka"); buttonSource.setAlignment(SWT.CENTER); buttonSource.setLayoutData(new GridData(buttonWidth, 21));
CLabel labelProcessspacer = new CLabel(compositeForm, SWT.NONE); labelProcessspacer.setText("");
Composite compositeRow1 = new Composite(compositeForm, SWT.NONE); compositeRow1.setLayout(new RowLayout(SWT.HORIZONTAL)); addSpanData(compositeRow1, 2);
RowData buttonRowdata = new RowData(); buttonRowdata.height = 21; buttonRowdata.width = buttonWidth;
77
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
buttonEncrypt = new Button(compositeRow1, SWT.PUSH); buttonEncrypt.setText("Enkripsi"); buttonEncrypt.setAlignment(SWT.CENTER); buttonEncrypt.setLayoutData(buttonRowdata);
buttonDecrypt = new Button(compositeRow1, SWT.PUSH); buttonDecrypt.setText("Dekripsi"); buttonDecrypt.setAlignment(SWT.CENTER); buttonDecrypt.setLayoutData(buttonRowdata);
CLabel labelInput = new CLabel(compositeForm, SWT.NONE); labelInput.setText("Input");
Composite compositeRow2 = new Composite(compositeForm, SWT.NONE); compositeRow2.setLayout(new RowLayout(SWT.HORIZONTAL)); addSpanData(compositeRow2, 2);
RowData textareaRowdata = new RowData(); textareaRowdata.height = 150; textareaRowdata.width = 855;
textInput = new Text(compositeRow2, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL | SWT.READ_ONLY); textInput.setBackground(new Color(display.getCurrent(), 230, 230, 230)); textInput.setLayoutData(textareaRowdata);
CLabel labelOutput = new CLabel(compositeForm, SWT.NONE); labelOutput.setText("Output");
Composite compositeRow3 = new Composite(compositeForm, SWT.NONE); compositeRow3.setLayout(new RowLayout(SWT.HORIZONTAL)); addSpanData(compositeRow3, 2);
textOutput = new Text(compositeRow3, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL | SWT.READ_ONLY); textOutput.setBackground(new Color(display.getCurrent(), 230, 230, 230)); textOutput.setLayoutData(textareaRowdata);
labelTarget = new CLabel(compositeForm, SWT.NONE); labelTarget.setText("File output"); labelTarget.setLayoutData(new GridData(labelWidth, 17));
78
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
textTarget = new Text(compositeForm, SWT.BORDER | SWT.READ_ONLY); textTarget.setBackground(new Color(display.getCurrent(), 230, 230, 230)); textTarget.setLayoutData(new GridData(textWidth, 17));
buttonTarget = new Button(compositeForm, SWT.PUSH); buttonTarget.setText("Simpan"); buttonTarget.setAlignment(SWT.CENTER); buttonTarget.setLayoutData(new GridData(buttonWidth, 21));
labelTime = new CLabel(compositeForm, SWT.NONE); labelTime.setText("Waktu (ms)"); labelTime.setLayoutData(new GridData(labelWidth, 17));
textTime = new Text(compositeForm, SWT.BORDER | SWT.READ_ONLY); textTime.setBackground(new Color(display.getCurrent(), 230, 230, 230)); textTime.setLayoutData(new GridData(100, 17)); }
private static void addSpanData(CLabel comp, int span) { GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false); data.horizontalSpan = span; comp.setLayoutData(data); }
private static void addSpanData(Text comp, int span) { GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false); data.horizontalSpan = span; comp.setLayoutData(data); }
private static void addSpanData(Composite comp, int span) { GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false); data.horizontalSpan = span; comp.setLayoutData(data); }
public void Hide() { compositeForm.setVisible(false); }
79
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
public void Show() { SpaceTab spaceTab = new SpaceTab(); compositeForm.setLocation(spaceTab.Get()); compositeForm.setVisible(true); } }
6. Stored Procedure InitFooter •
Listing : package blowfish;
import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell;
public class InitFooter { Display display; Shell shell; Composite composite; Composite containerFooter; FormData formData;
public InitFooter(Display display, Shell shell) { this.display = display; this.shell = shell; }
public void Create() { System.out.println("Creating footer container");
80
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
formData = new FormData(); formData.left = new FormAttachment(0); formData.top = new FormAttachment(92); formData.width = 1010; formData.height = 50;
containerFooter = new Composite(shell, SWT.NONE); containerFooter.setBackground(new Color(display.getCurrent(), 32, 32, 32)); containerFooter.setLayoutData(formData);
GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 1; gridLayout.marginHeight = 0; gridLayout.verticalSpacing = 0; gridLayout.marginWidth = 0; gridLayout.horizontalSpacing = 0; gridLayout.marginTop=10; gridLayout.marginBottom=0; gridLayout.marginLeft=10; gridLayout.marginRight=10; containerFooter.setLayout(gridLayout);
CLabel labelCreator = new CLabel(containerFooter, SWT.NONE); labelCreator.setText("Oleh : Yohanes Catur Teguh Raharjo (085314081)"); labelCreator.setLayoutData(new GridData(900, 16)); labelCreator.setBackground(new Color(display.getCurrent(), 32, 32, 32)); labelCreator.setForeground(new Color(display.getCurrent(), 223, 223, 223));
CLabel labelUniversity = new CLabel(containerFooter, SWT.NONE); labelUniversity.setText("Program Studi TI, Universitas Sanata Dharma, Yogyakarta, 2015"); labelUniversity.setLayoutData(new GridData(900, 16)); labelUniversity.setBackground(new Color(display.getCurrent(), 32, 32, 32)); labelUniversity.setForeground(new Color(display.getCurrent(), 223, 223, 223)); } }
81
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
7. Stored Procedure InitHeader •
Listing : package blowfish;
import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell;
public class InitHeader {
Display display; Shell shell; Composite composite;
Composite containerHeader; FormData formData;
public InitHeader(Display display, Shell shell) { this.display = display; this.shell = shell; }
public void Create() { System.out.println("Creating header container");
formData = new FormData(); formData.left = new FormAttachment(0); formData.top = new FormAttachment(0); formData.width = 1010; formData.height = 70;
82
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
containerHeader = new Composite(shell, SWT.NONE); containerHeader.setBackground(new Color(display.getCurrent(), 32, 32, 32));
containerHeader.setLayoutData(formData);
GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 1; gridLayout.marginHeight = 0; gridLayout.verticalSpacing = 1; gridLayout.marginWidth = 0; gridLayout.horizontalSpacing = 1; gridLayout.marginTop = 10; gridLayout.marginBottom = 10; gridLayout.marginLeft = 10; gridLayout.marginRight = 10; containerHeader.setLayout(gridLayout);
CLabel labelApplication = new CLabel(containerHeader, SWT.NONE); labelApplication.setText("Aplikasi Enkripsi Dan Dekripsi "); labelApplication.setLayoutData(new GridData(500, 26)); FontData[] fontApplication = labelApplication.getFont().getFontData(); fontApplication[0].setHeight(18); labelApplication.setBackground(new Color(display.getCurrent(), 32, 32, 32)); labelApplication.setForeground(new Color(display.getCurrent(), 255, 255, 255)); labelApplication.setFont(new Font(containerHeader.getDisplay(), fontApplication));
CLabel labelAlgorithm = new CLabel(containerHeader, SWT.NONE); labelAlgorithm.setText("Menggunakan Algoritma Kriptografi Blowfish"); labelAlgorithm.setLayoutData(new GridData(500, 20)); FontData[] fontAlgorithm = labelAlgorithm.getFont().getFontData(); fontAlgorithm[0].setHeight(12); labelAlgorithm.setBackground(new Color(display.getCurrent(), 32, 32, 32)); labelAlgorithm.setForeground(new Color(display.getCurrent(), 223, 223, 223)); labelAlgorithm.setFont(new Font(containerHeader.getDisplay(), fontAlgorithm));
}
}
83
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
8. Stored Procedure InitPanel •
Listing : package blowfish;
import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell;
public class InitPanel {
Display display; Shell shell; Composite composite;
Composite containerTest;
PanelTest panelTest;
public InitPanel(Display display, Shell shell) { this.display = display; this.shell = shell; }
@SuppressWarnings("unused") public void Create() { System.out.println("Creating main container");
FormData formData = new FormData(); formData.left = new FormAttachment(0,8); formData.top = new FormAttachment(14); formData.width = 990; formData.height = 535;
84
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
containerTest = new Composite(shell, SWT.NONE); containerTest.setLayout(new RowLayout(SWT.VERTICAL)); containerTest.setLayoutData(formData); panelTest = new PanelTest(display, shell, containerTest);
}
}
9. Stored Procedure Main •
Listing : package blowfish;
import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.*;
public class Main {
private static Display display; private static Shell shell;
public static void main(String[] args) { System.out.println("Starting application"); System.out.println(""); display = new Display(); shell = new Shell(display, SWT.DIALOG_TRIM);
@SuppressWarnings("unused") DisplayMain displayMain = new DisplayMain(display, shell); }
}
85
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
10. Stored Procedure PanelTest •
Listing : package blowfish;
import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell;
public class PanelTest {
Display display; Shell shell;
FormTest formTest; BinaryReader binaryReader; BinaryWriter binaryWriter;
Blowfish blowFish; String textKey; byte[] byteKey; String textInput; byte[] byteInput; Integer lengthInput; String textOutput; byte[] byteOutput; Integer lengthOutput;
String selectedInput; MessageBox messageBox;
public PanelTest(Display display, Shell shell, Composite composite) { this.display = display; this.shell = shell; this.blowFish = new Blowfish(); this.lengthInput = 0;
86
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
messageBox = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK); messageBox.setText("Kesalahan");
formTest = new FormTest(display, composite); formTest.Create();
formTest.buttonSource.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { LoadSource(); } });
formTest.buttonTarget.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { SaveTarget(); } });
formTest.buttonEncrypt.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Encrypt(); } });
formTest.buttonDecrypt.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Decrypt(); } }); }
87
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
private void LoadSource() { FileDialog filedialog = new FileDialog(shell, SWT.OPEN); filedialog.setText("File Input"); filedialog.setFilterPath(System.getProperty("user.dir") + "/input/"); String[] filterExtention = {"*.*"}; filedialog.setFilterExtensions(filterExtention); selectedInput = filedialog.open();
if (selectedInput != null) { formTest.textInput.setText(""); formTest.textOutput.setText(""); formTest.textSource.setText(selectedInput); binaryReader = new BinaryReader(selectedInput); binaryReader.readFile();
byteInput = new byte[binaryReader.filesize]; System.arraycopy(binaryReader.filebuffer, 0, byteInput, 0, binaryReader.filesize); lengthInput = binaryReader.filesize; textInput = new String(byteInput);
formTest.textInput.setText(textInput); } } private void SaveTarget() { FileDialog filedialog = new FileDialog(shell, SWT.SAVE); filedialog.setText("File Output"); filedialog.setFilterPath(System.getProperty("user.dir") + "/output/"); String[] filterExtention = {"*.*"}; filedialog.setFilterExtensions(filterExtention); String selectedFile = filedialog.open();
if (selectedFile != null) { formTest.textTarget.setText(selectedFile); binaryWriter = new BinaryWriter(selectedFile); binaryWriter.filesize = binaryReader.filesize; binaryWriter.filebuffer = binaryReader.filebuffer; binaryWriter.writeFile(); formTest.textOutput.setText(new String(binaryWriter.filebuffer)); }
88
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
}
private void Encrypt() { formTest.textOutput.setText(""); textKey = formTest.textKey.getText(); byteKey = textKey.getBytes();
if (textKey.length() > 0) { if (lengthInput > 0) { try { byteInput = textInput.getBytes(); Long startTime = System.currentTimeMillis(); byteOutput = blowFish.encrypt(byteInput, byteKey); Long estimatedTime = System.currentTimeMillis() - startTime;
formTest.textTime.setText(estimatedTime.toString()); binaryWriter = new BinaryWriter(selectedInput + ".enc.txt"); binaryWriter.filesize = byteOutput.length; binaryWriter.filebuffer = byteOutput; binaryWriter.writeFile();
textOutput = new String(byteOutput);
formTest.textOutput.setText(textOutput); } catch (Exception ex) { } } else { messageBox.setMessage("Teks input yang akan dienkripsi masih kosong. Silahkan buka file yang akan dienkripsi."); messageBox.open(); } } else { messageBox.setMessage("Kunci masih kosong. Silahkan isi kunci yang akan digunakan."); messageBox.open(); }
89
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
}
private void Decrypt() { formTest.textOutput.setText(""); textKey = formTest.textKey.getText(); byteKey = textKey.getBytes();
if (textKey.length() > 0) { if (lengthInput > 0) { try { byteOutput = blowFish.decrypt(byteInput, byteKey);
binaryWriter = new BinaryWriter(selectedInput + ".dec.txt"); binaryWriter.filesize = byteOutput.length; binaryWriter.filebuffer = byteOutput; binaryWriter.writeFile();
textOutput = new String(byteOutput);
formTest.textOutput.setText(textOutput); } catch (Exception ex) { System.out.println("Error");
} } else { messageBox.setMessage("Teks input yang akan didekripsi masih kosong. Silahkan buka file yang akan didekripsi."); messageBox.open(); } } else { messageBox.setMessage("Kunci masih kosong. Silahkan isi kunci yang akan digunakan."); messageBox.open(); } }
}
90
PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI
11. Stored Procedure SpaceTab •
Listing : package blowfish;
import org.eclipse.swt.graphics.Point;
public class SpaceTab {
public Point Get() { return (new Point(10,40)); }
}
91