121
TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH oleh PRASETYO BAWONO M0103045 SKRIPSI Ditulis dan diajukan untuk memenuhi sebagian persyaratan Memperoleh gelar Sarjana Sains Matematika FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SEBELAS MARET SURAKARTA 2010

TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

  • Upload
    vandiep

  • View
    236

  • Download
    0

Embed Size (px)

Citation preview

Page 1: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

TEKNIK PENGAMANAN DATA

MENGGUNAKAN ALGORITMA BLOWFISH

oleh

PRASETYO BAWONO

M0103045

SKRIPSI

Ditulis dan diajukan untuk memenuhi sebagian persyaratan

Memperoleh gelar Sarjana Sains Matematika

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS SEBELAS MARET

SURAKARTA

2010

Page 2: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

ii

SKRIPSI

TEKNIK PENGAMANAN DATA

MENGGUNAKAN ALGORITMA BLOWFISH

yang disiapkan dan disusun oleh

PRASETYO BAWONO

NIM. M0103045

dibimbing oleh

Pembimbing I,

Drs. YS. Palgunadi, M.Sc

NIP. 19560407 198303 1 004

Pembimbing II,

Drs. Siswanto, M.Si

NIP. 19670813 199203 1 002

telah dipertahankan di depan Dewan Penguji

pada hari Kamis, tanggal 28 Januari 2010

dan dinyatakan telah memenuhi syarat.

Anggota Tim Penguji Tanda Tangan

1. Titin Sri Martini, S.Si, M.Kom

NIP. 19750120 200812 2 001

1. ……………………………………...

2. Bowo Winarno, S.Si, M.Kom

NIP. 19810430 200812 1 001

2. ……………………………………...

3. DR. Sutanto, DEA

NIP. 19710302 199603 1 001

3. ……………………………………...

Disahkan oleh

Fakultas Matematika dan Ilmu Pengetahuan Alam

Dekan,

Prof. Drs. Sutarno, M.Sc, Ph.D

NIP. 19600809 198612 1 001

Ketua Jurusan Matematika

Drs. Sutrima, M.Si

NIP. 19661007 199302 1 001

Page 3: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

iii

ABSTRAK

Prasetyo Bawono, 2010. TEKNIK PENGAMANAN DATA

MENGGUNAKAN ALGORITMA BLOWFISH. Fakultas Matematika dan Ilmu

Pengetahuan Alam, Universitas Sebelas Maret.

Kriptografi merupakan suatu ilmu untuk menjaga kerahasiaan data / pesan

sehingga data tidak dapat diketahui oleh pihak lain. Algoritma Blowfish

merupakan salah satu algoritma kriptografi modern yang telah teruji dan banyak

dipakai oleh berbagai pihak. Sistem operasi OpenBSD memasukkan Blowfish

sebagai algoritma enkripsi utama dalam mengamankan user di dalam sistemnya

(user authentication). Selain itu, PuTTY sebuah program SSH (Secure Shell)

Client untuk Microsoft® Windows® pun juga menggunakan Blowfish sebagai

salah satu metode enkripsinya.

Algoritma Blowfish merupakan algoritma yang berjalan pada mode cipher

blok dengan operasi yang sangat sederhana. Blowfish menggunakan operasi

penambahan, ekslusif OR (XOR) dan penelusuran tabel. Tujuan penelitian ini

adalah membuat aplikasi sederhana enkripsi data teks (pesan) dengan

menggunakan algoritma Blowfish dalam empat mode enkripsi cipher blok: ECB

(Electronic Code Book), CBC (Cipher Block Chainning), CFB (Cipher FeedBack)

dan OFB (Output FeedBack).

Metode yang digunakan dalam menulis skripsi adalah studi literatur

tentang keamanan data, kriptografi (algoritma Blowfish), perencanaan sistem,

pembuatan aplikasi algoritma Blowfish, pengujian dan analisa aplikasi algoritma

Blowfish dengan notasi Big O.

Evaluasi terhadap aplikasi enkripsi pesan menggunakan algoritma

Blowfish dalam empat mode terhadap tiga buah file dengan ukuran yang berbeda-

beda (22 bytes, 202 Kilobytes dan 1,1 Megabytes) menunjukkan hasil selisih

waktu yang tidak jauh berbeda. Sedangkan untuk kompleksitas waktu dari ke-

empat mode adalah O(n), dimana n merupakan banyaknya karakter yang

dienkripsi.

Kata kunci : sistem enkripsi data, algoritma kunci simetri, mode enkripsi cipher

blok, Blowfish, kriptografi

Page 4: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

iv

ABSTRACT

Prasetyo Bawono, 2010. DATA SECURITY SYSTEM USING

BLOWFISH ALGORITHM. Faculty of Mathemathics and Natural Sciences,

Sebelas Maret University.

Cryptography is a science aiming to keep the data confidentiality

hindering it from being eavesdropped by other parties. One of modern

cryptography using a symmetric key method that has been tested and widely used

is Blowfish algorithm. It is included in OpenBSD as main encryption algorithm to

secure users in the system (user authentication). PuTTY, a SSH (Secure Shell)

Client program for Microsoft® Windows® also uses Blowfish as one of its

encryption method.

Blowfish is an algorithm that runs on a block cipher with a very simple

operation. It uses addition operation, XOR and look-up tables. The purpose of this

research is to create a simple application of text data (messages) encryption by

using Blowfish algorithm in four block cipher encryption modes: ECB (Electronic

Code Book), CBC (Cipher Block Chaining), CFB (Cipher FeedBack), and OFB

(Output FeedBack).

The method used in writing this thesis is a literature study on data security,

cryptography (especially Blowfish algorithm), system planning, developing of

Blowfish algorithm application, and tests and analysis of Blowfish algorithm

application using Big Oh notation.

Evaluation of the messages encryption application using Blowfish

algorithm in four modes to three files with different sizes (22 bytes, 202

Kilobytes, and 1,1 Megabytes) showed that there was no significant difference in

the run time. However, the time complexity of the all four modes was O(n), where

n was the total characters encrypted.

Keywords : data encryptions system, symmetric key algorithm, block cipher

encryption mode, Blowfish, cryptography.

Page 5: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

v

KATA PENGANTAR

Assalamu’alaikum Warahmatullahi Wabarokatuh.

Bismillahirrahmaanirrahiim. Segala puji hanya milik Allah ‘Azza Wa

Jalla. Rabb semesta alam yang telah memberikan segala nikmat, sehingga skripsi

yang berjudul “Teknik Pengamanan Data Menggunakan Algoritma Blowfish”

dapat terselesaikan.

Penulis juga menyadari akan keterbatasan yang dimiliki, ketergantungan

akan bantuan dan dukungan pribadi-pribadi disekitarnya. Terselesaikannya skripsi

ini tidak terlepas dari bantuan berbagai pihak. Untuk itu, penulis mengucapkan

terima kasih kepada :

1. Drs. YS. Palgunadi, M.Sc, selaku pembimbing I dan Drs. Siswanto, M.Si,

selaku pembimbing II yang telah meluangkan waktunya untuk membimbing,

mengarahkan, dan memberikan motivasi kepada penulis dalam penyusunan

skripsi ini.

2. Umi Salamah, S.Si, M.Kom, selaku dosen pembimbing akademik atas segala

kesabarannya selama ini.

3. Drs. Sutrimo, M.Si, selaku Ketua Jurusan Matematika, Fakultas Matematika

dan Ilmu Pengetahuan Alam, Universitas Sebelas Maret.

4. Prof. Drs. Sutarno, M.Sc, Ph.D, selaku Dekan Fakultas Matematika dan Ilmu

Pengetahuan Alam, Universitas Sebelas Maret.

5. Ibunda, Ayahanda, kakak-kakakku, adikku, dan seluruh keluarga yang telah

mendoakan, dan banyak memberikan bantuan, serta dukungan kepada penulis.

6. DR. Sutanto, DEA., selaku kepala UPT PUSKOM UNS, yang telah

menyediakan berbagai fasilitas kepada penulis.

7. Titin Sri Martini, S.Si, M.Kom dan Bowo Winarno, S.Si, M.Kom selaku

dosen penguji.

8. Rekan-rekan di UPT PUSKOM UNS dan di PT. Javatechno Mandiri

Indonesia, atas motivasi, dukungan dan bantuannya selama ini.

Page 6: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

vi

9. Saudaraku di jurusan Matematika FMIPA UNS dan Syiar Kegiatan Islam

(SKI) FMIPA UNS.

10. Saudaraku di Wisma Madina.

11. Dan semua pihak yang tidak dapat disebutkan satu persatu dalam tulisan ini.

Penulis menyadari bahwa skripsi ini masih jauh dari sempurna, untuk itu saran

dan kritik yang bersifat membangun sangat diharapkan. Akhirnya semoga karya

tulis ini dapat bermanfaat bagi pembaca dan dapat memberikan sumbangan

kebaikan pada perkembangan peradaban ilmu pengetahuan dan teknologi

informasi.

Wassalamu’alaikum Warahmatullahi Wabarokatuh.

Surakarta, Januari 2010

Penulis

Page 7: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

vii

DAFTAR ISI

Halaman

HALAMAN JUDUL .................................................................................. i

PENGESAHAN .......................................................................................... ii

ABSTRAK ................................................................................................. iii

ABSTRACT ............................................................................................... iv

KATA PENGANTAR ............................................................................... v

DAFTAR ISI .............................................................................................. vii

DAFTAR GAMBAR .................................................................................. ix

DAFTAR TABEL ...................................................................................... x

DAFTAR LAMPIRAN .............................................................................. xi

BAB I. PENDAHULUAN

1.1 Latar Belakang Masalah ............................................................. 1

1.2 Perumusan Masalah .................................................................... 2

1.3 Batasan Masalah.......................................................................... 2

1.4 Tujuan Penelitian ....................................................................... 2

1.5 Manfaat Penelitian ..................................................................... 3

BAB II. LANDASAN TEORI

2.1 Tinjauan Pustaka ........................................................................ 4

2.1.1 Algoritma ....................................................................... 4

2.1.2 Lambang Diagram Alir (Flowchart) .............................. 4

2.1.3 Keamanan Data .............................................................. 4

2.1.4 Kriptografi ...................................................................... 6

2.1.5 Cipher Blok .................................................................... 10

2.1.6 Cipher Berulang ............................................................. 12

2.1.7 Jaringan Feistel (Feistel Network) ................................. 12

2.1.8 Kotak-S (S-Box) ............................................................. 13

2.1.9 Algoritma Kriptografi Blowfish ..................................... 14

2.1.10 Mode Operasi Enkripsi Cipher Blok .............................. 17

2.2 Kerangka Pemikiran ................................................................... 23

Page 8: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

viii

BAB III. METODOLOGI PENELITIAN ................................................. 24

BAB IV. PEMBAHASAN

4.1 Analisis Sistem ........................................................................... 26

4.2 Diagam Alir (Flowchart) Aplikasi ............................................. 27

4.3 Perancangan Sistem ................................................................... 28

4.3.1 Rancangan Database ...................................................... 28

4.3.2 Rancangan Form Login .................................................. 28

4.3.3 Rancangan Form Enkripsi dan Dekripsi ........................ 29

4.3.4 Validasi Data Masukan .................................................. 30

4.4 Implementasi Sistem .................................................................. 31

4.5 Evaluasi Sistem .......................................................................... 36

4.5.1 Struktur Algoritma Blowfish ......................................... 36

4.5.2 Uji Coba Aplikasi ........................................................... 40

4.5.3 Analisis Algoritma dengan Notasi Big O ....................... 41

BAB V. PENUTUP

5.1 Kesimpulan ................................................................................ 45

5.2 Saran ........................................................................................... 46

DAFTAR PUSTAKA ................................................................................ 47

LAMPIRAN ............................................................................................... 48

Page 9: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

ix

DAFTAR GAMBAR

Halaman

Gambar 2.1 Simbol Umum Flowchart ..................................................... 4

Gambar 2.2 Skema Enkripsi dan Dekripsi ............................................... 8

Gambar 2.3 Skema Tipe-tipe Cipher ........................................................ 9

Gambar 2.4 Kriptologi, Kriptografi dan Kriptanalisis .................................... 10

Gambar 2.5 Enkripsi Pada Cipher Blok ................................................... 11

Gambar 2.6 Dekripsi Pada Cipher Blok ................................................... 11

Gambar 2.7 Skema Jaringan Feistel Secara Umum ................................. 13

Gambar 2.8 Skema Fungsi F pada algoritma Blowfish ............................ 16

Gambar 2.9 Skema Enkripsi dan Dekripsi dengan Mode ECB ............... 18

Gambar 2.10 Skema Enkripsi dan Dekripsi dengan Mode CBC ............... 20

Gambar 2.11 Skema Enkripsi dan Dekripsi dengan Mode CFB 8-Bit ...... 21

Gambar 2.12 Skema Enkripsi dan Dekripsi dengan Mode OFB 8-bit ...... 23

Gambar 4.1 Alur Sistem Pengamanan Data Teks .................................... 26

Gambar 4.2 Diagram Alir Aplikasi Sistem Pengamanan Data Teks ....... 27

Gambar 4.3 Rancangan Form Sistem Login ............................................ 28

Gambar 4.4 Rancangan Form Sistem Enkripsi ........................................ 29

Gambar 4.5 Rancangan Form Sistem Dekripsi ........................................ 30

Gambar 4.6 Tampilan Form Login .......................................................... 31

Gambar 4.7 Tampilan Form Utama ......................................................... 32

Gambar 4.8 Tampilan Form Enkripsi ...................................................... 33

Gambar 4.9 Pesan Pemberitahuan Enkripsi yang Berhasil ...................... 33

Gambar 4.10 Pesan Peringatan Kesalahan Input Kunci ............................. 34

Gambar 4.11 Dialog Simpan Cipherteks Berekstensi .cip .......................... 34

Gambar 4.12 Pesan Konfirmasi Cipherteks Berhasil Disimpan ................ 35

Gambar 4.13 Tampilan Form Dekripsi ...................................................... 35

Gambar 4.14 Pesan pemberitahuan dekripsi berhasil disimpan ................. 36

Gambar 4.15 Skema Jaringan Feistel Pada Algoritma Blowfish ................ 37

Gambar 4.16 Chart Waktu Enkripsi Tiap Mode ........................................ 40

Gambar 4.17 Chart Waktu Dekripsi Tiap Mode ....................................... 41

Page 10: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

x

DAFTAR TABEL

Halaman

Tabel 2.1 Beberapa Contoh Blok Cipher .................................................. 11

Tabel 3.1 Spesifikasi Hardware ............................................................... 24

Tabel 3.2 Spesifikasi Software ................................................................. 25

Tabel 4.1 Tabel User ................................................................................ 28

Tabel 4.2 Pseudo Code Jaringan Feistel Algoritma Blowfish ................. 38

Tabel 4.3 Pseudo Code fungsi iterasi F() ................................................. 38

Tabel 4.4 Pseudo Code Pembangkitan Sub-kunci ................................... 39

Tabel 4.5 Data Masukan Uji Coba Aplikasi Proses Enkripsi .................. 40

Tabel 4.6 Data Masukan Uji Coba Aplikasi Proses Dekripsi .................. 41

Tabel 4.7 Kompleksitas Waktu Algoritma Blowfish ................................ 43

Tabel 4.8 Kompleksitas Waktu Tiap-tiap Mode ...................................... 43

Page 11: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

xi

DAFTAR LAMPIRAN

Halaman

Lampiran 1 8366 Digit HEX dari Pi (Key Expansion) ........................... 48

Lampiran 2 Form Login (LoginForm.java) ............................................. 51

Lampiran 3 Form Utama (FuguView.java) ............................................. 54

Lampiran 4 Form Enkripsi (BlowfishEnc.java) ....................................... 57

Lampiran 5 Form Dekripsi (BlowfishDec.java) ...................................... 69

Lampiran 6 Class Koneksi Database (DriverConnection.java) ............... 80

Lampiran 7 Class Algoritma Blowfish (BlowfishEngine.java) ............... 82

Lampiran 8 Class Mode Enkripsi CBC (CBCBlockCipher.java) ............ 95

Lampiran 9 Class Mode Enkripsi CFB (CFBBlockCipher.java) ............. 101

Lampiran 10 Class Mode Enkripsi OFB (OFBBlockCipher.java) ............ 107

Page 12: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

1

BAB I

PENDAHULUAN

1.1 Latar Belakang Masalah

Perkembangan Information and Communication Technology (ICT) atau

Teknologi Informasi dan Komunikasi (TIK) dari waktu ke waktu kian meningkat.

Kebutuhan manusia akan perangkat informasi dan komunikasi seakan menjadi

kebutuhan yang tidak terpisahkan dalam kehidupan sehari-hari. Setiap hari,

inovasi dalam bidang ini senantiasa dinamis. Salah satu contohnya adalah

komunikasi data pada jaringan komputer.

Jaringan komputer pada awalnya dikembangkan untuk menghubungkan

antar pihak yang saling mempercayai, dengan tujuan untuk saling menukar

informasi (data). Namun seiring berjalannya waktu dan berkembangnya ilmu

pengetahuan, ada salah satu aspek pendukung yang sangat diperlukan, yaitu

masalah keamanan data.

Dibalik kemudahan serta efisiensi biaya dalam hal berkomunikasi,

berbagai macam jenis komunikasi data yang ada belum tentu aman untuk

digunakan, karena belum tentu adanya standar keamanan yang diterapkan untuk

masing-masing perangkat komunikasi data tersebut. Salah satu contoh yang

pernah terjadi adalah adanya penyadapan pembicaraan melalui telepon antara

Presiden B.J. Habibie dan Jaksa Agung Andi Ghalib pada tahun 1999,

sebagaimana yang termuat dalam majalah Panji Masyarakat tanggal 24 Februari

1999. Hal ini semakin membuktikan bahwa keamanan data (pada contoh ini

adalah data suara) sangat dibutuhkan. Apalagi jika percakapan informasi yang

terjadi adalah bersifat rahasia dan diterapkan dalam ruang lingkup kenegaraan.

Solusi yang dapat dilakukan adalah dengan cara mengengkripsi data (teks,

suara dan visual). Teknik ini memiliki tingkat keamanan yang jauh lebih tinggi.

Enkripsi dilakukan pada data sebelum data tersebut dikirimkan, sehingga pihak

yang tidak berhak tidak dapat memahami data yang dikirimkan tersebut meskipun

data yang telah terenkripsi berhasil diakses/didapatkan. Proses selanjutnya adalah

1

Page 13: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

2

dekripsi, yaitu kebalikan dari proses enkripsi. Mengubah data yang terenkripsi

menjadi data semula. Dekripsi hanya bisa dilakukan oleh pihak yang berhak.

Enkripsi dan dekripsi merupakan bagian dari kinerja sebuah algoritma

kriptografi. Algoritma enkripsi yang akan digunakan dalam tugas akhir ini adalah

algoritma Blowfish.

1.2 Perumusan Masalah

Berdasarkan latar belakang masalah, rumusan masalah dalam penulisan

skripsi ini adalah

1. Bagaimana menentukan proses enkripsi dan dekripsi data teks

menggunakan algoritma Blowfish ?

2. Bagaimana membuat program aplikasi komputer yang dapat melakukan

enkripsi dan dekripsi data berdasarkan algoritma Blowfish ?

1.3 Batasan Masalah

Batasan masalah yang digunakan dalam penulisan skripsi ini adalah

1. Data yang akan dienkripsi dan dekripsi adalah data digital, terutama data teks.

2. Perangkat lunak penerapan teknik pengamanan data ini dibuat dengan

menggunakan bahasa pemrograman Java 2 Standard Edition (J2SE).

1.4 Tujuan Penelitian

Tujuan penelitian dalam skripsi ini adalah

1. Dapat menentukan proses enkripsi dan dekripsi menggunakan algoritma

Blowfish.

2. Dapat membuat program aplikasi komputer yang dapat melakukan enkripsi

dan dekripsi data berdasarkan algoritma Blowfish.

Page 14: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

3

1.5 Manfaat Penelitian

Manfaat penelitian dari skripsi adalah

1. Manfaat teoritis

Secara teoritis, manfaat yang diperoleh adalah dapat memahami proses

enkripsi dan dekripsi data menggunakan algoritma Blowfish.

2. Manfaat praktis

Sedangkan manfaat praktis yang diperoleh adalah dapat membangun aplikasi

perangkat lunak yang akan mengenkripsi data teks menggunakan algoritma

Blowfish. Serta mengetahui, mempermudah dan mempercepat proses

pengamanan data dengan menggunakan perangkat lunak tersebut.

Page 15: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

4

BAB II

LANDASAN TEORI

2.1 Tinjauan Pustaka

2.1.1 Algoritma

Menurut Budiyanto (2003), algoritma adalah urutan langkah-langkah logis

penyelesaian masalah yang disusun secara sistematis dan logis.

2.1.2 Lambang Flowchart (Diagram Alir)

Arti dari lambang yang digunakan dalam pembuatan flowchart yaitu,

Simbol Terminator

Simbol Proses

Simbol Keputusan

Simbol Alur

Simbol Dokumen

Gambar 2.1. Simbol Umum Flowchart

2.1.3 Keamanan Data

Secara umum data dibagi menjadi dua, yaitu: data yang bersifat rahasia

dan tidak bersifat rahasia. Dalam hal ini, pesan yang diperhatikan dan perlu

diamankan adalah pesan yang bersifat rahasia.

Beberapa ancaman dan serangan yang harus diperhatikan dalam sistem

