Analisis efisiensi algoritma kriptografi blowfish menggunakan notasi big-o dalam proses enkripsi dekripsi file.

(1)

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).


(2)

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.


(3)

ANALISIS EFIS MENGGUNAK

Dia

PROG J FA

i

ISIENSI ALGORITMA KRIPTOGRAFI B AKAN NOTASI BIG-O DALAM PROSES E

DEKRIPSI FILE

Skripsi

Diajukan untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Komputer

Program Studi Teknik Informatika

Oleh:

Yohanes Catur Teguh Raharjo 085314081

OGRAM STUDI TEKNIK INFORMATIKA JURUSAN TEKNIK INFORMATIKA FAKULTAS SAINS DAN TEKNOLOGI

UNIVERSITAS SANATA DHARMA YOGYAKARTA

2015

BLOWFISH ENKRIPSI


(4)

EFFICIENCY ALGORITHM USIN Present T In S INFORM DEPART FACU ii

CY ANALYSIS OF BLOWFISH CRYPTOG SING BIG-O NOTATION DURING FILE E

AND DECRYPTION PROCESS

A Thesis

ented as Partial Fullfillment of the Requiremen

To Obtain the Sarjana Komputer Degree

In Study Program of Informatics Engineering

By :

Yohanes Catur Teguh Raharjo 085314081

MATICS ENGINEERING STUDY PROGR RTMENT OF INFORMATICS ENGINEERI

ULTY OF SCIENCE AND TECHNOLOGY SANATA DHARMA UNIVERSITY

YOGYAKARTA 2015 GRAPHY E ENCRYPTION ents RAM RING GY


(5)

(6)

(7)

v

“JIKA KITA BERUSAHA, MAKA TUHAN AKAN

MEMBERIKAN JALAN”

“KEGAGALAN HANYA TERJADI BILA KITA

MENYERAH”

Skripsi ini saya persembahkan untuk:


(8)

vi


(9)

vii

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).


(10)

viii

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.


(11)

(12)

x

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.


(13)

xi

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


(14)

xii 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


(15)

xiii

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


(16)

xiv

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


(17)

xv

DAFTAR TABEL

Tabel Keterangan Halaman

3.1.

Spesifikasi hardware dan software

31

4.1. Tabel Hasil Pengujian Terhadap Kebutuhan Fungsional 61


(18)

xvi

DAFTAR GAMBAR

Gambar Keterangan Halaman

2.1. Gambar Cryptosystem 7

2.2. Gambar Algoritma Simetri 13

2.3. Gambar Algoritma Simetri 13

2.4.

Gambar Jaringan Feistel

21

2.5.

Gambar Fungsi F

22

2.6.

Gambar diagram skema dekripsi algoritma Blowfish

24

2.7. Gambar Big O notation f(n) ∈ O(g(n)) 25

2.8.

Gambar Grafik Kompleksitas Algoritma Metode Big-O

(1) 27

2.9.

Gambar Grafik Kompleksitas Algoritma Metode Big-O

(2) 28

4.1.

Gambar Implementasi Halaman Utama

35

4.2.

Gambar halaman input kunci

36


(19)

xvii

4.4. Gambar halaman input file 37

4.5. Gambar memilih file input 37

4.6. Gambar file input 38

4.7.

Gambar button enkripsi

38

4.8.

Gambar button dekripsi

39

4.9. Gambar file output 39

4.10. Gambar simpan file 40

4.11. Gambar file Input 40

4.12. Gambar waktu proses 41

4.13.

Gambar Grafik Waktu Enkripsi dan Dekripsi Algoritma

Blowfish 65

4.14.

Gambar Grafik Kompleksitas Metode Big-O Kelas

Linear 66

4.15.

Gambar Hasil Normalisasi Grafik Algoritma Blowfish


(20)

1 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.


(21)

2

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.


(22)

3 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.


(23)

4 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


(24)

5

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.