keamanan data menurut Susanto (2004), adalah sebagai berikut :

4

Page 16: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

5

1. Leakage (kebocoran) adalah pengambilan informasi oleh penerima yang tidak

berhak.

2. Tampering adalah pengubahan informasi yang tidak legal

3. Vandalism adalah gangguan operasi sistem tertentu, pelaku tidak mengharap

keuntungan apapun.

Metode penyerangan yang biasa digunakan untuk mengganggu keamanan

data menurut Susanto (2004), antara lain :

1. Eavesdropping, mendapatkan duplikasi pesan tanpa ijin.

2. Masquerading, mengirim atau menerima pesan menggunakan identitas lain

tanpa ijin mereka.

3. Message Tampering, mencegat atau menangkap pesan dan mengubah isinya

sebelum dilanjutkan ke pihak penerima sebenarnya. ”Man in the middle

attack” adalah bentuk message tampering dengan mencegat pesan pertama

pada pertukaran kunci enkripsi pada pembentukan suatu saluran yang aman.

Penyerang menyisipkan kunci lain yang memungkinkan dia untuk

mendekripsi pesan berikutnya sebelum dienkripsi oleh penerima.

4. Replaying, menyimpan pesan yang ditangkap untuk pemakaian berikutnya.

5. Denial of service, membanjiri saluran atau sumber lain dengan beberapa pesan

yang bertujuan untuk menggagalkan pengaksesan oleh pemakai lain.

Dalam keamanan data perlu diadakan pemisahan antara kebijakan dan

mekanisme kemanan, yang akan membantu memisahkan kebutuhan

implementasinya, karena kebijakan dapat menspesifikasikan kebutuhan dan

mekanisme dapat menerapkan spesifikasi kebijakan tersebut.

Menurut Susanto (2004), sebuah kebijakan keamanan meliputi :

1. Access Control, yaitu perlindungan data terhadap pemakaian tak legal.

2. Authentication, yaitu menyediakan jaminan identitas seseorang.

3. Confidentially (kerahasiaan), yaitu pengungkapan terhadap identitas tak legal.

4. Nonrepudiation (penyangkalan), yaitu melindungi terhadap penolakan

komunikasi yang sudah pernah dilakukan.

Untuk mencapai keamanan tersebut menurut Susanto (2004), langkah atau

cara yang bisa ditempuh, yaitu :

Page 17: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

6

1. Enkripsi, dapat digunakan untuk menyediakan kerahasiaan pesan,

Authentication dan perlindungan identitas.

2. Digital Signature (tanda tangan digital), dapat digunakan untuk menyediakan

authentication, perlindungan identitas, dan nonrepudiation

3. Checksum Algorithm (Hash), dapat digunakan untuk menyediakan

perlindungan integritas.

2.1.4 Kriptografi

Menurut Schneier (1996), kriptografi adalah ilmu dan seni untuk menjaga

keamanan pesan.

Menurut Menezes et al (1996), kriptografi adalah ilmu yang mempelajari

teknik-teknik matematika yang berhubungan dengan aspek keamanan informasi

seperti kerahasiaan, integritas data, serta otentikasi.

Menurut Munir (2006), kriptografi (cryptography) berasal dari Bahasa

Yunani: ”cryptos” artinya ”secret” (rahasia), sedangkan ”graphein” artinya

”writing” (tulisan), Jadi, kriptografi berarti ”secret writing” (tulisan rahasia).

Definisi yang digunakan di dalam buku-buku yang lama (sebelum tahun 1980-an)

menyatakan bahwa kriptografi adalah ilmu dan seni untuk menjaga kerahasiaan

pesan dengan cara menyandikannya ke dalam bentuk yang tidak dapat dimengerti

lagi maknanya. Definisi ini mungkin cocok pada masa lalu di mana kriptografi

digunakan untuk keamanan komunikasi penting seperti komunikasi di kalangan

militer, diplomat, dan mata-mata (spy). Namun saat ini kriptografi lebih dari

sekadar privacy, tetapi juga untuk tujuan data integrity, authentication, dan non-

repudation.

Menurut Munir (2006), di dalam kriptografi terdapat beberapa

terminologi/istilah penting yang perlu diketahui yaitu :

1. Pesan, Plainteks, dan Cipherteks

Pesan (message) adalah data atau informasi yang dapat dibaca atau dimengerti

maknanya. Nama lain untuk pesan adalah plainteks (plaintext) atau teks jelas

(cleartext). Pesan dapat berupa data atau informasi yang dikirim (melalui

kurir, saluran telekomunikasi, dsb) atau yang disimpan di dalam media

Page 18: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

7

perekam (kertas, storage, dsb). Pesan yang tersimpan tidak hanya berupa teks,

tetapi juga dapat berbentuk citra (image), suara/bunyi (audio), dan video, atau

berkas biner lainnya.

Agar pesan tidak dapat dimengerti maknanya oleh pihak lain, maka pesan

perlu disandikan ke bentuk lain yang tidak dapat dipahami. Bentuk pesan yang

tersandi disebut cipherteks (ciphertext) atau kriptogram (cryptogram).

Cipherteks harus dapat ditransformasikan kembali menjadi plainteks semula

agar pesan yang diterima bisa dibaca.

2. Pengirim dan penerima

Komunikasi data melibatkan pertukaran pesan antara dua entitas. Pengirim

(sender) adalah entitas yang mengirim pesan kepada entitas lainnya. Penerima

(receiver) adalah entitas yang menerima pesan. Entitas disini dapat berupa

orang, mesin (komputer), kartu kredit, dan sebagainya. Pengirim tentu

menginginkan pesan yang dikirim tidak dapat dibaca/diketahui oleh pihak

lain, kecuali yang berhak menerimanya. Maka, pesan harus disandikan

menjadi cipherteks.

3. Enkripsi dan Dekripsi

Proses menyandikan plainteks menjadi cipherteks disebut enkripsi

(encryption) atau enciphering (standard nama menurut ISO 7498-2).

Sedangkan proses mengembalikan cipherteks menjadi plainteks semula

dinamakan dekripsi (decryption) atau deciphering (standard nama menurut

ISO 7498-2). Istilah encryption of data in motion mengacu pada enkripsi

pesan yang ditransmisikan melalui saluran komunikasi. Sedangkan istilah

encryption of data at-rest mengacu pada enkripsi dokumen yang disimpan di

dalam storage.

4. Cipher dan Kunci

Algoritma kriptografi disebut juga cipher, yaitu aturan untuk enciphering dan

deciphering, atau fungsi matematika yang digunakan untuk enkripsi dan

dekripsi. Kunci (key) adalah parameter yang digunakan untuk transformasi

enciphering dan deciphering. Kunci biasanya berupa string atau deretan

bilangan.

Page 19: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

8

Enkripsi DekripsiPlainteks PlainteksCipherteks

Kunci Kunci

Gambar 2.2. Skema Enkripsi dan Dekripsi

Plainteks merupakan data masukan berupa teks berkode standar ASCII

(American Standard Code for Information Interchange). ASCII merupakan

suatu standar internasional dalam kode huruf dan simbol seperti halnya Hex

dan Unicode, tetapi ASCII lebih bersifat universal. Kode ASCII memiliki

komposisi bilangan biner sebanyak 8 bit. Dimulai dari 00000000 hingga

11111111. Total kombinasi yang dihasilkan sebanyak 256, yang dimulai dari

kode 0 hingga 255 dalam sistem bilangan Desimal.

Menurut Anjar Syafari (2007), Proses enkripsi dan deskripsi secara matematis

diterangkan sebagai berikut :

EK (M) = C (Proses Enkripsi)

DK (C) = M (Proses Deskripsi)

Keterangan :

EK : Enkripsi.

DK : Deskripsi.

M : Message (Pesan sebelum dienkripsi)

C : Cipher (Pesan setelah dienkrisi)

Page 20: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

9

Tipe-tipe cipher :

Ciphers

Classical Rotor Machine Modern

Substitution Transposition Public Key Private Key

Stream Chiper Block Cipher

Gambar 2.3. Skema Tipe-tipe Cipher

Menurut Munir (2006), Algoritma kunci simetri mengacu pada metode

enkripsi yang dalam hal ini baik pengirim maupun penerima memiliki kunci

yang sama. Algoritma kunci simetri modern beroperasi dalam mode bit dan

dapat dikelompokkan menjadi dua kategori:

a. Cipher aliran (Stream Cipher)

Algoritma kriptografi beroperasi pada plainteks/cipherteks dalam bentuk

bit tunggal yang dalam hal ini rangkaian bit dienkripsikan/didekripsikan

bit per bit. Cipher aliran mengenkripsi satu bit setiap kali.

b. Cipher blok (Block Cipher)

Algoritma kriptografi beroperasi pada plainteks/cipherteks dalam bentuk

blok bit, yang dalam hal ini rangkaian bit dibagi menjadi blok-blok bit

yang panjangnya sudah ditentukan sebelumnya. Misalnya, panjang blok

adalah 64 bit, maka itu berarti algoritma enkripsi memperlakukan 8

karakter setiap kali enkripsi (1 karakter = 8 bit dalam pengkodean ASCII).

Cipher blok mengenkripsi satu blok bit setiap kali.

5. Sistem Kriptografi (cryptosystem)

Menurut Schneier (1996), kriptografi membentuk sebuah sistem yang

dinamakan sistem kriptografi. Sistem kriptografi (cryptosystem) adalah

kumpulan yang terdiri dari algoritma kriptografi, semua plainteks dan

cipherteks yang mungkin, dan kunci.

Page 21: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

10

6. Penyadap

Penyadap (eavesdropper) adalah orang yang mencoba menangkap pesan

selama ditransmisikan. Tujuan penyadap adalah untuk mendapatkan informasi

sebanyak-banyaknya mengenai sistem kriptogafi yang digunakan untuk

berkomunikasi dengan maksud untuk memecahkan cipherteks. Nama lain

penyadap: enemy, adversary, intruder, interceptor, bad guy.

7. Kriptoanalis dan Kriptologi

Kriptografi berkembang sedemikian rupa sehingga melahirkan bidang yang

berlawanan yaitu kriptanalisis. Kriptanalisis (cryptanalysis) adalah ilmu dan

seni untuk memecahkan cipherteks menjadi plainteks tanpa mengetahui kunci

yang digunakan. Pelakunya disebut kriptanalis. Kriptologi (cryptology) adalah

studi mengenai kriptografi dan kriptanalisis.

Kriptografi

Ilmu dan seni untuk menjaga keamanan pesan

Kriptanalis

Ilmu dan seni untuk memecahkan pesan yang terenkripsi (cipherteks)

Kriptologi

Gambar 2.4. Kriptologi, Kriptografi dan Kriptanalisis

2.1.5 Cipher Blok

Pada cipher blok, plainteks dibagi menjadi beberapa blok dengan panjang

tetap. Ketika melakukan enkripsi, cipher blok mungkin saja menerima masukan

128-bit plainteks dan mengeluarkan 128-bit keluaran cipherteks. Transformasi

selengkapnya dikontrol menggunakan masukan kedua, yaitu kunci. Begitu pula

halnya dengan proses dekripsi, algoritma untuk melakukan dekripsi akan

menerima masukan 128-bit cipherteks dan kunci kemudian menghasilkan

keluaran 128-bit plainteks aslinya. Cipher blok mengenkripsi satu blok bit setiap

kali.

Page 22: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

11

Tabel 2.1 Beberapa contoh blok cipher

Cipher Blok Ukuran Kunci (Bits) Ukuran Blok Tahun

DES 56 64 1976

3DES 112 atau 168 64 1978

AES 128, 192 atau 256 128 1998

RC6 Minimum 0, maksimum 2040,

multiple 8 bits, default 128 bits 128 1998

Blowfish Minimum 32, maksimum 448,

multiple 8 bits, default 128 bits 64 1993

CAST-256 Minimum 128, maksimum 256,

multiple 32 bits, default 128 bits 128 1998

Untuk lebih jelasnya, proses enkripsi dan dekripsi pada cipher blok dapat

dilihat pada gambar berikut :

Enkripsi

Cipher BlokKunci

Plainteks

Cipherteks

Gambar 2.5. Enkripsi Pada Cipher Blok

Dekripsi

Cipher BlokKunci

Cipherteks

Plainteks

Gambar 2.6. Dekripsi Pada Cipher Blok

Page 23: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

12

2.1.6 Cipher Berulang

Menurut Randy (2006), cipher berulang merupakan fungsi transformasi

sederhana yang mengubah plainteks menjadi cipherteks dengan proses perulangan

sejumlah kali. Pada setiap putaran digunakan kunci putaran yang dikombinasikan

dengan plainteks. Secara formal, cipher berulang dinyatakan sebagai berikut :

Ci = f(Ci-1, Pi)

Keterangan :

i = 1, 2, ..., r (r adalah jumlah putaran)

Pi = subkunci pada putaran ke-i

fi = fungsi transformasi (di dalamnya terdapat fungsi substitusi, permutasi,

dan/atau ekspansi, kompresi)

Plainteks dinyatakan dengan C0 dan cipherteks dinyatakan dengan Cr.

2.1.7 Jaringan Feistel (Feistel Network)

Menurut Randy (2006), model jaringan Feistel digunakan oleh hampir

semua algoritma cipher blok. Jaringan ini ditemukan oleh Horst Feistel pada tahun

1970. Secara formal, operasi transformasi pada jaringan Feistel secara umum

dapat dinyatakan sebagai:

(XL)i = (XR)i -1

(XR)i = (XL)i - 1⊕ f ((XR)i -1, Pi)

Keterangan :

XL = n-bit plainteks bagian kiri

XR = n-bit plainteks bagian kanan

Dengan X (blok plainteks) = XL + XR , n merupakan setengah dari blok plainteks X

Proses enkripsi dan dekripsi dapat menggunakan model jaringan Feistel

yang sama. Model jaringan Feistel bersifat reversible (dua arah) untuk proses

enkripsi dan dekripsi. Sifat reversible ini memungkinkan mendekripsi cipherteks

menjadi plainteks tanpa membuat algoritma baru. Contoh:

Page 24: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

13

(XL)i – 1 ⊕ f((XR)i – 1, Pi) ⊕ f((XR)i – 1, Pi) = (XL)i – 1

Selain itu, sifat reversible tidak bergantung pada fungsi f sehingga fungsi f

dapat dibuat serumit mungkin. Skema jaringan Feistel dapat dilihat pada Gambar

2.7.

(XL)i - 1 (XR)i - 1

(XL)i (XR)i

F

Pi

Gambar 2.7. Skema Jaringan Feistel Secara Umum

2.1.8 Kotak-S (S-Box)

Menurut Munir (2006), Kotak-S adalah matriks yang berisi substitusi

sederhana yang memetakan satu atau lebih bit dengan satu atau lebih bit yang lain.

Pada kebanyakan algoritma cipher blok, Kotak-S memetakan m bit masukan

menjadi n bit keluaran, sehingga Kotak-S tersebut dinamakan kotak m x n S-Box.

Kotak-S merupakan satu-satunya langkah nirlanjar (non-linear) di dalam

algoritma, karena operasinya adalah look-up table. Masukan dari operasi look-up

table dijadikan sebagai indeks Kotak-S, dan keluarannya adalah masukan di

dalam Kotak-S.

Perancangan Kotak-S menjadi isu penting karena Kotak-S harus dirancang

sedemikian sehingga kekuatan kriptografinya bagus dan mudah

diimplementasikan. Ada empat cara (pendekatan) yang dapat digunakan dalam

mengisi Kotak-S:

1. Dipilih secara acak

Untuk Kotak-S yang kecil, cara pengisian secara acak tidak aman, namun

untuk Kotak-S yang besar cara ini cukup baik.

Page 25: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

14

2. Dipilih secara acak lalu diuji

Sama halnya seperti sebelumnya, namun nilai acak yang bangkit akan diuji

apakah memenuhi sifat tertentu.

3. Dibuat oleh orang (man-made)

Masukan di dalam Kotak-S dibangkitkan dengan teknik yang lebih intuitif.

4. Dihitung secara matematis (math-mode)

Masukan di dalam Kotak-S dibangkitkan berdasarkan prinsip matematika

yang terbukti aman dari serangan kriptanalis.

2.1.9 Algoritma Kriptografi Blowfish

Menurut Randy (2006), Blowfish adalah sebuah algoritma kriptografi yang

beroperasi pada mode blok. Algoritma Blowfish merupakan algoritma yang

diciptakan oleh seorang cryptanalyst bernama Bruce Schneier pada tahun 1993.

Algoritma Blowfish termasuk ke dalam kriptografi kunci simetrik (Symmetric

Cryptosystem), dan metoda enkripsinya serupa dengan DES (Data Encryption

Standard-Like Cipher). Algoritma ini ditujukan untuk mikroprosessor besar (32

bit ke atas dengan cache data yang besar).

Algoritma Blowfish terdiri dari dua bagian yaitu ekspansi kunci dan

enkripsi data. Ekspansi kunci mengubah sebuah kunci dengan panjang maksimal

448 bit kepada beberapa array subkunci dengan ukuran total 4168 byte. Secara

umum, algoritma Blowfish dikembangkan untuk memenuhi kriteria sebagai

berikut :

a) Cepat, pada implementasi yang optimal Blowfish dapat mencapai kecepatan

26 clock cycle per byte

b) Ringan, Blowfish dapat berjalan pada memori kurang dari 5KB

c) Sederhana, Blowfish hanya menggunakan operasi yang sederhana, yakni :

penambahan (addition), XOR (Ekslusif OR), dan penelusuran tabel (table

lookup) pada bilangan yang di operasikan (operand) 32-bit

d) Tingkat keamanan yang variatif, panjang kunci Blowfish dapat bervariasi

(minimum 32 bit, maksimum 448 bit, multiple (kelipatan) 8 bit, default 128

bit).

Page 26: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

15

Algoritma Blowfish merupakan algoritma yang kuat, dan sampai saat ini

belum ditemukan kelemahan yang berarti. Algoritma Blowfish pun dapat

digabungkan dengan algoritma-algoritma enkripsi lainnya dalam mengenkripsi

sebuah informasi/pesan untuk lebih menjamin isi dari pesan tersebut.

Enkripsi data terdiri dari sebuah fungsi sederhana yang mengalami putaran

atau iterasi sebanyak 16 kali. Setiap putaran terdiri dari sebuah permutasi yang

bergantung pada kunci dan substitusi yang bergantung pada kunci dan data.

Seluruh operasi berupa penambahan dan XOR (⊕) dengan kata sepanjang 32 bit.

Operasi tambahan yang digunakan hanya berupa data look-up terhadap array

dengan empat indeks yang dilakukan setiap putaran.

Blowfish menggunakan sejumlah besar subkunci. Kunci-kunci tersebut

harus dibangkitkan terlebih dahulu sebelum proses enkripsi dan dekripsi data

dilakukan.

Menurut Sukmawan (2000), alur proses enkripsi algoritma Blowfish dapat

dijelaskan sebagai berikut:

1. P-array terdiri dari 18 buah subkunci dengan ukuran 32 bit:

P1, P2, ..., P18

2. Empat buah Kotak-S dengan ukuran 32 bit mempunyai masukan sebanyak

256 buah. Kotak-kotak tersebut adalah:

S1,0, S1,1, ..., S1,255

S2,0, S2,1, ..., S2,255

S3,0, S3,1, ..., S3,255

S4,0, S4,1, ..., S4,255

Subkunci dibangkitkan dengan menggunakan algoritma Blowfish.

3. Masukan terhadap jaringan Feistel ini adalah X, yang merupakan elemen data

(plainteks) dengan ukuran 64-bit. Bila kurang dari 64-bit, maka akan

dilakukan proses padding (penambahan bit).

4. Bagi X menjadi setengah bagian, yaitu dengan ukuran 32-bit. 32-bit pertama

disebut XL, 32-bit yang kedua disebut XR.

Page 27: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

16

5. Lakukan langkah-langkah berikut dalam 16 putaran (iterasi):

XL = XL ⊕ Pi

XR = F(XL) ⊕ XR

Kemudian tukar XL dengan XR.

Keterangan:

i = 1, 2, …, 16 (menunjukkan nomor putaran/iterasi)

6. Setelah melakukan perulangan yang ke-16, lakukan lagi proses penukaran XL

dengan XR.

7. Lakukan operasi XOR (⊕), yaitu : XR = XR ⊕ P17

8. Lakukan operasi XOR (⊕), yaitu : XL = XL ⊕ P18

9. Gabungkan kembali XL dan XR, yaitu : X = XR + XL

Fungsi F yang terdapat pada jaringan Feistel didefinisikan sebagai berikut:

1. Bagi XL menjadi empat bagian yang berukuran 8 bit. Keempat bagian yang

dihasilkan adalah a, b, c, dan d.

2. Fungsi F(XL) didefinisikan sebagai berikut:

F(XL) = ((S1,a + S2,b mod 232

) ⊕ S3,c) + S4,d mod 232

Proses dekripsi dilakukan dengan langkah yang sama dengan proses enkripsi,

kecuali P1, P2, ..., P18 digunakan dengan urutan terbalik dari proses enkripsi.

S-Box1

32 bits

S-Box2

S-Box3

S-Box4

32 bits 32 bits 32 bits

8 bits 8 bits 8 bits 8 bits

Gambar 2.8 Skema fungsi F pada algoritma Blowfish

Page 28: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

17

Implementasi algoritma Blowfish yang memerlukan waktu cepat harus

mengurangi jumlah putaran dan memastikan bahwa semua subkunci tersimpan

dalam cache (penyimpanan sementara).

Karena algoritma ini merupakan algoritma yang sudah termasuk lama,

tentu saja ada beberapa usaha kriptanalisis yang dilakukan terhadap algoritma ini,

antara lain adalah:

1. John Kelsey membuat sebuah attack yang dapat mematahkan 3 iterasi

Blowfish, namun tidak dapat mengembangkannya lebih lanjut. Attack ini

melakukan eksploitasi pada fungsi f dan fakta bahwa penambahan mod 232

dan XOR tidak commute.

2. Vikramjit Singh Chhabra mencari cara untuk menerapkan brute-force key

search machine.

3. Serge Vaudenay melakukan penelitian pada varian Blowfish yang telah

disederhanakan, dengan S-aBox yang diketahui, dan tidak key-dependent.

Untuk varian ini, attack yang berbeda dapat menemukan P-Array dengan

28r+1 plainteks yang telah dipilih (r merupakan jumlah iterasi). Attack ini

tidak mungkin dilakukan pada Blowfish dengan 8-iterasi dan lebih, karena

lebih banyak plainteks yang dibutuhkan daripada yang dapat dibangkitkan

dengan 64-bit cipher blok.

4. Tesis Ph.D milik Vincent Rijmen mencantumkan second-order differential

attack pada 4 iterasi Blowfish. Namun, attack tersebut tidak dapat dilanjutkan

lagi untuk iterasi selanjutnya.

2.1.10 Mode Operasi Enkripsi Cipher Blok

Pada algoritma kriptografi yang beroperasi pada cipher blok, dikenal

beberapa mode operasi. Empat mode operasi yang lazim digunakan pada cipher

blok adalah:

1. Electronic Code Book (ECB)

Pada mode ECB, setiap mode plainteks Mi dienkripsi secara individual

dan independen menjadi blok cipherteks Ci. Secara matematis proses enkripsi

dengan mode ECB dapat dinyatakan sebagai berikut:

Page 29: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

18

Ci = EK (Mi)

dan proses dekripsi sebagai berikut:

Mi = DK (Ci)

Dalam hal ini, Mi dan Ci merupakan blok plainteks dan cipherteks ke-i.

Skema enkripsi dan dekripsi dengan mode ECB dapat dilihat pada Gambar

2.9

E

Blok Plainteks M1

Kunci K

Blok Cipherteks C1

E

Blok Plainteks M1

Kunci K

c1 c2 c... cn

Blok Cipherteks C1

C = (c1, c2, …, cn)

ENKRIPSI DEKRIPSI

c1 c2 c... cn

C = (c1, c2, …, cn)

m1 m2 m.. mn

M = (m1, m2, …, mn)

m1 m2 m.. mn

M = (m1, m2, …, mn)

Gambar 2.9 Skema Enkripsi dan Dekripsi dengan Mode ECB

Mode ini merupakan mode termudah dari keempat mode yang telah

disebutkan di atas. Setiap blok plainteks dienkripsi secara independen,

sehingga proses enkripsi tidak harus berlangsung secara linear atau proses

enkripsi dapat dilakukan pada blok-blok secara tidak berurutan. Keuntungan

mode ECB lainnya adalah kesalahan satu bit pada satu blok hanya akan

mempengaruhi blok cipherteks yang berkorespondensi pada proses dekripsi.

Tetapi mode ECB lemah terhadap serangan. Dalam dunia nyata,

kebanyakan bagian-bagian pesan cenderung akan muncul secara berulang di

dalam sebuah teks. Dengan mode ECB, yang mengenkripsikan blok-blok

secara independen, maka perulangan pesan pada plainteks mempunyai

peluang yang besar untuk muncul berulang pula pada cipherteks. Dengan

mengetahui informasi ini, kriptanalis dapat melakukan serangan dengan

metode statistik secara mudah. Selain itu, mode ECB juga sangat rentan

terhadap manipulasi cipherteks yang bertujuan untuk mengelabui pihak

penerima pesan.

Page 30: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

19

2. Cipher Block Chaining (CBC)

Pada mode operasi CBC, terdapat mekanisme umpan balik pada

sebuah blok, yaitu blok plainteks current di-XOR-kan terlebih dahulu dengan

blok cipherteks hasil enkripsi sebelumnya. Selanjutnya hasil operasi XOR ini

dimasukkan ke dalam fungsi enkripsi. Dengan demikian pada mode CBC,

setiap blok cipherteks bergantung tidak hanya pada blok plainteksnya, tapi

juga pada seluruh blok plainteks sebelumnya. Dekripsi dilakukan dengan cara

memasukkan blok cipherteks current ke dalam fungsi dekripsi, kemudian

meng-XOR-kan hasilnya dengan blok cipherteks sebelumnya. Secara

matematis proses enkripsi dapat dinyatakan sebagai berikut:

Ci = EK (Mi⊕Ci-1)

sedangkan proses dekripsi dapat dinyatakan sebagai berikut:

Mi = DK (Ci)⊕Ci-1

yang dalam hal ini, C0 = IV (Initialization Vector). IV dapat diberikan oleh

pengguna atau dibangkitkan secara acak oleh aplikasi. IV ini merupakan

rangkaian bit yang tidak bermakna dan hanya digunakan sebagai inisialisasi

untuk membuat setiap blok cipherteks menjadi unik. Jadi, untuk

menghasilkan blok cipherteks pertama (C1), IV digunakan untuk

menggantikan blok cipherteks sebelumnya, C0. Sebaliknya pada proses

dekripsi, blok plainteks diperoleh dengan cara meng-XOR-kan IV dengan

hasil dekripsi terhadap blok cipherteks pertama.

Dengan mode operasi CBC, kesalahan pada satu bit plainteks akan

mempengaruhi blok cipherteks yang berkoresponden dan blok-blok

cipherteks selanjutnya. Sedangkan kesalahan satu bit pada cipherteks hanya

akan mempengaruhi satu blok plainteks yang berkoresponden dan satu bit

pada blok berikutnya dengan posisi bit yang berkoresponden pula.

Page 31: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

20

EK

Mi-1

Kunci K

Ci-1

ENKRIPSI DEKRIPSI

⊕Ci-2

EK

Mi-1

Ci

DK

Ci-1

Kunci K

Mi-1

⊕Ci-2

DK

Ci

Mi

Gambar 2.10. Skema Enkripsi dan Dekripsi dengan Mode CBC

Terlepas dari kekurangan yang telah disebutkan di atas, mode CBC

dapat mengatasi kelemahan yang timbul pada mode ECB. Dengan mode

ECB, blok-blok plainteks yang sama tidak menghasilkan blok-blok cipherteks

yang sama. Karena itulah kriptanalisis lebih sulit untuk dilakukan pada mode

CBC.

3. Cipher FeedBack (CFB)

Mode CBC memiliki kelemahan, yaitu proses enkripsi hanya dapat

dilakukan pada ukuran blok yang utuh, sehingga mode CBC tidak efisien jika

diterapkan pada aplikasi komunikasi data. Permasalahan ini dapat diatasi

pada mode CFB. Mode CFB mengenkripsikan data dalam unit yang lebih

kecil daripada ukuran blok. Sehingga enkripsi dapat dilakukan meskipun data

yang diterima belum lengkap. Proses enkripsi pada unit yang lebih kecil

daripada ukuran blok ini membuat mode CFB berlaku seperti cipher aliran

(stream cipher). Karena hal inilah, mode CFB dapat diterapkan pada aplikasi

komunikasi data. Unit yang dienkripsi dapat berupa bit per bit, 2 bit, 3 bit dan

seterusnya. Bila unit yang dienkripsi berupa satu karakter setiap kalinya,

maka mode CFB ini disebut CFB 8-bit. Mode ini membutuhkan sebuah

antrian yang berukuran sama dengan ukuran blok masukan. Secara formal,

proses enkripsi mode CFB n-bit dapat dinyatakan sebagai berikut:

Ci = Mi ⊕ MSBb (EK(Xi))

Xi+1 = LSBb-u (Xi) || Ci

Page 32: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

21

sedangkan untuk proses dekripsi dapat dinyatakan sebagai berikut:

Mi = Ci ⊕ MSBb (DK(Xi))

Xi+1 = LSBb-u (Xi) || Ci

Keterangan:

Xi : isi antrian dengan Xi adalah IV

EK : fungsi enkripsi

DK : fungsi dekripsi

K : kunci

b : panjang blok enkripsi

u : panjang unit enkripsi

|| : operasi penyambungan (concatenation)

MSB : Most Significant Byte

LSB : Least Significant Byte

Secara umum, CFB u-bit mengenkripsi plainteks sebanyak u-bit setiap

kalinya, yang mana ub (b=ukuran blok). Mode CFB membutuhkan sebuah

antrian (queue) yang berukuran sama dengan ukuran blok masukan. Mode

CFB mempunyai keunikan tersendiri, yaitu untuk proses enkripsi dan dekripsi

digunakan fungsi yang sama. Skema enkripsi dan dekripsi dengan mode CFB

8-bit dapat dilihat pada Gambar 2.10

EKK

mi ci⊕

pi

Antrian 8-byte

Left-most byte

ENKRIPSI

K

ci mi⊕

pi

Antrian 8-byte

DEKRIPSI

DK

Left-most byte

Gambar 2.11. Skema Enkripsi dan Dekripsi dengan Mode CFB 8-Bit

Page 33: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

22

Pada mode CFB pun terdapat perambatan kesalahan baik pada proses

enkripsi maupun proses dekripsi. Pada proses enkripsi, kesalahan satu bit

pada plainteks mempengaruhi blok cipherteks yang berkoresponden dan blok-

blok cipherteks berikutnya. Sedangkan kesalahan satu bit pada blok

cipherteks akan bit yang berkoresponden dan bit-bit lainnya selama bit error

tersebut terdapat di dalam pergeseran bit (shift register). Pada mode CFB 8-

bit dan ukuran blok 64 bit, maka kesalahan satu byte pada blok cipherteks

akan mempengaruhi satu byte plainteks yang berkoresponden dan delapan

byte berikutnya (lama byte error yang terdapat dalam shift register adalah

delapan putaran).

4. Output FeedBack (OFB)

Mode OFB bekerja dengan cara yang mirip dengan mode CFB,

kecuali n-bit dari hasil fungsi enkripsi terhadap antrian disalin menjadi

elemen paling kanan antrian. Secara formal, mode OFB n-bit dapat

dinyatakan sebagai berikut:

Ci = Mi ⊕ MSBb (EK(Xi))

Xi+1 = LSBb-u (Xi) || MSBb (EK(Xi))

sedangkan proses dekripsi dapat dinyatakan sebagai berikut:

Mi = Ci ⊕ MSBb (DK(Xi))

Xi+1 = LSBb-u (Xi) || MSBb (EK(Xi))

Pada mode OFB tidak terdapat perambatan kesalahan. Kesalahan satu

bit pada plainteks hanya mengakibatkan kesalahan satu bit yang

berkoresponden pada cipherteks. Sebaliknya, kesalahan satu bit pada

cipherteks hanya mengakibatkan kesalahan satu bit yang berkoresponden

pada plainteks. Gambar 2.11 menunjukkan skema enkripsi dan dekripsi pada

cipher blok untuk mode OFB 8-bit

Page 34: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

23

K

mi ci⊕

pi

Antrian 8-byte

Left-most byte

ENKRIPSI

K

ci mi⊕

pi

Antrian 8-byte

DEKRIPSI

DK

Left-most byte

EK

Gambar 2.12 Skema Enkripsi dan Dekripsi pada mode OFB 8-Bit

Penggunaan mode-mode operasi tersebut tidak merubah fungsi enkripsi

dan dekripsi yang telah didefinisikan.

2.2 Kerangka Pemikiran

Berdasarkan pendahuluan dan mengacu pada tinjauan pustaka, dapat

disusun suatu kerangka pemikiran penulisan skripsi sebagai berikut:

1. Dilakukan analisis sistem terhadap aplikasi teknik pengamanan data teks

menggunakan algoritma Blowfish.

2. Dengan adanya tahapan analisis sistem, dapat ditentukan kebutuhan sistem

sehingga dapat dilakukan pembuatan aplikasi enkripsi dan dekripsi data teks

menggunakan algoritma Blowfish.

3. Data teks dan kunci (private key) merupakan data masukan, yang kemudian

di enkripsi dengan algoritma Blowfish dan disimpan menjadi sebuah file teks

cipher. File teks cipher tersebut akan dibuka kembali dengan aplikasi yang

sudah dibuat, kemudian dilakukan proses dekripsi, sehingga data teks semua

berubah seperti semula.

Page 35: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

24