(25)

6

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 kunci-kuncinya disebut kriptosistem(cryptosystem atau cryptographic system). Secara sederhana proses kriptografi dapat digambarkan sebagai berikut[2]:


(26)

7

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]:


(27)

8

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.


(28)

9

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.


(29)

10

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


(30)

11

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


(31)

12

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


(32)

13

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


(33)

14

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


(34)

15

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.


(35)

16

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 32-bit 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.


(36)

17

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


(37)

18

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. Blowfish memanfaatkan kotak permutasi dalam beberapa prosesnya. 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


(38)

19

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 subkunci-subkunci 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.


(39)

20

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 :


(40)

21

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 :


(41)

22

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.


(42)

23

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.


(43)

24

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


(44)

25

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


(45)

26

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] :


(46)

27

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.


(47)

28

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 bahwa algoritma tersebut adalah algoritma factorial. Algoritma jenis ini 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.


(48)

29

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.


(49)

30 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


(50)

31

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 :


(51)

32

3.2.1.1. Diagram alir enkripsi Blowfish


(52)

33

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.


(53)

34 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.


(54)

35 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.


(55)

36

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


(56)

37

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.


(57)

38

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 :


(58)

39

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.


(59)

40

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 :


(60)

41

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


(61)

42

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.


(62)

43

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();


(63)

44

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);


(64)

45

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));


(65)

46

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));


(66)

47

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);


(67)

48

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));


(68)

49

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


(69)

50

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);


(70)

51

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);


(71)

52

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.


(72)

53

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));


(73)

54

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(); }


(74)

55

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(); }


(75)

56 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


(76)

57

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


(77)

58

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");


(78)

59

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);


(79)

60 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 orang-orang yang tidak mengerti pemrograman tetapi mengetahui apa yang seharusnya dapat dilakukan oleh sistem. Berikut ini adalah daftar proses yang telah diuji.


(80)

61

Tabel 4.1. Hasil Pengujian Terhadap Kebutuhan Fungsional

dan Non Fungsional

No Proses yang Diuji Hasil Uji

W h it e B o x B la ck B o x S in ta k s L o g ik a

1 Membuka file yang akan dienkripsi atau didekripsi dan menampilkannya

OK OK OK OK

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 enkripsi dan dekripsi

OK OK OK OK

5 Menyimpan hasil proses enkripsi atau dekripsi ke dalam file.

OK OK OK OK

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


(81)

62

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

No Besar Data (MB)

Waktu (ms)

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


(82)

63

No Besar Data (MB)

Waktu (ms)

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


(83)

64

No Besar Data (MB)

Waktu (ms)

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.


(84)

65

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] :

0 100 200 300 400 500 600 700

1 3 5 7 9

1 1 1 3 1 5 1 7 1 9 2 1 2 3 2 5 2 7 2 9 3 1 W a k tu P ro st s (m s)


(85)

66

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.


(86)

67

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.

0 5 10 15 20 25 30

1 3 5 7 9

1 1 1 3 1 5 1 7 1 9 2 1 2 3 2 5 2 7 2 9 3 1 W a k tu P ro st s (s )

Btsar Data (MB)


(87)

68

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


(88)

69

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.


(89)

70

DAFTAR PUSTAKA

[1] Sadikin, Rifki. 2012. KRIPTOGRAFI UNTUK KEAMANAN JARINGAN [2] Rinaldi. 2007.

http://www.informatika.org/~rinaldi/Kriptografi/2007-2008/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


(90)

71 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()];


(91)

72

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();


(92)

73

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;

}


(1)

86

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;


(2)

87

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();

} }); }


(3)

88

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));


(4)

89

}

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(); }


(5)

90

}

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(); }

}


(6)

91

11. Stored Procedure SpaceTab

Listing :

package blowfish;

import org.eclipse.swt.graphics.Point;

public class SpaceTab {

public Point Get() {

return (new Point(10,40)); }