`BAB III

METODE PENELITIAN

Metode penelitian yang digunakan dalam penulisan skripsi ini adalah

pengembangan sistem dan disertai dengan studi literatur. Langkah-langkah yang

dilakukan untuk mencapai tujuan skripsi ini adalah sebagai berikut:

1. Melakukan studi literatur tentang algoritma Blowfish dan penerapannya.

2. Perencanaan sistem.

3. Analisis sistem teknik pengamanan data dengan menggunakan algoritma

Blowfish untuk mengidentifikasi masalah, memahami cara kerja sistem

dan mengenali kebutuhan.

4. Perancangan sistem, yaitu perancangan flowchart, form masukan dan

form keluaran.

5. Implementasi sistem. Sistem dibangun berdasarkan algoritma yang telah

ada menggunakan bahasa pemrograman Java 2 Standard Edition (J2SE).

6. Evaluasi sistem. Evaluasi sistem dilakukan untuk menguji tingkat efisiensi

sistem.

7. Dalam membuat dan melakukan evaluasi sistem diperlukan seperangkat

alat komputer. Adapun spesifikasi alat komputer yang digunakan sebagai

berikut:

a. Hardware

Tabel 3.1 Spesifikasi Hardware

Jenis Spesifikasi

Notebook Notebook Hewlett Packard 520

Processor Intel(R) Celeron(R) 420 1.60Gz

Memory RAM DDR2 1.5GB

VGA Card Mobile Intel(R) 945 Express Chipset Family

24

Page 36: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

25

b. Software

Tabel 3.2 Spesifikasi Software

Jenis Spesifikasi

Sistem Operasi - Microsoft(R) Windows(R) eXPerience (XP)

Professional SP3

- Ubuntu 9.10 Karmic Koala

Bahasa

Pemrograman

Java 2 Standard Edition

- Java Development Kit (JDK) 1.6.0_11

- Java Runtime Environment (JRE) 6

IDE Netbeans 6.5

Database Server MySQL Server 5.1

Database Manager Navicat Lite 8 for MySQL

Page 37: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

26

BAB IV

PEMBAHASAN

4.1 Analisis Sistem

Dalam melakukan analisis sistem, perlu diketahui terlebih dahulu alur

sistem pengamanan data yang akan dibuat. Secara umum, alur sistem pengamanan

data dapat digambarkan seperti Gambar 4.1.

Teks ter-Enkripsi Teks ter-DekripsiPlainteks Plainteks

File Cipherteks

Kunci (Private Key)

Kunci (Private Key)

Gambar 4.1 Alur Sistem Pengamanan Data Teks

Berdasarkan Gambar 4.1 dengan mengacu pada Gambar 2.1, plainteks

merupakan data teks berkode ASCII (American Standard Code for Information

Interchange) dimana setiap karakter memiliki nilai setara dengan 8 bits (1 byte).

Sistem (perangkat lunak) akan dijalankan dalam dua mode, yaitu mode

enkripsi dan mode dekripsi. Di tiap-tiap mode akan memiliki data masukan

berupa plainteks (bisa berupa teks yang langsung di tulis, maupun dalam bentuk

file teks), kunci (private key), dan memilih mode operasi enkripsi (ECB, CBC,

OFB, atau CFB). Untuk menghindari adanya weak key (kunci lemah) dalam

penggunaan algoritma Blowfish, maka kunci dibuat dengan minimal 8 karakter.

Setelah mengisi semua data masukan, selanjutnya dilakukan proses enkripsi

dengan algoritma Blowfish. Hasil dari proses enkripsi ini dapat disimpan ke

dalam file berekstensi .cip, yang selanjutnya akan menjadi cipherteks.

26

Page 38: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

27

4.2 Diagram Alir (Flowchart) Aplikasi

Berikut flowchart (diagram alir) dari sistem perangkat lunak yang akan di buat:

Login

Begin

Sukses ?

Tidak

Enkripsi /Dekripsi ?

Input Data

Ya

Enkripsi

Proses Enkripsi (Blowfish)

Plainteks

Kunci

Mode Enkripsi Cipher Blok(ECB, CBC, CFB, OFB)

Kunci = 0 / Kunci < 8 ?

Ya

Tidak

Cipherteks

End

Logout?

Ya

Quit?

Tidak

Ya

Tidak

Input Data

Dekripsi

Cipherteks

Mode Enkripsi Cipher Blok(ECB, CBC, CFB, OFB)

Proses Dekripsi (Blowfish)

Kunci

Kunci = 0 / Kunci < 8 ?

Ya

Tidak

Plainteks

Logout?

Quit?

Tidak

Ya

Ya

Gambar 4.2 Diagram Alir Aplikasi Sistem Pengamanan Data Teks

Page 39: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

28

4.3 Perancangan Sistem

4.3.1 Rancangan Database

Basis data yang dibutuhkan dalam sistem pengamanan data dengan

algoritma Blowfish hanya digunakan untuk memvalidasi user dan password untuk

login aplikasi. Basis data yang digunakan adalah MySQL. Struktur tabel basis

data dalam sistem hanya berisi tabel user, yang berisi data username dan

password untuk menjalankan program.

Tabel 4.1. Tabel User

Nama Fields Tipe Fields Panjang Fields Keterangan

user_id Varchar 24 ID username (primary key)

pass_id Varchar 24 kata kunci (password)

name Char 24 nama lengkap pengguna

4.3.2 Rancangan Form Login

Program login adalah form login pengguna sistem pengamanan data.

Login dibutuhkan sebagai sistem verifikasi pengguna (authentication) yang

memperbolehkan atau tidaknya pemakai mempergunakan sistem. Form login ini

akan dihubungkan dengan database MySQL melalui penghubung JDBC (Java

Database Connectivity).

username

password

login

Gambar 4.3 Rancangan Form Sistem Login

Page 40: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

29

4.3.3 Rancangan Form Enkripsi dan Dekripsi

Program enkripsi adalah form masukan data teks yang akan di proses

untuk di enkripsi. Ada tiga jenis data yang akan dimasukkan, yaitu: plainteks,

kunci (plainteks) dan mode enkripsi (ECB, CBC, CFB atau OFB). Plainteks bisa

dibuka dari file teks yang sudah ada, atau bisa langsung memasukkannya secara

manual.

resetKunci (Private Key)

Mode Enkripsi : ECB CBC OFB CFB

plainteks

EnkripsiOpenSaveNewSize: ___ Bytes

cipherteks

Save CipherTime: __________ msSize: ___ Bytes

Gambar 4.4 Rancangan Form Sistem Enkripsi

Page 41: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

30

resetKunci (Private Key)

Mode Dekripsi : ECB CBC OFB CFB

cipherteks

DekripsiOpenSaveResetSize: ___ Bytes

plainteks

Save PlainSize: ___ Bytes Time: __________ ms

Gambar 4.5 Rancangan Form Sistem Dekripsi

4.3.4 Validasi Data Masukan

Ketika user memasukkan data sebagai data masukan, dimungkinkan

terjadinya kesalahan-kesalahan, yaitu: kunci kosong (blank password), plainteks

bukan dalam standar ASCII (Sebagai contoh: huruf katakana dan hiragana). Oleh

karena itu, untuk menghindari terjadinya hal tersebut, diperlukan beberapa

langkah validasi.

Ketentuan-ketentuan yang digunakan dalam validasi data masukan adalah

1. tidak diperbolehkan tidak mengisi kata kunci (kunci kosong),

2. tidak diperbolehkan memasukkan karakter lain selain standar ASCII

Page 42: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

31

4.4 Implementasi Sistem

Sistem dibangun berdasarkan algoritma Blowfish yang telah ada

menggunakan bahasa pemrograman Java 2 Standard Edition dengan basis data

MySQL Server 5.1 dan dukungan penghubung JDBC (Java Database

Connectivity) serta Navicat Lite 8 for MySQL sebagai database manager.

Aplikasi ini diberi nama FUGU, bahasa Jepang untuk Ikan Kembung (Blowfish).

Form-form yang ada pada sistem adalah sebagai berikut.

1. Form Login

2. Form Utama

3. Form Enkripsi

4. Form Dekripsi

5. Form Tentang Program

Form login merupakan tampilan utama ketika sistem dijalankan. Form ini

digunakan untuk mengecek pengguna yang dapat menggunakan sistem. Tampilan

form login seperti pada Gambar 4.6.

Setelah otentikasi berhasil, pengguna akan dibawa ke form utama. Form

utama memuat pilihan mode sistem, yaitu: mode enkripsi atau mode dekripsi.

Tampilan form utama seperti pada gambar 4.7.

Gambar 4.6 Tampilan Form Login

Page 43: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

32

Gambar 4.7 Tampilan Form Utama

Form Enkripsi merupakan form inti dari sistem pengamanan data teks.

Pada form ini, pengguna akan diminta memasukkan plainteks, kunci (private key),

dan mode enkripsi cipher blok (ECB, CBC, CFB, atau OFB). Plainteks yang

dimasukkan bisa berupa berkas teks yang tersimpan, maupun pesan teks secara

langsung. Berkas teks umumnya berupa dokumen teks berformat ASCII (Contoh:

*.txt, *.java, *.py, *.pl, *.sh, *.cnf, dan sebagainya). Tampilan form enkripsi

terdapat pada Gambar 4.8.

Page 44: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

33

Gambar 4.8 Tampilan Form Enkripsi

Gambar 4.9 Pesan Pemberitahuan Enkripsi yang Berhasil

Page 45: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

34

Gambar 4.10 Pesan Peringatan Kesalahan Input Kunci

Ketika pengguna melakukan input data dimungkinkan terjadi

kesalahan/kelalaian, salah satunya adalah tidak memasukkan kunci private. Oleh

karena itu diperlukan validasi untuk menangani kesalahan tersebut. Jika pengguna

sengaja/tidak sengaja tidak mengisi kunci, maka akan muncul pesan kesalahan

seperti pada Gambar 4.10. Apabila kunci, plainteks serta mode enkripsi telah diisi

dengan benar, maka proses enkripsi dapat dilanjutkan. Gambar 4.9 menujukkan

proses enkripsi telah berhasil dilakukan. Selanjutnya adalah menyimpan

cipherteks ke dalam berkas berekstensi .cip sebagaimana terdapat pada Gambar

4.11.

Gambar 4.11 Dialog Simpan Cipherteks Berekstensi .cip

Page 46: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

35

Gambar 4.12 Pesan Konfirmasi Cipherteks Berhasil Disimpan

Pada proses dekripsi, data masukan berupa berkas cipherteks (berkas

dengan ekstensi .cip), kunci (private key), dan mode dekripsi cipher blok (ECB,

CBC, CFB atau OFB).

Gambar 4.13 Tampilan Form Dekripsi

Page 47: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

36

Perlu diperhatikan bahwa pada saat enkripsi dan dekripsi data, mode

enkripsi cipher blok yang dipilih harus sama dengan mode dekripsi cipher blok.

Jika tidak, maka akan terjadi kesalahan dalam proses dekripsinya.

Gambar 4.14 Pesan pemberitahuan dekripsi berhasil disimpan

4.5 Evaluasi Sistem

4.5.1 Struktur Algoritma Blowfish

Blowfish adalah algoritma kunci simetri, yang berarti menggunakan kunci

yang sama untuk melakukan enkripsi dan dekripsi berkas. 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, yang merupakan

multiple (kelipatan) dari 8-bit. Jika bukan merupakan kelipatan dari 8-bit, maka

akan ditambahkan bit-bit tambahan (padding) sehingga ukuran untuk tiap blok

sama.

Algoritma dalam Blowfish terbagi menjadi dua bagian, yaitu ekspansi

kunci (key expansion) dan enkripsi data (data encryption). Proses ekspansi kunci

akan melakukan konversi sebuah kunci mulai dari 56-byte (448-bit) sampai

beberapa beberapa array sub kunci dengan total mencapai 4168-byte. Sedangkan

proses enkripsi data terjadi pada jaringan Feistel, yang mengandung fungsi

pengulangan (iterasi) sebanyak enam belas kali.

Blowfish menggunakan jaringan Feistel yang terdiri dari 16 buah putaran.

Skema jaringan Feistel pada algoritma Blowfish dapat dilihat pada Gambar 4.15.

Page 48: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

37

F

P1

F

P2

F

P16

P18 P17

Plainteks / X (64-bit)

XL (32-bit)

Cipherteks (64-bit)

F(XL) = ((S1,a + S2,b mod 232) ⊕ S3,c) + S4,d mod 232 XL(32-bit)= a(8-bit),b(8-bit),c(8-bit),d(8-bit)

XR (32-bit)

13 Putaran

Gambar 4.15. Skema Jaringan Feistel Pada Algoritma Blowfish

Page 49: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

38

Tabel 4.2. Pseudo Code Jaringan Feistel Algoritma Blowfish

Line Pseudo Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

Begin

Input:

X // 64 bit plainteks (8 Karakter ASCII)

P1, P2, ..., P18 // 18 sub-keys, Pi dengan i = iterasi

F() // Fungsi iterasi

Output:

C: 64 bits of cipher text

Algorithm:

(xL, xR) = X // Bagi X menjadi 2 bagian, 32-bit/bagian

Loop on i from = 1 to 16 // Lakukan iterasi

xL = xL XOR Pi // Operasi XOR xL dgn Pi

xR = F(xL) XOR xR // Operasi XOR F(xL) dgn xR

Swap xL and xR // Tukar xL dgn xR

End of loop // Akhir looping

Swap xL and xR // Tukar lagi xL dgn xR

xR = xR XOR P17 // Operasi XOR xR dgn P17 -> xR

xL = xL XOR P18 // Operasi XOR xL dgn P18 -> xL

C = (xL, xR) // 64 bit cipherteks

End

Tabel 4.3. Pseudo Code fungsi iterasi F()

Line Pseudo Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Begin

Input:

xL, xR // 32-bit data masukan

S1[], S2[], S3[], S4[] // 4 Kotak-S table lookup @ 256 entri

Output

F(xL) or F(xR) // 32-bit output data

Algorithm

(a, b, c, d) = xL // Bagi xL (xR) jadi 4 bagian, @ 8-bit

F(xL) = ((S1[a] + S2[b] mod 2**32) XOR S3[c]) + S[d] mod 2**32

// ** Operasi Pangkat

End

Page 50: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

39

Tabel 4.4. Pseudo Code Pembangkitan Sub-kunci

Line Pseudo Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

Begin

Input:

K // Kunci (private) - 32 bit atau lebih

PI // Bagian biner terkecil dari "pi"

= 3.1415927... - 3.0

= 2/16 + 4*/16**2 + 3/16**3 + 15/16**4 + ...

= 0x243f6a8885a308d313198a2e03707344...

Output:

P1, P2, ..., P18 // 18 32-bit sub-kunci

S1[], S2[], S3[], S4[] // 4 Kotak-S, 32-bit @256 elemen arrays

Algorithm:

(P1, P2, ..., P18, S1[], S2[], S3[], S4[]) = PI

K' = (K, K, K, ...) // Ulangi kuncinya -> panjang 18*32 bit

(P1, P2, ..., P18) = (P1, P2, ..., P18) XOR K'

X = (0x000000, 0x000000) // Setting inisialiasi plainteks

X = Blowfish(X) // Menerapkan algoritma Blowfish

(P1, P2) = X // Perbarui dua sub-kunci pertama P1 & P2

X = Blowfish(X) // Terapkan kembali algoritma Blowfish

(P3, P4) = X // Perbarui dua sub-kunci P3 & P4

......

X = Blowfish(X) // Terapkan kembali algoritma Blowfish

(P17, P18) = X // Perbarui dua sub-kunci P17 & P18

X = Blowfish(X) // Terapkan kembali algoritma Blowfish

(S1[0], S1[1]) = X // Perbarui 2 Kotak-S pertama S1[0] & S1[1]

X = Blowfish(X) // Terapkan kembali algoritma Blowfish

(S1[2], S1[3]) = X // Perbarui 2 Kotak-S S1[2] & S1[3]

......

X = Blowfish(X) // Terapkan kembali algoritma Blowfish

(S1[254], S1[255]) = X // Perbarui 2 Kotak-S S1[254] & S1[255]

X = Blowfish(X) // Terapkan kembali algoritma Blowfish

(S2[0], S2[1]) = X // Perbarui 2 Kotak-S pertama S2[0] & S2[1]

......

X = Blowfish(X) // Terapkan kembali algoritma Blowfish

(S4[254], S4[255]) = X // Perbarui 2 Kotak-S S4[254] & S4[255]

End

Page 51: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

40

Perlu diketahui bahwa:

1. Untuk menginisalisasi 18 sub-kunci dan 4 Kotak-S, diperlukan (18*32 +

4*256*32) = (576 + 32768) = 33344 digit biner dari Pi, atau 33344/4 = 8366

digit hex dari PI. Untuk mengetahui 8366 digit hex dari Pi, dapat dilihat pada

lampiran kode program (Lampiran 1).

2. Untuk menyelesaikan ke 18 sub-kunci dan 4 Kotak-S, diperlukan penerapan

algoritma Blowfish sebanyak (18+(4*256))/2 = 521 kali.

4.5.2 Uji Coba Aplikasi

Berdasarkan sistem yang telah dibuat, dilakukan evaluasi dan uji coba

sistem dengan data masukan sebagai berikut:

Tabel 4.5. Data Masukan Uji Coba Aplikasi Proses Enkripsi

Mode

Performance I

(22 B)

Performance II

(206.076 B / 202 KB)

Performance III

(1.052.629 B / 1 MB)

C T (ms) C T (ms) C T (ms)

ECB 24 703 206.080 955 1.052.632 1.297

CBC 24 700 206.080 969 1.052.632 1.328

CFB 22 738 206.076 968 1.052.629 1.344

OFB 22 693 206.076 969 1.052.629 1.312

0

200

400

600

800

1000

1200

1400

Time (ms)

ECB CBC CFB OFB

Mode Enkripsi

Perf 1

Perf 2

Perf 3

Gambar 4.16. Chart Waktu Enkripsi Tiap Mode

Page 52: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

41

Tabel 4.6. Data Masukan Uji Coba Aplikasi Proses Dekripsi

Mode

Performance I

(22 B)

Performance II

(206.076 B / 202 KB)

Performance III

(1.052.629 B / 1 MB)

C T (ms) C T (ms) C T (ms)

ECB 24 781 206.080 1.078 1.052.632 1.140

CBC 24 781 206.080 1.094 1.052.632 1.187

CFB 22 797 206.076 1.000 1.052.629 1.187

OFB 22 782 206.076 1.078 1.052.629 1.156

0

200

400

600

800

1000

1200

Tim

e (

ms)

ECB CBC CFB OFB

Mode Dekripsi

Perf 1

Perf 2

Perf 3

Gambar 4.17 Chart Waktu Dekripsi Tiap Mode

Berdasarkan data-data di atas, terlihat bahwa running time tiap-tiap mode

enkripsi dan dekripsi tidak berbeda jauh secara signifikan.

4.5.3 Analisis Algoritma dengan Notasi big-O

Notasi big O (juga dikenal sebagai Big Oh, notasi Landau, atau notasi

Bachmann-Landau) merupakan notasi yang digunakan untuk menggambarkan

batasan perilaku dari sebuah fungsi algoritma ketika variabel cenderung ke arah

nilai yang tak terbatas. Secara sederhana, notasi big O digunakan untuk

menghitung running time dari sebuah algoritma. Walaupun awalnya

dikembangkan sebagai bagian dari bidang matematika murni, namun saat ini

notasi big O sering digunakan dalam teori kompleksitas komputasi untuk

menggambarkan pemakaian algoritma terhadap sumber daya komputasi

(computational resources).

Page 53: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

42

Tata cara pemakaian notasi big O dalam sebuah fungsi algoritma:

a. Kurangi semua faktor konstanta dan kembalikan ke nilai 1

Contoh: 11400120910 22 nnnn

b. Buang semua konstanta kecuali satu

Contoh: 111 22 nnnn

c. Buang semua variabel kecuali satu yang paling dominan

Contoh: 22 1 nnn . Sehingga nilai notasi big O-nya adalah O( 2n )

Aturan untuk menentukan kompleksitas waktu asimptotik big O dalam

sebuah pseudo code:

a. Pengisian nilai (assignment), perbandingan, operasi aritmatik, read, write

membutuhkan running time O(1)

b. Pengaksesan elemen array atau memilih field tertentu dari sebuah record

membutuhkan running time O(1)

c. Perulangan (loop) for. Kompleksitas waktu loop for adalah jumlah

pengulangan dikali dengan kompleksitas waktu badan (body) loop.

Sederhananya:

1. Normal loop memiliki running time, O(n)

2. Dua buah loop (bersarang) memiliki running time, O( 2n )

3. Tiga buah loop (bersarang) memiliki running time, O( 3n )

Page 54: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

43

Berikut analisis algoritma Blowfish dengan menggunakan notasi big O:

Table 4.7. Kompleksitas Waktu Algoritma Blowfish

Line Pseudo Code O()

1

2

3

4

5

6

7

8

9

10

11

12

13

Begin

Algorithm:

(xL, xR) = X // Bagi X menjadi 2 bagian, 32-bit/bagian

Loop on i from = 1 to 16 // Lakukan iterasi

xL = xL XOR Pi // Operasi XOR xL dgn Pi

xR = F(xL) XOR xR // Operasi XOR F(xL) dgn xR

Swap xL and xR // Tukar xL dgn xR

End of loop // Akhir looping

Swap xL and xR // Tukar lagi xL dgn xR

xR = xR XOR P17 // Operasi XOR xR dgn P17 -> xR

xL = xL XOR P18 // Operasi XOR xL dgn P18 -> xL

C = (xL, xR) // 64 bit cipherteks

End

O(1)

0(n)

0(1)

0(1)

0(1)

O(1)

Kompleksitas waktu asimptotiknya :

= O(1) + O( n ) + O(1) + O(1) + O(1) + O(1)

= O(1) + O( n ) + O(max(1,1,1))

= O(1) + O( n ) + O(1)

= O(max(1, n ,1))

= O( n ) linier, dengan n adalah banyaknya karakter yang dienkripsi

Sedangkan untuk kompleksitas waktu dari masing-masing mode enkripsi cipher

blok yang digunakan dalam sistem ini adalah sebagai berikut:

Tabel 4.8. Kompleksitas Waktu Tiap-tiap Mode

Mode Method O() O(max())

ECB init() O(1)

O( n ) proccessBlock() O(1)

EncryptBlock() O( n )

DecryptBlock() O( n )

CBC init() O(1)

O( n ) EncryptBlock() O( n )

DecryptBlock() O( n )

CFB init() O( n ) O( n )

OFB init() O( n ) O( n )

proccessBlock() O( n )

Page 55: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

44

Berdasarkan hasil perhitungan running time dari masing-masing mode enkripsi di

atas, terlihat bahwa semua mode enkripsi mempunyai running time yang tidak

jauh berbeda. Sehingga algoritma Blowfish dengan mode enkripsi ECB, CBC,

CFB dan OFB dengan notasi big O = O( n ) atau linier, sama baiknya berdasarkan

running time yang ada. Running time bersifat linier, yang berarti bahwa running

time akan selalu berbanding lurus dengan besarnya input. Hal ini terbukti dari

hasil percobaan pada Tabel 4.5 dan Tabel 4.6.

Page 56: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

45

BAB V

PENUTUP

5.1 Kesimpulan

Berdasarkan pembahasan dapat diambil kesimpulan sebagai berikut:

1. Telah dibuat sistem pengamanan data dengan menggunakan algoritma

Blowfish, khususnya data teks.

2. Aplikasi yang dibuat memiliki pilihan mode enkripsi cipher blok.

3. Blowfish merupakan salah satu solusi yang baik untuk mengatasi masalah

keamanan dan kerahasiaan data yang pada umumnya diterapkan dalam

saluran komunikasi dan berkas.

4. Algoritma Blowfish merupakan algoritma dengan operasi yang sederhana

dan menggunakan jaringan Feistel

5. Tingkat keamanan algoritma Blowfish ditentukan oleh jumlah iterasi dan

panjang kunci yang digunakan.

6. Algoritma Blowfish merupakan algoritma yang kuat, yang belum

ditemukan titik lemahnya.

7. Tidak ada perbedaan waktu enkripsi yang signifikan antara mode-mode

enkripsi yang ada, dengan hasil-hasil sebagai berikut:

a) Waktu enkripsi dengan mode ECB (Electronic Code Book) untuk

data 22 byte sebesar 703 ms (millisecond), data 206.080 byte

sebesar 955 ms, data 1.052.632 byte sebesar 1.297 ms.

b) Waktu enkripsi dengan mode CBC (Cipher Block Chainning)

untuk data 22 byte sebesar 700 ms (millisecond), data 206.080

byte sebesar 969 ms, data 1.052.632 byte sebesar 1.328 ms.

c) Waktu enkripsi dengan mode CFB (Cipher Feed Back) untuk data

22 byte sebesar 738 ms (millisecond), data 206.080 byte sebesar

968 ms, data 1.052.632 byte sebesar 1.344 ms.

d) Waktu enkripsi dengan mode OFB (Output Feed Back) untuk data

22 byte sebesar 693 ms (millisecond), data 206.080 byte sebesar

969 ms, data 1.052.632 byte sebesar 1.312 ms.

45

Page 57: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

46

e) Waktu dekripsi dengan mode ECB (Electronic Code Book) untuk

data 24 byte sebesar 781 ms (millisecond), data 206.080 byte

sebesar 1078 ms, data 1.052.632 byte sebesar 1.297 ms.

f) Waktu dekripsi dengan mode CBC (Cipher Block Chainning)

untuk data 24 byte sebesar 781 ms (millisecond), data 206.080

byte sebesar 1094 ms, data 1.052.632 byte sebesar 1.328 ms.

g) Waktu dekripsi dengan mode CFB (Cipher Feed Back) untuk data

22 byte sebesar 797 ms (millisecond), data 206.076 byte sebesar

1000 ms, data 1.052.629 byte sebesar 1.344 ms.

h) Waktu dekripsi dengan mode OFB (Output Feed Back) untuk data

22 byte sebesar 782 ms (millisecond), data 206.076 byte sebesar

1078 ms, data 1.052.629 byte sebesar 1.312 ms.

5.2 Saran

Pada penulisan skripsi ini dibuat sistem pengamanan data dengan

menggunakan algoritma Blowfish dengan teks sebagai data masukannya. Untuk

selanjutnya dapat dikembangkan lagi sistem yang mampu menerima input berkas

tidak hanya teks, namun juga bisa berkas suara, video maupun yang lainnya.

Page 58: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

47

DAFTAR PUSTAKA

Budiyanto, A. (2003). Pengantar Algoritma dan Pemrograman.

Ilmukomputer.com.

Menezes, Alfred J., Paul C Van Oorschot, dan Scott A. Vanstone (1996).

Handbook of Applied Cryptography. Penerbit CRC Press.

Munir, Rinaldi. (2006). Kriptografi. Penerbit Informatika Bandung.

Randy, Adhitya (2006). Studi Perbandingan Algoritma Blowfish dan Twofish, pp.

1-17.

Schneier, Bruce (1996). Applied Cryptography 2nd

. Penerbit John Willey & Sons

Sukmawan, Budi (2000). Metoda Enkripsi Blowfish.

http://bdg.centrin.net.id/~budskman/artikel.htm

Tanggal akses: 1 April 2008 pukul 10.35 WIB

Susanto, Budi. (2004) Jaringan Komputer, Keamanan Jaringan

http://lecturer.ukdw.ac.id/budsus/

Tanggal akses: 1 April 2008 pukul 10.45 WIB

Syafari, Anjar (2007). Sekilas Tentang Enkripsi Blowfish.

http://ilmukomputer.com/2007/07/21/sekilas-tentang-enkripsi-blowfish/

Tanggal akses: 1 April 2008 pukul 10.15 WIB

47

Page 59: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

48

LAMPIRAN

1. Lampiran 1 : 8366 Digit Hex dari Pi (Key Expansions)

243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C89

452821E638D01377BE5466CF34E90C6CC0AC29B7C97C50DD3F84D5B5B5470917

9216D5D98979FB1BD1310BA698DFB5AC2FFD72DBD01ADFB7B8E1AFED6A267E96

BA7C9045F12C7F9924A19947B3916CF70801F2E2858EFC16636920D871574E69

A458FEA3F4933D7E0D95748F728EB658718BCD5882154AEE7B54A41DC25A59B5

9C30D5392AF26013C5D1B023286085F0CA417918B8DB38EF8E79DCB0603A180E

6C9E0E8BB01E8A3ED71577C1BD314B2778AF2FDA55605C60E65525F3AA55AB94

5748986263E8144055CA396A2AAB10B6B4CC5C341141E8CEA15486AF7C72E993

B3EE1411636FBC2A2BA9C55D741831F6CE5C3E169B87931EAFD6BA336C24CF5C

7A325381289586773B8F48986B4BB9AFC4BFE81B6628219361D809CCFB21A991

487CAC605DEC8032EF845D5DE98575B1DC262302EB651B8823893E81D396ACC5

0F6D6FF383F442392E0B4482A484200469C8F04A9E1F9B5E21C66842F6E96C9A

670C9C61ABD388F06A51A0D2D8542F68960FA728AB5133A36EEF0B6C137A3BE4

BA3BF0507EFB2A98A1F1651D39AF017666CA593E82430E888CEE8619456F9FB4

7D84A5C33B8B5EBEE06F75D885C12073401A449F56C16AA64ED3AA62363F7706

1BFEDF72429B023D37D0D724D00A1248DB0FEAD349F1C09B075372C980991B7B

25D479D8F6E8DEF7E3FE501AB6794C3B976CE0BD04C006BAC1A94FB6409F60C4

5E5C9EC2196A246368FB6FAF3E6C53B51339B2EB3B52EC6F6DFC511F9B30952C

CC814544AF5EBD09BEE3D004DE334AFD660F2807192E4BB3C0CBA85745C8740F

D20B5F39B9D3FBDB5579C0BD1A60320AD6A100C6402C7279679F25FEFB1FA3CC

8EA5E9F8DB3222F83C7516DFFD616B152F501EC8AD0552AB323DB5FAFD238760

53317B483E00DF829E5C57BBCA6F8CA01A87562EDF1769DBD542A8F6287EFFC3

AC6732C68C4F5573695B27B0BBCA58C8E1FFA35DB8F011A010FA3D98FD2183B8

4AFCB56C2DD1D35B9A53E479B6F84565D28E49BC4BFB9790E1DDF2DAA4CB7E33

62FB1341CEE4C6E8EF20CADA36774C01D07E9EFE2BF11FB495DBDA4DAE909198

EAAD8E716B93D5A0D08ED1D0AFC725E08E3C5B2F8E7594B78FF6E2FBF2122B64

8888B812900DF01C4FAD5EA0688FC31CD1CFF191B3A8C1AD2F2F2218BE0E1777

EA752DFE8B021FA1E5A0CC0FB56F74E818ACF3D6CE89E299B4A84FE0FD13E0B7

7CC43B81D2ADA8D9165FA2668095770593CC7314211A1477E6AD206577B5FA86

C75442F5FB9D35CFEBCDAF0C7B3E89A0D6411BD3AE1E7E4900250E2D2071B35E

226800BB57B8E0AF2464369BF009B91E5563911D59DFA6AA78C14389D95A537F

207D5BA202E5B9C5832603766295CFA911C819684E734A41B3472DCA7B14A94A

1B5100529A532915D60F573FBC9BC6E42B60A47681E6740008BA6FB5571BE91F

F296EC6B2A0DD915B6636521E7B9F9B6FF34052EC585566453B02D5DA99F8FA1

08BA47996E85076A4B7A70E9B5B32944DB75092EC4192623AD6EA6B049A7DF7D

9CEE60B88FEDB266ECAA8C71699A17FF5664526CC2B19EE1193602A575094C29

A0591340E4183A3E3F54989A5B429D656B8FE4D699F73FD6A1D29C07EFE830F5

4D2D38E6F0255DC14CDD20868470EB266382E9C6021ECC5E09686B3F3EBAEFC9

3C9718146B6A70A1687F358452A0E286B79C5305AA5007373E07841C7FDEAE5C

8E7D44EC5716F2B8B03ADA37F0500C0DF01C1F040200B3FFAE0CF51A3CB574B2

25837A58DC0921BDD19113F97CA92FF69432477322F547013AE5E58137C2DADC

C8B576349AF3DDA7A94461460FD0030EECC8C73EA4751E41E238CD993BEA0E2F

Page 60: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

49

3280BBA1183EB3314E548B384F6DB9086F420D03F60A04BF2CB8129024977C79

5679B072BCAF89AFDE9A771FD9930810B38BAE12DCCF3F2E5512721F2E6B7124

501ADDE69F84CD877A5847187408DA17BC9F9ABCE94B7D8CEC7AEC3ADB851DFA

63094366C464C3D2EF1C18473215D908DD433B3724C2BA1612A14D432A65C451

50940002133AE4DD71DFF89E10314E5581AC77D65F11199B043556F1D7A3C76B

3C11183B5924A509F28FE6ED97F1FBFA9EBABF2C1E153C6E86E34570EAE96FB1

860E5E0A5A3E2AB3771FE71C4E3D06FA2965DCB999E71D0F803E89D65266C825

2E4CC9789C10B36AC6150EBA94E2EA78A5FC3C531E0A2DF4F2F74EA7361D2B3D

1939260F19C279605223A708F71312B6EBADFE6EEAC31F66E3BC4595A67BC883

B17F37D1018CFF28C332DDEFBE6C5AA56558218568AB9802EECEA50FDB2F953B

2AEF7DAD5B6E2F841521B62829076170ECDD4775619F151013CCA830EB61BD96

0334FE1EAA0363CFB5735C904C70A239D59E9E0BCBAADE14EECC86BC60622CA7

9CAB5CABB2F3846E648B1EAF19BDF0CAA02369B9655ABB5040685A323C2AB4B3

319EE9D5C021B8F79B540B19875FA09995F7997E623D7DA8F837889A97E32D77

11ED935F166812810E358829C7E61FD696DEDFA17858BA9957F584A51B227263

9B83C3FF1AC24696CDB30AEB532E30548FD948E46DBC312858EBF2EF34C6FFEA

FE28ED61EE7C3C735D4A14D9E864B7E342105D14203E13E045EEE2B6A3AAABEA

DB6C4F15FACB4FD0C742F442EF6ABBB5654F3B1D41CD2105D81E799E86854DC7

E44B476A3D816250CF62A1F25B8D2646FC8883A0C1C7B6A37F1524C369CB7492

47848A0B5692B285095BBF00AD19489D1462B17423820E0058428D2A0C55F5EA

1DADF43E233F70613372F0928D937E41D65FECF16C223BDB7CDE3759CBEE7460

4085F2A7CE77326EA607808419F8509EE8EFD85561D99735A969A7AAC50C06C2

5A04ABFC800BCADC9E447A2EC3453484FDD567050E1E9EC9DB73DBD3105588CD

675FDA79E3674340C5C43465713E38D83D28F89EF16DFF20153E21E78FB03D4A

E6E39F2BDB83ADF7E93D5A68948140F7F64C261C94692934411520F77602D4F7

BCF46B2ED4A20068D40824713320F46A43B7D4B7500061AF1E39F62E97244546

14214F74BF8B88404D95FC1D96B591AF70F4DDD366A02F45BFBC09EC03BD9785

7FAC6DD031CB850496EB27B355FD3941DA2547E6ABCA0A9A28507825530429F4

0A2C86DAE9B66DFB68DC1462D7486900680EC0A427A18DEE4F3FFEA2E887AD8C

B58CE0067AF4D6B6AACE1E7CD3375FECCE78A399406B2A4220FE9E35D9F385B9

EE39D7AB3B124E8B1DC9FAF74B6D185626A36631EAE397B23A6EFA74DD5B4332

6841E7F7CA7820FBFB0AF54ED8FEB397454056ACBA48952755533A3A20838D87

FE6BA9B7D096954B55A867BCA1159A58CCA9296399E1DB33A62A4A563F3125F9

5EF47E1C9029317CFDF8E80204272F7080BB155C05282CE395C11548E4C66D22

48C1133FC70F86DC07F9C9EE41041F0F404779A45D886E17325F51EBD59BC0D1

F2BCC18F41113564257B7834602A9C60DFF8E8A31F636C1B0E12B4C202E1329E

AF664FD1CAD181156B2395E0333E92E13B240B62EEBEB92285B2A20EE6BA0D99

DE720C8C2DA2F728D012784595B794FD647D0862E7CCF5F05449A36F877D48FA

C39DFD27F33E8D1E0A476341992EFF743A6F6EABF4F8FD37A812DC60A1EBDDF8

991BE14CDB6E6B0DC67B55106D672C372765D43BDCD0E804F1290DC7CC00FFA3

B5390F92690FED0B667B9FFBCEDB7D9CA091CF0BD9155EA3BB132F88515BAD24

7B9479BF763BD6EB37392EB3CC1159798026E297F42E312D6842ADA7C66A2B3B

12754CCC782EF11C6A124237B79251E706A1BBE64BFB63501A6B101811CAEDFA

3D25BDD8E2E1C3C9444216590A121386D90CEC6ED5ABEA2A64AF674EDA86A85F

BEBFE98864E4C3FE9DBC8057F0F7C08660787BF86003604DD1FD8346F6381FB0

7745AE04D736FCCC83426B33F01EAB71B08041873C005E5F77A057BEBDE8AE24

55464299BF582E614E58F48FF2DDFDA2F474EF388789BDC25366F9C3C8B38E74

B475F25546FCD9B97AEB26618B1DDF84846A0E79915F95E2466E598E20B45770

Page 61: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

50

8CD55591C902DE4CB90BACE1BB8205D011A862487574A99EB77F19B6E0A9DC09

662D09A1C4324633E85A1F0209F0BE8C4A99A0251D6EFE101AB93D1D0BA5A4DF

A186F20F2868F169DCB7DA83573906FEA1E2CE9B4FCD7F5250115E01A70683FA

A002B5C40DE6D0279AF88C27773F8641C3604C0661A806B5F0177A28C0F586E0

006058AA30DC7D6211E69ED72338EA6353C2DD94C2C21634BBCBEE5690BCB6DE

EBFC7DA1CE591D766F05E4094B7C018839720A3D7C927C2486E3725F724D9DB9

1AC15BB4D39EB8FCED54557808FCA5B5D83D7CD34DAD0FC41E50EF5EB161E6F8

A28514D96C51133C6FD5C7E756E14EC4362ABFCEDDC6C837D79A323492638212

670EFA8E406000E03A39CE37D3FAF5CFABC277375AC52D1B5CB0679E4FA33742

D382274099BC9BBED5118E9DBF0F7315D62D1C7EC700C47BB78C1B6B21A19045

B26EB1BE6A366EB45748AB2FBC946E79C6A376D26549C2C8530FF8EE468DDE7D

D5730A1D4CD04DC62939BBDBA9BA4650AC9526E8BE5EE304A1FAD5F06A2D519A

63EF8CE29A86EE22C089C2B843242EF6A51E03AA9CF2D0A483C061BA9BE96A4D

8FE51550BA645BD62826A2F9A73A3AE14BA99586EF5562E9C72FEFD3F752F7DA

3F046F6977FA0A5980E4A91587B086019B09E6AD3B3EE593E990FD5A9E34D797

2CF0B7D9022B8B5196D5AC3A017DA67DD1CF3ED67C7D2D281F9F25CFADF2B89B

5AD6B4725A88F54CE029AC71E019A5E647B0ACFDED93FA9BE8D3C48D283B57CC

F8D5662979132E28785F0191ED756055F7960E44E3D35E8C15056DD488F46DBA

03A161250564F0BDC3EB9E153C9057A297271AECA93A072A1B3F6D9B1E6321F5

F59C66FB26DCF3197533D928B155FDF5035634828ABA3CBB28517711C20AD9F8

ABCC5167CCAD925F4DE817513830DC8E379D58629320F991EA7A90C2FB3E7BCE

5121CE64774FBE32A8B6E37EC3293D4648DE53696413E680A2AE0810DD6DB224

69852DFD09072166B39A460A6445C0DD586CDECF1C20C8AE5BBEF7DD1B588D40

CCD2017F6BB4E3BBDDA26A7E3A59FF453E350A44BCB4CDD572EACEA8FA6484BB

8D6612AEBF3C6F47D29BE463542F5D9EAEC2771BF64E6370740E0D8DE75B1357

F8721671AF537D5D4040CB084EB4E2CC34D2466A0115AF84E1B0042895983A1D

06B89FB4CE6EA0486F3F3B823520AB82011A1D4B277227F8611560B1E7933FDC

BB3A792B344525BDA08839E151CE794B2F32C9B7A01FBAC9E01CC87EBCC7D1F6

CF0111C3A1E8AAC71A908749D44FBD9AD0DADECBD50ADA380339C32AC6913667

8DF9317CE0B12B4FF79E59B743F5BB3AF2D519FF27D9459CBF97222C15E6FC2A

0F91FC719B941525FAE59361CEB69CEBC2A8645912BAA8D1B6C1075EE3056A0C

10D25065CB03A442E0EC6E0E1698DB3B4C98A0BE3278E9649F1F9532E0D392DF

D3A0342B8971F21E1B0A74414BA3348CC5BE7120C37632D8DF359F8D9B992F2E

E60B6F470FE3F11DE54CDA541EDAD891CE6279CFCD3E7E6F1618B166FD2C1D05

848FD2C5F6FB2299F523F357A632762393A8353156CCCD02ACF081625A75EBB5

6E16369788D273CCDE96629281B949D04C50901B71C65614E6C6C7BD327A140A

45E1D006C3F27B9AC9AA53FD62A80F00BB25BFE235BDD2F671126905B2040222

B6CBCF7CCD769C2B53113EC01640E3D338ABBD602547ADF0BA38209CF746CE76

77AFA1C52075606085CBFE4E8AE88DD87AAAF9B04CF9AA7E1948C25C02FB8A8C

01C36AE4D6EBE1F990D4F869A65CDEA03F09252DC208E69FB74E6132CE77E25B

578FDFE33AC372E6

Page 62: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

51

2. Lampiran 2 : Form Login (LoginForm.java)

/*

* LoginForm.java

*

* host="localhost";

* dataBaseName="fugu";

* password="bismillah";

* userId="nixnux";

*

* @ Prasetyo Bawono

* @ [email protected]

* nb: Semua konstruktor swing tidak disertakan.

* Full Source: http://ono.web.id/fugu

* Created on Apr 15, 2009, 8:30:05 AM

*/

package fugu;

import java.awt.Dimension;

import java.awt.Toolkit;

import java.sql.SQLException;

import javax.swing.JOptionPane;

import fugu.dbase.*;

/**

*

* @author prasetyo bawono

*/

public class LoginForm extends javax.swing.JDialog {

/** Creates new form LoginForm */

public LoginForm(java.awt.Frame parent, boolean modal) {

super(parent, modal);

initComponents();

Dimension screenSize =

Toolkit.getDefaultToolkit().getScreenSize();

Dimension frameSize = this.getSize();

if (frameSize.height > screenSize.height){

frameSize.height = screenSize.height;

}

if (frameSize.width > screenSize.width) {

frameSize.width = screenSize.width;

}

this.setLocation((screenSize.width - frameSize.width) / 2,

(screenSize.height - frameSize.height) / 2);

Page 63: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

52

this.setTitle("Login Form");

}

private void btn_cancelActionPerformed(java.awt.event.ActionEvent

evt) {//GEN-FIRST:event_btn_cancelActionPerformed

FuguApp.getApplication().ShowMainMenu();

FuguApp.getInstanceMainMenu().setAuthentication(false);

this.dispose();

}//GEN-LAST:event_btn_cancelActionPerformed

private void btn_goActionPerformed(java.awt.event.ActionEvent evt)

{//GEN-FIRST:event_btn_goActionPerformed

try{

Login();

}

catch(SQLException sqle) {

System.err.println(sqle);

}

}//GEN-LAST:event_btn_goActionPerformed

/**

* @param args the command line arguments

*/

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

LoginForm dialog = new LoginForm(new

javax.swing.JFrame(), true);

dialog.addWindowListener(new

java.awt.event.WindowAdapter() {

public void windowClosing(java.awt.event.WindowEvent

e) {

System.exit(0);

}

});

dialog.setVisible(true);

}

});

}

// Variables declaration - do not modify//GEN-BEGIN:variables

private javax.swing.JButton btn_cancel;

private javax.swing.JButton btn_go;

private javax.swing.JLabel fugu;

private javax.swing.JLabel iduser;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel3;

Page 64: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

53

private javax.swing.JLabel jLabel4;

private javax.swing.JSeparator jSeparator1;

private javax.swing.JSeparator jSeparator2;

private javax.swing.JLabel password;

private javax.swing.JTextField txt_id_user;

private javax.swing.JPasswordField txt_pass;

// End of variables declaration//GEN-END:variables

private void Login() throws SQLException{

DBQuery q1 = new DBQuery(FuguApp.getConnection());

String strSql ="select * from tbl_user where user_id = '" +

txt_id_user.getText() +"' AND pass_id = ('" +

String.copyValueOf(txt_pass.getPassword(),0,

txt_pass.getPassword().length) + "')";

q1.setStrSql(strSql);

q1.makeActive(true);

if(q1.getRowCount()>0){

FuguApp.getInstanceMainMenu().setAuthentication(true);

FuguApp.getApplication().ShowMainMenu();

this.dispose();

}

else {

JOptionPane.showMessageDialog(LoginForm.this, "Username dan

Password Salah Bro !", "ERROR", JOptionPane.ERROR_MESSAGE);

}

}

}

Page 65: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

54

3. Lampiran 3 : Form Utama (FuguView.java)

/*

* FuguView.java

* Menu Utama

* @ Prasetyo Bawono

* @ [email protected]

* nb: Semua konstruktor swing tidak disertakan.

* Full Source: http://ono.web.id/fugu

*/

package fugu;

import fugu.mode.BlowfishDec;

import fugu.mode.BlowfishEnc;

import org.jdesktop.application.Action;

import org.jdesktop.application.SingleFrameApplication;

import org.jdesktop.application.FrameView;

import javax.swing.JDialog;

import javax.swing.JFrame;

/**

* The application's main frame.

*/

public class FuguView extends FrameView {

public FuguView(SingleFrameApplication app) {

super(app);

initComponents();

}

@Action

public void showAboutBox() {

if (aboutBox == null) {

JFrame mainFrame = FuguApp.getApplication().getMainFrame();

aboutBox = new FuguAboutBox(mainFrame);

aboutBox.setLocationRelativeTo(mainFrame);

}

FuguApp.getApplication().show(aboutBox);

}

private void mn_logoutActionPerformed(java.awt.event.ActionEvent evt)

{//GEN-FIRST:event_mn_logoutActionPerformed

setAuthentication(false);

}//GEN-LAST:event_mn_logoutActionPerformed

Page 66: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

55

private void mn_loginActionPerformed(java.awt.event.ActionEvent evt)

{//GEN-FIRST:event_mn_loginActionPerformed

mn_logoutActionPerformed(evt);

new LoginForm(new javax.swing.JFrame(),true).setVisible(true);

}//GEN-LAST:event_mn_loginActionPerformed

private void

menuNotepadDecryptActionPerformed(java.awt.event.ActionEvent evt) {//GEN-

FIRST:event_menuNotepadDecryptActionPerformed

// TODO add your handling code here:

setEnc(true);

new BlowfishDec(new javax.swing.JFrame(),true).setVisible(true);

}//GEN-LAST:event_menuNotepadDecryptActionPerformed

private void

menuNotepadEncryptActionPerformed(java.awt.event.ActionEvent evt) {//GEN-

FIRST:event_menuNotepadEncryptActionPerformed

// TODO add your handling code here:

setEnc(true);

new BlowfishEnc(new javax.swing.JFrame(),true).setVisible(true);

}//GEN-LAST:event_menuNotepadEncryptActionPerformed

private void btnEncModeActionPerformed(java.awt.event.ActionEvent

evt) {//GEN-FIRST:event_btnEncModeActionPerformed

// TODO add your handling code here:

setEnc(true);

new BlowfishEnc(new javax.swing.JFrame(),true).setVisible(true);

}//GEN-LAST:event_btnEncModeActionPerformed

private void btnDecModeActionPerformed(java.awt.event.ActionEvent

evt) {//GEN-FIRST:event_btnDecModeActionPerformed

// TODO add your handling code here:

setEnc(true);

new BlowfishDec(new javax.swing.JFrame(),true).setVisible(true);

}//GEN-LAST:event_btnDecModeActionPerformed

// Variables declaration - do not modify//GEN-BEGIN:variables

private javax.swing.JButton btnDecMode;

private javax.swing.JButton btnEncMode;

private javax.swing.JMenu fileMenu;

private javax.swing.JMenu helpMenu;

private javax.swing.JLabel jLabel1;

private javax.swing.JMenu jMenu1;

private javax.swing.JLabel lblChoose;

private javax.swing.JLabel lblExit;

private javax.swing.JLabel lblLogout;

private javax.swing.JPanel mainPanel;

Page 67: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

56

private javax.swing.JMenuBar menuBar;

private javax.swing.JMenuItem menuNotepadDecrypt;

private javax.swing.JMenuItem menuNotepadEncrypt;

private javax.swing.JMenuItem mn_login;

private javax.swing.JMenuItem mn_logout;

private javax.swing.JLabel statusAnimationLabel;

private javax.swing.JLabel statusMessageLabel;

private javax.swing.JPanel statusPanel;

private javax.swing.JMenu systemMenu;

// End of variables declaration//GEN-END:variables

// private final Timer messageTimer;

// private final Timer busyIconTimer;

// private final Icon idleIcon;

// private final Icon[] busyIcons = new Icon[15];

// private int busyIconIndex = 0;

private JDialog aboutBox;

public void setAuthentication(boolean value){

fileMenu.setEnabled(value);

helpMenu.setEnabled(value);

if(value==true){

mn_login.setEnabled(false);

mn_logout.setEnabled(true);

btnEncMode.setEnabled(true);

btnDecMode.setEnabled(true);

}

else{

mn_login.setEnabled(true);

mn_logout.setEnabled(false);

btnEncMode.setEnabled(false);

btnDecMode.setEnabled(false);

}

}

public void setEnc(boolean value){

if(value==true){

// mn_enc.setEnabled(false);

// mn_dec.setEnabled(false);

}

else{

fileMenu.setEnabled(true);

helpMenu.setEnabled(true);

}

}

}

Page 68: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

57

4. Lampiran 4 : Form Enkripsi (BlowfishEnc.java)

/*

* BlowfishEnc.java

* @ Prasetyo Bawono

* @ [email protected]

* nb: Semua konstruktor swing tidak disertakan.

* Full Source: http://ono.web.id/fugu

*/

package fugu.mode;

import fugu.FuguApp;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Toolkit;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileWriter;

import java.io.InputStreamReader;

import java.security.Security;

import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;

import javax.swing.JFileChooser;

import javax.swing.JOptionPane;

import javax.swing.filechooser.FileNameExtensionFilter;

import org.jdesktop.application.Application;

import org.jdesktop.application.ResourceMap;

/**

*

* @author prasetyo bawono

*/

public class BlowfishEnc extends javax.swing.JDialog {

final static int TESTBUFSIZE = 100000;

final static int TESTLOOPS = 10000;

/** Creates new form Encryption */

public BlowfishEnc(java.awt.Frame parent, boolean modal){

super(parent, modal);

initComponents();

Dimension screenSize =

Toolkit.getDefaultToolkit().getScreenSize();

Dimension frameSize = this.getSize();

Page 69: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

58

if (frameSize.height > screenSize.height){

frameSize.height = screenSize.height;

}

if (frameSize.width > screenSize.width) {

frameSize.width = screenSize.width;

}

this.setLocation((screenSize.width - frameSize.width) / 2,

(screenSize.height - frameSize.height) / 2);

this.setTitle("Encryption Mode");

// Define Clickable

textAreaPlain.setEnabled(false);

ResourceMap resourceMap =

Application.getInstance(fugu.FuguApp.class).getContext().getResourceMap(B

lowfishEnc.class);

textAreaPlain.setBackground(resourceMap.getColor("textAreaCipher.backgrou

nd"));

btnNewPlainText.setEnabled(true);

btnSavePlainText.setEnabled(false);

btnOpenPlainText.setEnabled(false);

btnEncryptPlainText.setEnabled(false);

btnSaveCipherText.setEnabled(false);

btnResetPrivKey.setEnabled(false);

txtPassword.setEnabled(false);

btnNewPlainText.requestFocus();

}

private void

btnNewPlainTextActionPerformed(java.awt.event.ActionEvent evt) {//GEN-

FIRST:event_btnNewPlainTextActionPerformed

// TODO add your handling code here:

if (evt.getSource() == this.btnNewPlainText){

// Define Clickable

textAreaPlain.setEnabled(true);

textAreaPlain.setBackground(Color.WHITE);

btnNewPlainText.setEnabled(false);

btnSavePlainText.setEnabled(true);

btnOpenPlainText.setEnabled(true);

btnEncryptPlainText.setEnabled(true);

btnResetPrivKey.setEnabled(true);

txtPassword.setEnabled(true);

Page 70: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

59

// setAuthPlainText(true);

this.textAreaPlain.setText("");

this.textAreaCipher.setText("");

this.txtPassword.setText("");

this.tfBenchmark.setText("");

this.tfCipherSize.setText("");

}

}//GEN-LAST:event_btnNewPlainTextActionPerformed

private void

btnSavePlainTextActionPerformed(java.awt.event.ActionEvent evt) {//GEN-

FIRST:event_btnSavePlainTextActionPerformed

if (evt.getSource() == this.btnSavePlainText){

JFileChooser savePlainText = new JFileChooser();

FileNameExtensionFilter filter = new

FileNameExtensionFilter("Text Documents (*.txt)", "txt", "java");

savePlainText.setFileFilter(filter);

savePlainText.setDialogTitle("Save PlainText to File");

int option = savePlainText.showSaveDialog(this);

// Jika OK

if (option == JFileChooser.APPROVE_OPTION){

try {

// Buat buffered writer untuk menulis

BufferedWriter out = new BufferedWriter(new

FileWriter(savePlainText.getSelectedFile().getPath()));

// BufferedWriter out = new BufferedWriter(new

OutputStreamWriter(new

FileOutputStream(savePlainText.getSelectedFile().getPath()),"UTF-8"));

out.write(this.textAreaPlain.getText());

out.close();

} catch (Exception ex) {

System.out.println(ex.getMessage());

}

JOptionPane.showMessageDialog(null, "Sukses Menyimpan

File "+savePlainText.getSelectedFile().getName()+"\nLokasi File:

"+savePlainText.getSelectedFile(),"PlainText Saved!",

JOptionPane.INFORMATION_MESSAGE);

} else

JOptionPane.showMessageDialog(null, "Something

Happened?", "Gagal Menyimpan File", JOptionPane.ERROR_MESSAGE);

}

}//GEN-LAST:event_btnSavePlainTextActionPerformed

private void

menuNotepadQuitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-

FIRST:event_menuNotepadQuitActionPerformed

// TODO add your handling code here:

Page 71: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

60

FuguApp.getApplication().ShowMainMenu();

FuguApp.getInstanceMainMenu().setAuthentication(true);

this.dispose();

}//GEN-LAST:event_menuNotepadQuitActionPerformed

private void

btnOpenPlainTextActionPerformed(java.awt.event.ActionEvent evt) {//GEN-

FIRST:event_btnOpenPlainTextActionPerformed

JFileChooser openPlainText = new JFileChooser();

openPlainText.setFileSelectionMode(JFileChooser.FILES_ONLY);

openPlainText.setDialogTitle("Open Plain Text File(s)");

FileNameExtensionFilter filterFile = new

FileNameExtensionFilter("Text Documents (*.txt)", "txt", "java");

openPlainText.setFileFilter(filterFile);

try {

if

(openPlainText.showOpenDialog(this)==JFileChooser.APPROVE_OPTION) {

File selectedFile =

openPlainText.getSelectedFile();

if(selectedFile.canRead() && selectedFile.exists()){

FileInputStream fis = new

FileInputStream(selectedFile);

InputStreamReader in= new InputStreamReader(fis);

char[] buffer = new char[4194304]; // 4Mb

buffer

int n = in.read(buffer);

String plainText = new String(buffer,0,n);

textAreaPlain.setText(plainText);

long sizePlain = selectedFile.length();

String s = String.valueOf(sizePlain);

tfPlainSize.setText(s);

in.close();

}

}

} catch (Exception e) {

e.printStackTrace();

}

}//GEN-LAST:event_btnOpenPlainTextActionPerformed

private void

btnResetPrivKeyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-

FIRST:event_btnResetPrivKeyActionPerformed

// TODO add your handling code here:

if (evt.getSource() == this.btnResetPrivKey)

this.txtPassword.setText("");

}//GEN-LAST:event_btnResetPrivKeyActionPerformed

Page 72: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

61

private void

btnEncryptPlainTextActionPerformed(java.awt.event.ActionEvent evt)

{//GEN-FIRST:event_btnEncryptPlainTextActionPerformed

// Encrypt:

// ========

// Plain(String) -> Plain(String->Byte Array[]) -> Cipher(Byte

Array[]->String) -> Cipher(String)

long charCount = textAreaPlain.getText().length();

String s = String.valueOf(charCount);

tfPlainSize.setText(s);

if (evt.getSource()==this.btnEncryptPlainText) {

if (textAreaPlain.getText().length()>0) {

if(txtPassword.getPassword().length==0){

try {

JOptionPane.showMessageDialog(null, "Private

key tidak boleh kosong!", "Error Message", JOptionPane.ERROR_MESSAGE);

btnResetPrivKey.setEnabled(true);

txtPassword.setEnabled(true);

txtPassword.requestFocus();

} catch (IllegalArgumentException e) {

System.err.print(e);

}

}

if(txtPassword.getPassword().length<8 &&

txtPassword.getPassword().length>0){

try {

JOptionPane.showMessageDialog(null, "Private

key minimal 8 karakter", "Error", JOptionPane.ERROR_MESSAGE);

btnResetPrivKey.setEnabled(true);

txtPassword.setEnabled(true);

txtPassword.requestFocus();

} catch (Exception e) {

System.err.print(e);

}

}

if (txtPassword.getPassword().length>=8) {

Security.addProvider(new

org.bouncycastle.jce.provider.BouncyCastleProvider());

String textPlainStr = textAreaPlain.getText();

char[] textPassword = txtPassword.getPassword();

Page 73: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

62

byte[] textPlainStrByte = textPlainStr.getBytes();

byte[] textPasswordByte = (new

String(textPassword)).getBytes();

// ECB MODE

if (rbECB.isSelected()) {

try {

long ecbStart;

long ecbEnd;

long ecbTime;

ecbStart = System.currentTimeMillis();

SecretKeySpec key = new

SecretKeySpec(textPasswordByte, "Blowfish");

Cipher cipher =

Cipher.getInstance("Blowfish/ECB/PKCS5Padding","BC");

// Encryption

cipher.init(Cipher.ENCRYPT_MODE, key);

byte[] cipherText =

cipher.doFinal(textPlainStrByte);

int ctLength =

cipher.update(textPlainStrByte, 0, textPlainStrByte.length, cipherText,

0);

ctLength += cipher.doFinal(cipherText,

ctLength);

textAreaCipher.setText(new

String(cipherText));

String ctLengthStr =

Integer.toString(ctLength);

tfCipherSize.setText(ctLengthStr);

// Benchmark for performance

ecbEnd = System.currentTimeMillis(); //

Encryption processing time (ms)

ecbTime = (ecbEnd - ecbStart); // nano to

milli

String b = String.valueOf(ecbTime); //

9223372036854775807 9223372036854775807

tfBenchmark.setText(b);

} catch (Exception e) {

System.err.println(e);

}

}

// CBC MODE

Page 74: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

63

if (rbCBC.isSelected()){

try {

long cbcStart;

long cbcEnd;

long cbcTime;

// Inisialization Vector

byte[] ivBytes = new byte[]{

0x07, 0x06, 0x05, 0x04,

0x03, 0x02, 0x01, 0x00

};

// Define Algorithm and Mode

cbcStart = System.currentTimeMillis();

SecretKeySpec key = new

SecretKeySpec(textPasswordByte, "Blowfish");

IvParameterSpec ivSpec = new

IvParameterSpec(ivBytes);

Cipher cipher =

Cipher.getInstance("Blowfish/CBC/PKCS5Padding", "BC");

// Encryption

cipher.init(Cipher.ENCRYPT_MODE, key,

ivSpec);

byte[] cipherText =

cipher.doFinal(textPlainStrByte);

int ctLength =

cipher.update(textPlainStrByte, 0, textPlainStrByte.length, cipherText,

0);

ctLength += cipher.doFinal(cipherText,

ctLength);

textAreaCipher.setText(new

String(cipherText));

String ctLengthStr =

Integer.toString(ctLength);

tfCipherSize.setText(ctLengthStr);

// Benchmark for performance

cbcEnd = System.currentTimeMillis(); //

Encryption processing time (ms)

cbcTime = (cbcEnd - cbcStart);

String b = String.valueOf(cbcTime); //

9223372036854775807 9223372036854775807

tfBenchmark.setText(b);

} catch (Exception e) {

System.err.println(e);

}

Page 75: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

64

}

// OFB MODE

if (rbOFB.isSelected()){

try {

long ofbStart;

long ofbEnd;

long ofbTime;

// Initialization Vector IV

byte[] ivBytes = new byte[]{

0x07, 0x06, 0x05, 0x04,

0x03, 0x02, 0x01, 0x00

};

// Define Algorithm

ofbStart = System.currentTimeMillis();

SecretKeySpec key = new

SecretKeySpec(textPasswordByte, "Blowfish");

IvParameterSpec ivSpec = new

IvParameterSpec(ivBytes);

Cipher cipher =

Cipher.getInstance("Blowfish/OFB/NoPadding", "BC");

// Encryption

cipher.init(Cipher.ENCRYPT_MODE, key,

ivSpec);

byte[] cipherText =

cipher.doFinal(textPlainStrByte);

int ctLength =

cipher.update(textPlainStrByte, 0, textPlainStrByte.length, cipherText,

0);

ctLength += cipher.doFinal(cipherText,

ctLength);

textAreaCipher.setText(new

String(cipherText));

String ctLengthStr =

Integer.toString(ctLength);

tfCipherSize.setText(ctLengthStr);

// Benchmark for performance

ofbEnd = System.currentTimeMillis(); //

Encryption processing time (ms)

ofbTime = (ofbEnd - ofbStart);

String b = String.valueOf(ofbTime); //

9223372036854775807 9223372036854775807

tfBenchmark.setText(b);

Page 76: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

65

} catch (Exception e) {

System.err.println(e);

}

}

// CFB MODE

if (rbCFB.isSelected()){

try {

long cfbStart;

long cfbEnd;

long cfbTime;

// Initialization Vector IV

byte[] ivBytes = new byte[]{

0x07, 0x06, 0x05, 0x04,

0x03, 0x02, 0x01, 0x00

};

// Define Algorithm

cfbStart = System.currentTimeMillis();

SecretKeySpec key = new

SecretKeySpec(textPasswordByte, "Blowfish");

IvParameterSpec ivSpec = new

IvParameterSpec(ivBytes);

Cipher cipher =

Cipher.getInstance("Blowfish/CFB/NoPadding", "BC");

// Encryption

cipher.init(Cipher.ENCRYPT_MODE, key,

ivSpec);

byte[] cipherText =

cipher.doFinal(textPlainStrByte);

int ctLength =

cipher.update(textPlainStrByte, 0, textPlainStrByte.length, cipherText,

0);

ctLength += cipher.doFinal(cipherText,

ctLength);

textAreaCipher.setText(new

String(cipherText));

String ctLengthStr =

Integer.toString(ctLength);

tfCipherSize.setText(ctLengthStr);

// Benchmark for performance

cfbEnd = System.currentTimeMillis(); //

Encryption processing time (ms)

cfbTime = (cfbEnd - cfbStart);

Page 77: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

66

String b = String.valueOf(cfbTime); //

9223372036854775807 9223372036854775807

tfBenchmark.setText(b);

} catch (Exception e) {

System.err.println(e);

}

}

JOptionPane.showMessageDialog(null, "Enkripsi

Berhasil..", "Encryption Successfully", JOptionPane.INFORMATION_MESSAGE);

btnResetPrivKey.setEnabled(false);

txtPassword.setEnabled(false);

}

}

else {

JOptionPane.showMessageDialog(null, "Plainteks tidak

boleh kosong", "Error Message", JOptionPane.ERROR_MESSAGE);

}

}

btnNewPlainText.setEnabled(true);

btnSavePlainText.setEnabled(false);

btnOpenPlainText.setEnabled(false);

btnEncryptPlainText.setEnabled(false);

btnSaveCipherText.setEnabled(true);

btnSaveCipherText.requestFocus();

}//GEN-LAST:event_btnEncryptPlainTextActionPerformed

private void

btnSaveCipherTextActionPerformed(java.awt.event.ActionEvent evt) {//GEN-

FIRST:event_btnSaveCipherTextActionPerformed

if (evt.getSource() == this.btnSaveCipherText){

JFileChooser saveCipherText = new JFileChooser();

FileNameExtensionFilter filter = new

FileNameExtensionFilter("CipherText File (*.cip)", "cip");

saveCipherText.setFileFilter(filter);

saveCipherText.setDialogTitle("Save CipherText to File");

int option = saveCipherText.showSaveDialog(this);

// Jika OK

if (option == JFileChooser.APPROVE_OPTION){

try {

// Buat buffered writer untuk menulis

BufferedWriter outs = new BufferedWriter(new

FileWriter(saveCipherText.getSelectedFile().getPath()));

// BufferedWriter outs = new BufferedWriter(new

OutputStreamWriter(new

FileOutputStream(saveCipherText.getSelectedFile().getPath()),"ASCII"));

outs.write(this.textAreaCipher.getText());

Page 78: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

67

outs.close();

} catch (Exception ex) {

System.out.println(ex.getMessage());

}

JOptionPane.showMessageDialog(null, "Sukses Menyimpan

File "+saveCipherText.getSelectedFile().getName()+"\nLokasi File:

"+saveCipherText.getSelectedFile(),"CipherText Saved!",

JOptionPane.INFORMATION_MESSAGE);

}

else

JOptionPane.showMessageDialog(null, "Something

Happened?", "Gagal Menyimpan File", JOptionPane.ERROR_MESSAGE);

}

}//GEN-LAST:event_btnSaveCipherTextActionPerformed

/**

* @param args the command line arguments

*/

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

BlowfishEnc dialog = new BlowfishEnc(new

javax.swing.JFrame(), true);

dialog.addWindowListener(new

java.awt.event.WindowAdapter() {

public void windowClosing(java.awt.event.WindowEvent

e) {

System.exit(0);

}

});

dialog.setVisible(true);

}

});

}

// Variables declaration - do not modify//GEN-BEGIN:variables

private javax.swing.JButton btnEncryptPlainText;

private javax.swing.JButton btnNewPlainText;

private javax.swing.JButton btnOpenPlainText;

private javax.swing.JButton btnResetPrivKey;

private javax.swing.JButton btnSaveCipherText;

private javax.swing.JButton btnSavePlainText;

private javax.swing.ButtonGroup buttonGroup1;

private javax.swing.JLabel fugu;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel3;

private javax.swing.JLabel jLabel4;

Page 79: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

68

private javax.swing.JLabel jLabel5;

private javax.swing.JLabel jLabel6;

private javax.swing.JLabel jLabel7;

private javax.swing.JLabel jLabel8;

private javax.swing.JMenuBar jMenuBar1;

private javax.swing.JPanel jPanel1;

private javax.swing.JPanel jPanel2;

private javax.swing.JScrollPane jScrollPane1;

private javax.swing.JScrollPane jScrollPane2;

private javax.swing.JLabel lblEncryption;

private javax.swing.JLabel lblOpenFile;

private javax.swing.JLabel lblPrivKey;

private javax.swing.JLabel lblPrivateKey;

private javax.swing.JLabel lblSaveTo;

private javax.swing.JMenu menuNotepadFile;

private javax.swing.JMenuItem menuNotepadQuit;

private javax.swing.JPanel panelCipherText;

private javax.swing.JPanel panelPlainText;

private javax.swing.JRadioButton rbCBC;

private javax.swing.JRadioButton rbCFB;

private javax.swing.JRadioButton rbECB;

private javax.swing.JRadioButton rbOFB;

private javax.swing.JTextArea textAreaCipher;

private javax.swing.JTextArea textAreaPlain;

private javax.swing.JTextField tfBenchmark;

private javax.swing.JTextField tfCipherSize;

private javax.swing.JTextField tfPlainSize;

private javax.swing.JPasswordField txtPassword;

// End of variables declaration//GEN-END:variables

public void setAuthPlainText(boolean value){

textAreaPlain.setEnabled(value);

if(value==false){

btnNewPlainText.setEnabled(true);

btnSavePlainText.setEnabled(false);

btnOpenPlainText.setEnabled(true);

btnEncryptPlainText.setEnabled(false);

}

else{

btnSavePlainText.setEnabled(true);

btnEncryptPlainText.setEnabled(true);

}

}

}

Page 80: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

69

5. Lampiran 5 : Form Dekripsi (BlowfishDec.java)

/*

* BlowfishEnc.java

* @ Prasetyo Bawono

* @ [email protected]

* nb: Semua konstruktor swing tidak disertakan.

* Full Source: http://ono.web.id/fugu

* Created on Apr 15, 2009, 8:30:05 AM

*/

package fugu.mode;

import fugu.FuguApp;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Toolkit;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileWriter;

import java.io.InputStreamReader;

import java.security.Security;

import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;

import javax.swing.JFileChooser;

import javax.swing.JOptionPane;

import javax.swing.filechooser.FileNameExtensionFilter;

import org.jdesktop.application.Application;

import org.jdesktop.application.ResourceMap;

/**

*

* @author prasetyo bawono

*/

public class BlowfishDec extends javax.swing.JDialog {

/** Creates new form Encryption */

public BlowfishDec(java.awt.Frame parent, boolean modal){

super(parent, modal);

initComponents();

Dimension screenSize =

Toolkit.getDefaultToolkit().getScreenSize();

Dimension frameSize = this.getSize();

Page 81: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

70

if (frameSize.height > screenSize.height){

frameSize.height = screenSize.height;

}

if (frameSize.width > screenSize.width) {

frameSize.width = screenSize.width;

}

this.setLocation((screenSize.width - frameSize.width) / 2,

(screenSize.height - frameSize.height) / 2);

this.setTitle("Decryption Mode");

// Define Clickable

textAreaPlain.setEnabled(false);

ResourceMap resourceMap =

Application.getInstance(fugu.FuguApp.class).getContext().getResourceMap(B

lowfishEnc.class);

textAreaPlain.setBackground(resourceMap.getColor("textAreaCipher.backgrou

nd"));

txtPassword.setEnabled(false);

btnResetPrivKey.setEnabled(false);

btnResetCipherText.setEnabled(false);

btnSaveCipherText.setEnabled(false);

btnOpenCipherText.setEnabled(true);

btnDecryptPlainText.setEnabled(false);

btnSavePlainText.setEnabled(false);

btnOpenCipherText.requestFocus();

}

private void

btnResetCipherTextActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

if (evt.getSource() == this.btnResetCipherText)

this.textAreaCipher.setText("");

this.textAreaPlain.setText("");

this.txtPassword.setText("");

btnResetCipherText.setEnabled(false);

btnSaveCipherText.setEnabled(false);

btnOpenCipherText.setEnabled(true);

btnDecryptPlainText.setEnabled(false);

txtPassword.setEnabled(false);

btnResetPrivKey.setEnabled(false);

btnSavePlainText.setEnabled(false);

textAreaPlain.setEnabled(false);

Page 82: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

71

}

private void

btnSaveCipherTextActionPerformed(java.awt.event.ActionEvent evt) {//GEN-

FIRST:event_btnSaveCipherTextActionPerformed

// TODO add your handling code here:

if (evt.getSource() == this.btnSaveCipherText){

JFileChooser saveCipherText = new JFileChooser();

FileNameExtensionFilter filter = new

FileNameExtensionFilter(".cip CipherText File", "cip", "CIP");

saveCipherText.setFileFilter(filter);

saveCipherText.setDialogTitle("Save as CipherText");

int option = saveCipherText.showSaveDialog(this);

// Jika OK

if (option == JFileChooser.APPROVE_OPTION){

try {

// Buat buffered writer untuk menulis

BufferedWriter out = new BufferedWriter(new

FileWriter(saveCipherText.getSelectedFile().getPath()));

out.write(this.textAreaCipher.getText());

out.close();

} catch (Exception ex) {

System.out.println(ex.getMessage());

}

JOptionPane.showMessageDialog(null, "Sukses Menyimpan

File "+saveCipherText.getSelectedFile().getName()+"\nLokasi File:

"+saveCipherText.getSelectedFile(),"CipherText Saved!",

JOptionPane.INFORMATION_MESSAGE);

} else

JOptionPane.showMessageDialog(null, "Something

Happened?", "Gagal Menyimpan File", JOptionPane.ERROR_MESSAGE);

}

}//GEN-LAST:event_btnSaveCipherTextActionPerformed

private void

menuNotepadQuitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-

FIRST:event_menuNotepadQuitActionPerformed

// TODO add your handling code here:

FuguApp.getApplication().ShowMainMenu();

FuguApp.getInstanceMainMenu().setAuthentication(true);

this.dispose();

}//GEN-LAST:event_menuNotepadQuitActionPerformed

private void

btnOpenCipherTextActionPerformed(java.awt.event.ActionEvent evt) {//GEN-

FIRST:event_btnOpenCipherTextActionPerformed

Page 83: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

72

// TODO add your handling code here:

JFileChooser openCipherText = new JFileChooser();

openCipherText.setFileSelectionMode(JFileChooser.FILES_ONLY);

openCipherText.setDialogTitle("Open CipherText File");

FileNameExtensionFilter filterFile = new

FileNameExtensionFilter("CipherText File (*.cip)", "cip", "CIP");

openCipherText.setFileFilter(filterFile);

try {

if(openCipherText.showOpenDialog(this)==JFileChooser.APPROVE_OPTION){

File selectedFile =

openCipherText.getSelectedFile();

if (selectedFile.canRead() && selectedFile.exists())

{

FileInputStream fis = new

FileInputStream(selectedFile);

InputStreamReader in= new InputStreamReader(fis);

char[] buffer = new char[4194304];

int n = in.read(buffer);

String CipherText = new String(buffer,0,n);

textAreaCipher.setText(CipherText);

long sizeCipher = selectedFile.length();

String s = String.valueOf(sizeCipher);

tfCipherSize.setText(s);

in.close();

}

}

} catch (Exception e) {

e.printStackTrace();

}

txtPassword.setEnabled(true);

btnResetPrivKey.setEnabled(true);

btnSaveCipherText.setEnabled(true);

btnOpenCipherText.setEnabled(false);

btnResetCipherText.setEnabled(true);

btnDecryptPlainText.setEnabled(true);

}//GEN-LAST:event_btnOpenCipherTextActionPerformed

private void

btnResetPrivKeyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-

FIRST:event_btnResetPrivKeyActionPerformed

// TODO add your handling code here:

if (evt.getSource() == this.btnResetPrivKey)

Page 84: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

73

this.txtPassword.setText("");

}//GEN-LAST:event_btnResetPrivKeyActionPerformed

private void

btnDecryptPlainTextActionPerformed(java.awt.event.ActionEvent evt)

{//GEN-FIRST:event_btnDecryptPlainTextActionPerformed

// Decrypt:

// ========

// Cipher(String) -> Cipher(String->Byte Array[]) -> Plain(Byte

Array[]->String) -> Plain(String)

if(evt.getSource()==this.btnDecryptPlainText){

if (txtPassword!=null){

Security.addProvider(new

org.bouncycastle.jce.provider.BouncyCastleProvider());

String textCipherStr = textAreaCipher.getText();

char[] textPassword = txtPassword.getPassword();

byte[] textCipherByte = textCipherStr.getBytes();

byte[] textPasswordByte = (new

String(textPassword)).getBytes();

textAreaPlain.setBackground(Color.WHITE);

textAreaPlain.setEnabled(true);

btnSavePlainText.setEnabled(true);

// ECB MODE

if (rbECB.isSelected()) {

try {

// Start Counting

long ecbStart;

long ecbEnd;

long ecbTime;

ecbStart = System.currentTimeMillis();

// Define Algorithm & its Mode

SecretKeySpec key = new

SecretKeySpec(textPasswordByte, "Blowfish");

Cipher cipher =

Cipher.getInstance("Blowfish/ECB/PKCS7Padding","BC");

// Decryption

cipher.init(Cipher.DECRYPT_MODE, key);

byte[] plainText =

cipher.doFinal(textCipherByte);

Page 85: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

74

int ptLength = cipher.update(textCipherByte, 0,

textCipherByte.length, plainText, 0);

ptLength += cipher.doFinal(plainText, ptLength);

String plain = new String(plainText);

textAreaPlain.setText(plain);

String ptLengthStr = Integer.toString(ptLength);

tfPlainSize.setText(ptLengthStr);

// Benchmark for performance

ecbEnd = System.currentTimeMillis(); //

Encryption processing time (ms)

ecbTime = (ecbEnd - ecbStart);

String b = String.valueOf(ecbTime);

tfTimeDec.setText(b);

}

catch (Exception e) {

System.out.println(e);

}

}

// CBC MODE

if (rbCBC.isSelected()) {

try {

// Start Counting

long cbcStart;

long cbcEnd;

long cbcTime;

cbcStart = System.currentTimeMillis();

// Inisialitazion Vector

byte[] ivBytes = new byte[]{

0x07, 0x06, 0x05, 0x04, 0x03,

0x02, 0x01, 0x00

};

// Define Algorithm and Mode

SecretKeySpec key = new

SecretKeySpec(textPasswordByte, "Blowfish");

IvParameterSpec ivSpec = new

IvParameterSpec(ivBytes);

Cipher cipher =

Cipher.getInstance("Blowfish/CBC/PKCS5Padding","BC");

// Decryption

cipher.init(Cipher.DECRYPT_MODE, key, ivSpec);

byte[] plainText =

cipher.doFinal(textCipherByte);

Page 86: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

75

int ptLength = cipher.update(textCipherByte, 0,

textCipherByte.length, plainText, 0);

ptLength += cipher.doFinal(plainText, ptLength);

String plain = new String(plainText);

textAreaPlain.setText(plain);

String ptLengthStr = Integer.toString(ptLength);

tfPlainSize.setText(ptLengthStr);

// Benchmark for performance

cbcEnd = System.currentTimeMillis(); //

Encryption processing time (ms)

cbcTime = (cbcEnd - cbcStart);

String b = String.valueOf(cbcTime);

tfTimeDec.setText(b);

}

catch (Exception e) {

System.out.println(e);

}

}

// OFB MODE

if (rbOFB.isSelected()) {

try {

// Start Counting

long ofbStart;

long ofbEnd;

long ofbTime;

ofbStart = System.currentTimeMillis();

// Inisialitazion Vector

byte[] ivBytes = new byte[]{

0x07, 0x06, 0x05, 0x04, 0x03,

0x02, 0x01, 0x00

};

// Define Algorithm and Mode

SecretKeySpec key = new

SecretKeySpec(textPasswordByte, "Blowfish");

IvParameterSpec ivSpec = new

IvParameterSpec(ivBytes);

Cipher cipher =

Cipher.getInstance("Blowfish/OFB/NoPadding","BC");

// Decryption

cipher.init(Cipher.DECRYPT_MODE, key, ivSpec);

Page 87: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

76

byte[] plainText =

cipher.doFinal(textCipherByte);

int ptLength = cipher.update(textCipherByte, 0,

textCipherByte.length, plainText, 0);

ptLength += cipher.doFinal(plainText, ptLength);

String plain = new String(plainText);

textAreaPlain.setText(plain);

String ptLengthStr = Integer.toString(ptLength);

tfPlainSize.setText(ptLengthStr);

// Benchmark for performance

ofbEnd = System.currentTimeMillis(); //

Encryption processing time (ms)

ofbTime = (ofbEnd - ofbStart);

String b = String.valueOf(ofbTime);

tfTimeDec.setText(b);

}

catch (Exception e) {

System.out.println(e);

}

}

// CFB MODE

if (rbCFB.isSelected()) {

try {

// Start Counting

long cfbStart;

long cfbEnd;

long cfbTime;

cfbStart = System.currentTimeMillis();

// Inisialitazion Vector

byte[] ivBytes = new byte[]{

0x07, 0x06, 0x05, 0x04, 0x03,

0x02, 0x01, 0x00

};

// Define Algorithm and Mode

SecretKeySpec key = new

SecretKeySpec(textPasswordByte, "Blowfish");

IvParameterSpec ivSpec = new

IvParameterSpec(ivBytes);

Cipher cipher =

Cipher.getInstance("Blowfish/CFB/NoPadding","BC");

// Decryption

Page 88: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

77

cipher.init(Cipher.DECRYPT_MODE, key, ivSpec);

byte[] plainText =

cipher.doFinal(textCipherByte);

int ptLength = cipher.update(textCipherByte, 0,

textCipherByte.length, plainText, 0);

ptLength += cipher.doFinal(plainText, ptLength);

String plain = new String(plainText);

textAreaPlain.setText(plain);

String ptLengthStr = Integer.toString(ptLength);

tfPlainSize.setText(ptLengthStr);

// Benchmark for performance

cfbEnd = System.currentTimeMillis(); //

Encryption processing time (ms)

cfbTime = (cfbEnd - cfbStart);

String b = String.valueOf(cfbTime);

tfTimeDec.setText(b);

}

catch (Exception e) {

System.err.println(e);

}

}

JOptionPane.showMessageDialog(null, "Dekripsi

Berhasil..", "Decryption Successfully", JOptionPane.INFORMATION_MESSAGE);

}

if(txtPassword.getPassword().length<8){

JOptionPane.showMessageDialog(null, "Private key minimal

8 karakter", "Error", JOptionPane.ERROR_MESSAGE);

}

if (txtPassword.getPassword().length==0) {

JOptionPane.showMessageDialog(null, "Private key tidak

boleh kosong!", "Error Message", JOptionPane.ERROR_MESSAGE);

}

btnResetPrivKey.setEnabled(false);;

txtPassword.setEnabled(false);

}

}//GEN-LAST:event_btnDecryptPlainTextActionPerformed

private void

btnSavePlainTextActionPerformed(java.awt.event.ActionEvent evt) {//GEN-

FIRST:event_btnSavePlainTextActionPerformed

// TODO add your handling code here:

if (evt.getSource() == this.btnSavePlainText){

JFileChooser savePlainText = new JFileChooser();

Page 89: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

78

FileNameExtensionFilter filter = new

FileNameExtensionFilter("Document File (*.txt)", "txt", "TXT");

savePlainText.setFileFilter(filter);

savePlainText.setDialogTitle("Save PlainText to File");

int option = savePlainText.showSaveDialog(this);

// Jika OK

if (option == JFileChooser.APPROVE_OPTION){

try {

// Buat buffered writer untuk menulis

BufferedWriter out = new BufferedWriter(new

FileWriter(savePlainText.getSelectedFile().getPath()));

out.write(this.textAreaPlain.getText());

out.close();

} catch (Exception ex) {

System.out.println(ex.getMessage());

}

JOptionPane.showMessageDialog(null, "Sukses Menyimpan

File "+savePlainText.getSelectedFile().getName()+"\nLokasi File:

"+savePlainText.getSelectedFile(),"PlainText Saved!",

JOptionPane.INFORMATION_MESSAGE);

}

else

JOptionPane.showMessageDialog(null, "Something

Happened?", "Gagal Menyimpan File", JOptionPane.ERROR_MESSAGE);

}

}//GEN-LAST:event_btnSavePlainTextActionPerformed

/**

* @param args the command line arguments

*/

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

BlowfishDec dialog = new BlowfishDec(new

javax.swing.JFrame(), true);

dialog.addWindowListener(new

java.awt.event.WindowAdapter() {

public void windowClosing(java.awt.event.WindowEvent

e) {

System.exit(0);

}

});

dialog.setVisible(true);

}

});

}

// Variables declaration - do not modify//GEN-BEGIN:variables

Page 90: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

79

private javax.swing.JButton btnDecryptPlainText;

private javax.swing.JButton btnOpenCipherText;

private javax.swing.JButton btnResetCipherText;

private javax.swing.JButton btnResetPrivKey;

private javax.swing.JButton btnSaveCipherText;

private javax.swing.JButton btnSavePlainText;

private javax.swing.ButtonGroup buttonGroup1;

private javax.swing.JLabel fugu;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel3;

private javax.swing.JLabel jLabel4;

private javax.swing.JLabel jLabel5;

private javax.swing.JLabel jLabel6;

private javax.swing.JLabel jLabel7;

private javax.swing.JLabel jLabel8;

private javax.swing.JMenuBar jMenuBar1;

private javax.swing.JPanel jPanel1;

private javax.swing.JPanel jPanel2;

private javax.swing.JScrollPane jScrollPane1;

private javax.swing.JScrollPane jScrollPane2;

private javax.swing.JLabel lblEncryption;

private javax.swing.JLabel lblOpenFile;

private javax.swing.JLabel lblPrivKey;

private javax.swing.JLabel lblPrivateKey;

private javax.swing.JLabel lblSaveTo;

private javax.swing.JMenu menuNotepadFile;

private javax.swing.JMenuItem menuNotepadQuit;

private javax.swing.JPanel panelCipherText;

private javax.swing.JPanel panelPlainText;

private javax.swing.JRadioButton rbCBC;

private javax.swing.JRadioButton rbCFB;

private javax.swing.JRadioButton rbECB;

private javax.swing.JRadioButton rbOFB;

private javax.swing.JTextArea textAreaCipher;

private javax.swing.JTextArea textAreaPlain;

private javax.swing.JTextField tfCipherSize;

private javax.swing.JTextField tfPlainSize;

private javax.swing.JTextField tfTimeDec;

private javax.swing.JPasswordField txtPassword;

// End of variables declaration//GEN-END:variables

}

Page 91: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

80

6. Lampiran 6 : Class Koneksi Database (DriverConnection.java)

/**

* Class Koneksi ke Database untuk Login

*

* @ Prasetyo Bawono

* @ [email protected]

* Full Source: http://ono.web.id/fugu

*/

package fugu.dbase;

import java.sql.*;

public class DriverConnection{

private String driverName="com.mysql.jdbc.Driver";

private String jdbcType="jdbc:mysql";

private String host="localhost";

private String dataBaseName="fugu";

private String password="bismillah";

private String userId="nixnux";

private Connection conn;

private boolean isConnect=false;

//Constructor

public DriverConnection(){

}

public void setDataBaseName(String value){

dataBaseName=value;

}

public void setPassword(String value){

password=value;

}

public void setUserId(String value){

userId=value;

}

public void setHostName(String value){

host=value;

}

private void init(){

String currentUrl=jdbcType+"://"+host+"/"+dataBaseName+"?user="+

userId+"&password="+password;

Page 92: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

81

try {

Class.forName(driverName);

conn = DriverManager.getConnection(currentUrl, userId, password);

isConnect=true;

}

catch(ClassNotFoundException cnfe)

{

System.err.println(cnfe);

}

catch(SQLException sqle)

{

conn=null;

isConnect=false;

System.err.println(sqle);

}

}

public boolean isConnected(){

return isConnect;

}

public Connection getConnection(){

if (conn !=null)

return conn;

else //Try again

{

init();

return conn;

}

}

public void close()throws SQLException {

conn.close();

}

}

Page 93: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

82

7. Lampiran 7 : Class Algoritma Blowfish (BlowfishEngine.java)

package org.bouncycastle.crypto.engines;

import org.bouncycastle.crypto.BlockCipher;

import org.bouncycastle.crypto.CipherParameters;

import org.bouncycastle.crypto.DataLengthException;

import org.bouncycastle.crypto.params.KeyParameter;

/**

* Kelas untuk operasi kunci Blowfish.

* Seperti encoding data dan meng-generate kunci

* Semua algoritma yang ada bersumber dari buku Applied Cryptography

*

*/

public final class BlowfishEngine

implements BlockCipher

{

private final static int[]

/** Initial value of the P-Array, Sub Kunci yang dibangkitkan */

KP = {

0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,

0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,

0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,

0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,

0x9216D5D9, 0x8979FB1B

},

/** S-Box, KS0 = SBox1, KS1 = SBox 2, KS2 = SBox3, KS3 = SBox4 */

KS0 = {

0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,

0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,

0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,

0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,

0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,

0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,

0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,

0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,

0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,

0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,

0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,

0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,

0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,

0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,

0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,

0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,

Page 94: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

83

0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,

0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,

0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,

0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,

0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,

0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,

0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,

0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,

0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,

0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,

0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,

0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,

0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,

0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,

0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,

0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,

0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,

0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,

0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,

0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,

0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,

0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,

0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,

0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,

0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,

0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,

0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,

0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,

0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,

0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,

0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,

0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,

0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,

0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,

0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,

0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,

0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,

0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,

0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,

0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,

0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,

0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,

0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,

0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,

0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,

0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,

0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,

0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A

Page 95: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

84

},

KS1 = {

0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,

0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,

0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,

0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,

0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,

0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,

0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,

0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,

0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,

0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,

0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,

0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,

0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,

0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,

0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,

0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,

0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,

0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,

0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,

0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,

0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,

0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,

0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,

0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,

0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,

0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,

0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,

0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,

0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,

0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,

0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,

0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,

0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,

0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,

0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,

0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,

0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,

0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,

0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,

0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,

0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,

0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,

0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,

0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,

0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,

Page 96: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

85

0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,

0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,

0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,

0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,

0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,

0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,

0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,

0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,

0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,

0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,

0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,

0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,

0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,

0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,

0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,

0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,

0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,

0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,

0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7

},

KS2 = {

0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,

0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,

0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,

0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,

0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,

0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,

0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,

0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,

0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,

0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,

0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,

0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,

0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,

0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,

0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,

0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,

0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,

0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,

0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,

0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,

0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,

0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,

0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,

0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,

0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,

0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,

Page 97: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

86

0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,

0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,

0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,

0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,

0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,

0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,

0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,

0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,

0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,

0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,

0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,

0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,

0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,

0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,

0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,

0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,

0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,

0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,

0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,

0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,

0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,

0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,

0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,

0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,

0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,

0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,

0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,

0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,

0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,

0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,

0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,

0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,

0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,

0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,

0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,

0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,

0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,

0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0

},

KS3 = {

0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,

0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,

0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,

0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,

0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,

0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,

0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,

Page 98: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

87

0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,

0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,

0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,

0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,

0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,

0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,

0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,

0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,

0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,

0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,

0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,

0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,

0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,

0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,

0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,

0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,

0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,

0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,

0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,

0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,

0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,

0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,

0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,

0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,

0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,

0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,

0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,

0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,

0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,

0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,

0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,

0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,

0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,

0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,

0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,

0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,

0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,

0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,

0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,

0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,

0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,

0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,

0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,

0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,

0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,

0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,

0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,

0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,

Page 99: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

88

0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,

0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,

0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,

0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,

0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,

0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,

0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,

0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,

0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6

};

//====================================

// Useful constants

//====================================

private static final int ROUNDS = 16;

private static final int BLOCK_SIZE = 8; // bytes = 64 bits

private static final int SBOX_SK = 256;

private static final int P_SZ = ROUNDS+2;

private final int[] S0, S1, S2, S3; // the s-boxes

private final int[] P; // the p-array

private boolean encrypting = false;

private byte[] workingKey = null;

public BlowfishEngine()

{

S0 = new int[SBOX_SK];

S1 = new int[SBOX_SK];

S2 = new int[SBOX_SK];

S3 = new int[SBOX_SK];

P = new int[P_SZ];

}

/**

* initialise a Blowfish cipher.

*

* @param encrypting whether or not we are for encryption.

* @param params the parameters required to set up the cipher.

* @exception IllegalArgumentException if the params argument is

* inappropriate.

*/

public void init(

boolean encrypting,

CipherParameters params)

{

Page 100: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

89

if (params instanceof KeyParameter)

{

this.encrypting = encrypting;

this.workingKey = ((KeyParameter)params).getKey();

setKey(this.workingKey);

return;

}

throw new IllegalArgumentException("invalid parameter passed to

Blowfish init - " + params.getClass().getName());

}

public String getAlgorithmName()

{

return "Blowfish";

}

public final int processBlock(

byte[] in,

int inOff,

byte[] out,

int outOff)

{

if (workingKey == null)

{

throw new IllegalStateException("Blowfish not initialised");

}

if ((inOff + BLOCK_SIZE) > in.length)

{

throw new DataLengthException("input buffer too short");

}

if ((outOff + BLOCK_SIZE) > out.length)

{

throw new DataLengthException("output buffer too short");

}

if (encrypting)

{

encryptBlock(in, inOff, out, outOff);

}

else

{

decryptBlock(in, inOff, out, outOff);

}

Page 101: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

90

return BLOCK_SIZE;

}

public void reset()

{

}

public int getBlockSize()

{

return BLOCK_SIZE;

}

//==================================

// Private Implementation

//==================================

private int F(int x)

{

return (((S0[(x >>> 24)] + S1[(x >>> 16) & 0xff])

^ S2[(x >>> 8) & 0xff]) + S3[x & 0xff]);

}

/**

* apply the encryption cycle to each value pair in the table.

*/

private void processTable(

int xl,

int xr,

int[] table)

{

int size = table.length;

for (int s = 0; s < size; s += 2)

{

xl ^= P[0];

for (int i = 1; i < ROUNDS; i += 2)

{

xr ^= F(xl) ^ P[i];

xl ^= F(xr) ^ P[i + 1];

}

xr ^= P[ROUNDS + 1];

table[s] = xr;

table[s + 1] = xl;

xr = xl; // end of cycle swap

Page 102: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

91

xl = table[s];

}

}

private void setKey(byte[] key)

{

/*

* - comments are from _Applied Crypto_, Schneier, p338

* please be careful comparing the two, AC numbers the

* arrays from 1, the enclosed code from 0.

*

* (1)

* Initialise the S-boxes and the P-array, with a fixed string

* This string contains the hexadecimal digits of pi (3.141...)

*/

System.arraycopy(KS0, 0, S0, 0, SBOX_SK);

System.arraycopy(KS1, 0, S1, 0, SBOX_SK);

System.arraycopy(KS2, 0, S2, 0, SBOX_SK);

System.arraycopy(KS3, 0, S3, 0, SBOX_SK);

System.arraycopy(KP, 0, P, 0, P_SZ);

/*

* (2)

* Now, XOR P[0] with the first 32 bits of the key, XOR P[1] with

the

* second 32-bits of the key, and so on for all bits of the key

* (up to P[17]). Repeatedly cycle through the key bits until

the

* entire P-array has been XOR-ed with the key bits

*/

int keyLength = key.length;

int keyIndex = 0;

for (int i=0; i < P_SZ; i++)

{

// get the 32 bits of the key, in 4 * 8 bit chunks

int data = 0x0000000;

for (int j=0; j < 4; j++)

{

// create a 32 bit block

data = (data << 8) | (key[keyIndex++] & 0xff);

// wrap when we get to the end of the key

if (keyIndex >= keyLength)

{

keyIndex = 0;

}

Page 103: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

92

}

// XOR the newly created 32 bit chunk onto the P-array

P[i] ^= data;

}

/*

* (3)

* Encrypt the all-zero string with the Blowfish algorithm, using

* the subkeys described in (1) and (2)

*

* (4)

* Replace P1 and P2 with the output of step (3)

*

* (5)

* Encrypt the output of step(3) using the Blowfish algorithm,

* with the modified subkeys.

*

* (6)

* Replace P3 and P4 with the output of step (5)

*

* (7)

* Continue the process, replacing all elements of the P-array

* and then all four S-boxes in order, with the output of the

* continuously changing Blowfish algorithm

*/

processTable(0, 0, P);

processTable(P[P_SZ - 2], P[P_SZ - 1], S0);

processTable(S0[SBOX_SK - 2], S0[SBOX_SK - 1], S1);

processTable(S1[SBOX_SK - 2], S1[SBOX_SK - 1], S2);

processTable(S2[SBOX_SK - 2], S2[SBOX_SK - 1], S3);

}

/**

* Encrypt the given input starting at the given offset and place

* the result in the provided buffer starting at the given offset.

* The input will be an exact multiple of our blocksize.

*/

private void encryptBlock(

byte[] src,

int srcIndex,

byte[] dst,

int dstIndex)

{

int xl = BytesTo32bits(src, srcIndex);

int xr = BytesTo32bits(src, srcIndex+4);

xl ^= P[0];

Page 104: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

93

for (int i = 1; i < ROUNDS; i += 2)

{

xr ^= F(xl) ^ P[i];

xl ^= F(xr) ^ P[i + 1];

}

xr ^= P[ROUNDS + 1];

Bits32ToBytes(xr, dst, dstIndex);

Bits32ToBytes(xl, dst, dstIndex + 4);

}

/**

* Decrypt the given input starting at the given offset and place

* the result in the provided buffer starting at the given offset.

* The input will be an exact multiple of our blocksize.

*/

private void decryptBlock(

byte[] src,

int srcIndex,

byte[] dst,

int dstIndex)

{

int xl = BytesTo32bits(src, srcIndex);

int xr = BytesTo32bits(src, srcIndex + 4);

xl ^= P[ROUNDS + 1];

for (int i = ROUNDS; i > 0 ; i -= 2)

{

xr ^= F(xl) ^ P[i];

xl ^= F(xr) ^ P[i - 1];

}

xr ^= P[0];

Bits32ToBytes(xr, dst, dstIndex);

Bits32ToBytes(xl, dst, dstIndex+4);

}

private int BytesTo32bits(byte[] b, int i)

{

return ((b[i] & 0xff) << 24) |

((b[i+1] & 0xff) << 16) |

((b[i+2] & 0xff) << 8) |

((b[i+3] & 0xff));

}

Page 105: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

94

private void Bits32ToBytes(int in, byte[] b, int offset)

{

b[offset + 3] = (byte)in;

b[offset + 2] = (byte)(in >> 8);

b[offset + 1] = (byte)(in >> 16);

b[offset] = (byte)(in >> 24);

}

}

Page 106: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

95

8. Lampiran 8 : Class Mode Enkripsi CBC (CBCBlockCipher.java)

package org.bouncycastle.crypto.modes;

import org.bouncycastle.crypto.BlockCipher;

import org.bouncycastle.crypto.CipherParameters;

import org.bouncycastle.crypto.DataLengthException;

import org.bouncycastle.crypto.params.ParametersWithIV;

import org.bouncycastle.util.Arrays;

/**

* implements Cipher-Block-Chaining (CBC) mode on top of a simple cipher.

*/

public class CBCBlockCipher

implements BlockCipher

{

private byte[] IV;

private byte[] cbcV;

private byte[] cbcNextV;

private int blockSize;

private BlockCipher cipher = null;

private boolean encrypting;

/**

* Basic constructor.

*

* @param cipher the block cipher to be used as the basis of

chaining.

*/

public CBCBlockCipher(

BlockCipher cipher)

{

this.cipher = cipher;

this.blockSize = cipher.getBlockSize();

this.IV = new byte[blockSize];

this.cbcV = new byte[blockSize];

this.cbcNextV = new byte[blockSize];

}

/**

* return the underlying block cipher that we are wrapping.

*

* @return the underlying block cipher that we are wrapping.

*/

Page 107: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

96

public BlockCipher getUnderlyingCipher()

{

return cipher;

}

/**

* Initialise the cipher and, possibly, the initialisation vector

(IV).

* If an IV isn't passed as part of the parameter, the IV will be all

zeros.

*

* @param encrypting if true the cipher is initialised for

* encryption, if false for decryption.

* @param params the key and other data required by the cipher.

* @exception IllegalArgumentException if the params argument is

* inappropriate.

*/

public void init(

boolean encrypting,

CipherParameters params)

throws IllegalArgumentException

{

this.encrypting = encrypting;

if (params instanceof ParametersWithIV)

{

ParametersWithIV ivParam = (ParametersWithIV)params;

byte[] iv = ivParam.getIV();

if (iv.length != blockSize)

{

throw new IllegalArgumentException("initialisation

vector must be the same length as block size");

}

System.arraycopy(iv, 0, IV, 0, iv.length);

reset();

cipher.init(encrypting, ivParam.getParameters());

}

else

{

reset();

cipher.init(encrypting, params);

}

}

Page 108: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

97

/**

* return the algorithm name and mode.

*

* @return the name of the underlying algorithm followed by "/CBC".

*/

public String getAlgorithmName()

{

return cipher.getAlgorithmName() + "/CBC";

}

/**

* return the block size of the underlying cipher.

*

* @return the block size of the underlying cipher.

*/

public int getBlockSize()

{

return cipher.getBlockSize();

}

/**

* Process one block of input from the array in and write it to

* the out array.

*

* @param in the array containing the input data.

* @param inOff offset into the in array the data starts at.

* @param out the array the output data will be copied into.

* @param outOff the offset into the out array the output will start

at.

* @exception DataLengthException if there isn't enough data in in,

or

* space in out.

* @exception IllegalStateException if the cipher isn't initialised.

* @return the number of bytes processed and produced.

*/

public int processBlock(

byte[] in,

int inOff,

byte[] out,

int outOff)

throws DataLengthException, IllegalStateException

{

return (encrypting) ? encryptBlock(in, inOff, out, outOff) :

decryptBlock(in, inOff, out, outOff);

}

/**

Page 109: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

98

* reset the chaining vector back to the IV and reset the underlying

* cipher.

*/

public void reset()

{

System.arraycopy(IV, 0, cbcV, 0, IV.length);

Arrays.fill(cbcNextV, (byte)0);

cipher.reset();

}

/**

* Do the appropriate chaining step for CBC mode encryption.

*

* @param in the array containing the data to be encrypted.

* @param inOff offset into the in array the data starts at.

* @param out the array the encrypted data will be copied into.

* @param outOff the offset into the out array the output will start

at.

* @exception DataLengthException if there isn't enough data in in,

or

* space in out.

* @exception IllegalStateException if the cipher isn't initialised.

* @return the number of bytes processed and produced.

*/

private int encryptBlock(

byte[] in,

int inOff,

byte[] out,

int outOff)

throws DataLengthException, IllegalStateException

{

if ((inOff + blockSize) > in.length)

{

throw new DataLengthException("input buffer too short");

}

/*

* XOR the cbcV and the input,

* then encrypt the cbcV

*/

for (int i = 0; i < blockSize; i++)

{

cbcV[i] ^= in[inOff + i];

}

int length = cipher.processBlock(cbcV, 0, out, outOff);

Page 110: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

99

/*

* copy ciphertext to cbcV

*/

System.arraycopy(out, outOff, cbcV, 0, cbcV.length);

return length;

}

/**

* Do the appropriate chaining step for CBC mode decryption.

*

* @param in the array containing the data to be decrypted.

* @param inOff offset into the in array the data starts at.

* @param out the array the decrypted data will be copied into.

* @param outOff the offset into the out array the output will start

at.

* @exception DataLengthException if there isn't enough data in in,

or

* space in out.

* @exception IllegalStateException if the cipher isn't initialised.

* @return the number of bytes processed and produced.

*/

private int decryptBlock(

byte[] in,

int inOff,

byte[] out,

int outOff)

throws DataLengthException, IllegalStateException

{

if ((inOff + blockSize) > in.length)

{

throw new DataLengthException("input buffer too short");

}

System.arraycopy(in, inOff, cbcNextV, 0, blockSize);

int length = cipher.processBlock(in, inOff, out, outOff);

/*

* XOR the cbcV and the output

*/

for (int i = 0; i < blockSize; i++)

{

out[outOff + i] ^= cbcV[i];

}

/*

* swap the back up buffer into next position

Page 111: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

100

*/

byte[] tmp;

tmp = cbcV;

cbcV = cbcNextV;

cbcNextV = tmp;

return length;

}

}

Page 112: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

101

9. Lampiran 9 : Class Mode Enkripsi CFB (CFBBlockCipher.java)

package org.bouncycastle.crypto.modes;

import org.bouncycastle.crypto.BlockCipher;

import org.bouncycastle.crypto.CipherParameters;

import org.bouncycastle.crypto.DataLengthException;

import org.bouncycastle.crypto.params.ParametersWithIV;

/**

* implements a Cipher-FeedBack (CFB) mode on top of a simple cipher.

*/

public class CFBBlockCipher

implements BlockCipher

{

private byte[] IV;

private byte[] cfbV;

private byte[] cfbOutV;

private int blockSize;

private BlockCipher cipher = null;

private boolean encrypting;

/**

* Basic constructor.

*

* @param cipher the block cipher to be used as the basis of the

* feedback mode.

* @param bitBlockSize the block size in bits (note: a multiple of 8)

*/

public CFBBlockCipher(

BlockCipher cipher,

int bitBlockSize)

{

this.cipher = cipher;

this.blockSize = bitBlockSize / 8;

this.IV = new byte[cipher.getBlockSize()];

this.cfbV = new byte[cipher.getBlockSize()];

this.cfbOutV = new byte[cipher.getBlockSize()];

}

/**

* return the underlying block cipher that we are wrapping.

*

* @return the underlying block cipher that we are wrapping.

Page 113: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

102

*/

public BlockCipher getUnderlyingCipher()

{

return cipher;

}

/**

* Initialise the cipher and, possibly, the initialisation vector

(IV).

* If an IV isn't passed as part of the parameter, the IV will be all

zeros.

* An IV which is too short is handled in FIPS compliant fashion.

*

* @param encrypting if true the cipher is initialised for

* encryption, if false for decryption.

* @param params the key and other data required by the cipher.

* @exception IllegalArgumentException if the params argument is

* inappropriate.

*/

public void init(

boolean encrypting,

CipherParameters params)

throws IllegalArgumentException

{

this.encrypting = encrypting;

if (params instanceof ParametersWithIV)

{

ParametersWithIV ivParam = (ParametersWithIV)params;

byte[] iv = ivParam.getIV();

if (iv.length < IV.length)

{

// prepend the supplied IV with zeros (per FIPS PUB

81)

System.arraycopy(iv, 0, IV, IV.length - iv.length,

iv.length);

for (int i = 0; i < IV.length - iv.length; i++)

{

IV[i] = 0;

}

}

else

{

System.arraycopy(iv, 0, IV, 0, IV.length);

}

reset();

Page 114: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

103

cipher.init(true, ivParam.getParameters());

}

else

{

reset();

cipher.init(true, params);

}

}

/**

* return the algorithm name and mode.

*

* @return the name of the underlying algorithm followed by "/CFB"

* and the block size in bits.

*/

public String getAlgorithmName()

{

return cipher.getAlgorithmName() + "/CFB" + (blockSize * 8);

}

/**

* return the block size we are operating at.

*

* @return the block size we are operating at (in bytes).

*/

public int getBlockSize()

{

return blockSize;

}

/**

* Process one block of input from the array in and write it to

* the out array.

*

* @param in the array containing the input data.

* @param inOff offset into the in array the data starts at.

* @param out the array the output data will be copied into.

* @param outOff the offset into the out array the output will start

at.

* @exception DataLengthException if there isn't enough data in in,

or

* space in out.

* @exception IllegalStateException if the cipher isn't initialised.

* @return the number of bytes processed and produced.

*/

public int processBlock(

Page 115: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

104

byte[] in,

int inOff,

byte[] out,

int outOff)

throws DataLengthException, IllegalStateException

{

return (encrypting) ? encryptBlock(in, inOff, out, outOff) :

decryptBlock(in, inOff, out, outOff);

}

/**

* Do the appropriate processing for CFB mode encryption.

*

* @param in the array containing the data to be encrypted.

* @param inOff offset into the in array the data starts at.

* @param out the array the encrypted data will be copied into.

* @param outOff the offset into the out array the output will start

at.

* @exception DataLengthException if there isn't enough data in in,

or

* space in out.

* @exception IllegalStateException if the cipher isn't initialised.

* @return the number of bytes processed and produced.

*/

public int encryptBlock(

byte[] in,

int inOff,

byte[] out,

int outOff)

throws DataLengthException, IllegalStateException

{

if ((inOff + blockSize) > in.length)

{

throw new DataLengthException("input buffer too short");

}

if ((outOff + blockSize) > out.length)

{

throw new DataLengthException("output buffer too short");

}

cipher.processBlock(cfbV, 0, cfbOutV, 0);

//

// XOR the cfbV with the plaintext producing the ciphertext

//

for (int i = 0; i < blockSize; i++)

{

Page 116: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

105

out[outOff + i] = (byte)(cfbOutV[i] ^ in[inOff + i]);

}

//

// change over the input block.

//

System.arraycopy(cfbV, blockSize, cfbV, 0, cfbV.length -

blockSize);

System.arraycopy(out, outOff, cfbV, cfbV.length - blockSize,

blockSize);

return blockSize;

}

/**

* Do the appropriate processing for CFB mode decryption.

*

* @param in the array containing the data to be decrypted.

* @param inOff offset into the in array the data starts at.

* @param out the array the encrypted data will be copied into.

* @param outOff the offset into the out array the output will start

at.

* @exception DataLengthException if there isn't enough data in in,

or

* space in out.

* @exception IllegalStateException if the cipher isn't initialised.

* @return the number of bytes processed and produced.

*/

public int decryptBlock(

byte[] in,

int inOff,

byte[] out,

int outOff)

throws DataLengthException, IllegalStateException

{

if ((inOff + blockSize) > in.length)

{

throw new DataLengthException("input buffer too short");

}

if ((outOff + blockSize) > out.length)

{

throw new DataLengthException("output buffer too short");

}

cipher.processBlock(cfbV, 0, cfbOutV, 0);

//

Page 117: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

106

// change over the input block.

//

System.arraycopy(cfbV, blockSize, cfbV, 0, cfbV.length -

blockSize);

System.arraycopy(in, inOff, cfbV, cfbV.length - blockSize,

blockSize);

//

// XOR the cfbV with the ciphertext producing the plaintext

//

for (int i = 0; i < blockSize; i++)

{

out[outOff + i] = (byte)(cfbOutV[i] ^ in[inOff + i]);

}

return blockSize;

}

/**

* reset the chaining vector back to the IV and reset the underlying

* cipher.

*/

public void reset()

{

System.arraycopy(IV, 0, cfbV, 0, IV.length);

cipher.reset();

}

}

Page 118: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

107

10. Lampiran 10 : Class Mode Enkripsi OFB (OFBBlockCipher.java)

package org.bouncycastle.crypto.modes;

import org.bouncycastle.crypto.BlockCipher;

import org.bouncycastle.crypto.CipherParameters;

import org.bouncycastle.crypto.DataLengthException;

import org.bouncycastle.crypto.params.ParametersWithIV;

/**

* implements a Output-FeedBack (OFB) mode on top of a simple cipher.

*/

public class OFBBlockCipher

implements BlockCipher

{

private byte[] IV;

private byte[] ofbV;

private byte[] ofbOutV;

private final int blockSize;

private final BlockCipher cipher;

/**

* Basic constructor.

*

* @param cipher the block cipher to be used as the basis of the

* feedback mode.

* @param blockSize the block size in bits (note: a multiple of 8)

*/

public OFBBlockCipher(

BlockCipher cipher,

int blockSize)

{

this.cipher = cipher;

this.blockSize = blockSize / 8;

this.IV = new byte[cipher.getBlockSize()];

this.ofbV = new byte[cipher.getBlockSize()];

this.ofbOutV = new byte[cipher.getBlockSize()];

}

/**

* return the underlying block cipher that we are wrapping.

*

* @return the underlying block cipher that we are wrapping.

*/

Page 119: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

108

public BlockCipher getUnderlyingCipher()

{

return cipher;

}

/**

* Initialise the cipher and, possibly, the initialisation vector

(IV).

* If an IV isn't passed as part of the parameter, the IV will be all

zeros.

* An IV which is too short is handled in FIPS compliant fashion.

*

* @param encrypting if true the cipher is initialised for

* encryption, if false for decryption.

* @param params the key and other data required by the cipher.

* @exception IllegalArgumentException if the params argument is

* inappropriate.

*/

public void init(

boolean encrypting, //ignored by this OFB mode

CipherParameters params)

throws IllegalArgumentException

{

if (params instanceof ParametersWithIV)

{

ParametersWithIV ivParam = (ParametersWithIV)params;

byte[] iv = ivParam.getIV();

if (iv.length < IV.length)

{

// prepend the supplied IV with zeros (per FIPS PUB

81)

System.arraycopy(iv, 0, IV, IV.length - iv.length,

iv.length);

for (int i = 0; i < IV.length - iv.length; i++)

{

IV[i] = 0;

}

}

else

{

System.arraycopy(iv, 0, IV, 0, IV.length);

}

reset();

cipher.init(true, ivParam.getParameters());

}

Page 120: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

109

else

{

reset();

cipher.init(true, params);

}

}

/**

* return the algorithm name and mode.

*

* @return the name of the underlying algorithm followed by "/OFB"

* and the block size in bits

*/

public String getAlgorithmName()

{

return cipher.getAlgorithmName() + "/OFB" + (blockSize * 8);

}

/**

* return the block size we are operating at (in bytes).

*

* @return the block size we are operating at (in bytes).

*/

public int getBlockSize()

{

return blockSize;

}

/**

* Process one block of input from the array in and write it to

* the out array.

*

* @param in the array containing the input data.

* @param inOff offset into the in array the data starts at.

* @param out the array the output data will be copied into.

* @param outOff the offset into the out array the output will start

at.

* @exception DataLengthException if there isn't enough data in in,

or

* space in out.

* @exception IllegalStateException if the cipher isn't initialised.

* @return the number of bytes processed and produced.

*/

public int processBlock(

byte[] in,

int inOff,

Page 121: TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA …/Teknik...Prasetyo Bawono, S.Si Universitas Sebelas Maret ii SKRIPSI TEKNIK PENGAMANAN DATA MENGGUNAKAN ALGORITMA BLOWFISH yang disiapkan

Prasetyo Bawono, S.Si

Universitas Sebelas Maret

110

byte[] out,

int outOff)

throws DataLengthException, IllegalStateException

{

if ((inOff + blockSize) > in.length)

{

throw new DataLengthException("input buffer too short");

}

if ((outOff + blockSize) > out.length)

{

throw new DataLengthException("output buffer too short");

}

cipher.processBlock(ofbV, 0, ofbOutV, 0);

//

// XOR the ofbV with the plaintext producing the cipher text (and

// the next input block).

//

for (int i = 0; i < blockSize; i++)

{

out[outOff + i] = (byte)(ofbOutV[i] ^ in[inOff + i]);

}

//

// change over the input block.

//

System.arraycopy(ofbV, blockSize, ofbV, 0, ofbV.length -

blockSize);

System.arraycopy(ofbOutV, 0, ofbV, ofbV.length - blockSize,

blockSize);

return blockSize;

}

/**

* reset the feedback vector back to the IV and reset the underlying

* cipher.

*/

public void reset()

{

System.arraycopy(IV, 0, ofbV, 0, IV.length);

cipher.reset();

}

}