Anda di halaman 1dari 172

PEMBUATAN APLIKASI ENKRIPSI MENGGUNAKAN

METODE ADVANCE ENCRYPTION STANDARD


DAN RIVEST SHAMIR ADLEMAN
Studi Kasus CV Maharta Mandiri Promo

ZAENAL MUTTAQIN
2040.9100.2553

PROGRAM STUDI TEKNIK INFORMATIKA


FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS ISLAM NEGERI SYARIF HIDAYATULLAH
JAKARTA
2010 M / 1431 H

PEMBUATAN APLIKASI ENKRIPSI MENGGUNAKAN METODE


ADVANCE ENCRYPTION STANDARD DAN RIVEST SHAMIR ADLEMAN
Studi Kasus CV Maharta Mandiri Promo

Skripsi
Diajukan kepada Fakultas Sains dan Teknologi
Untuk memenuhi persyaratan memperoleh
gelar Sarjana Komputer (S.Kom)

Oleh :
ZAENAL MUTTAQIN
2040.9100.2553

Menyetujui,
Pembimbing I

Pembimbing II

Herlino Nanang, MT
NIP. 19731209 200501 1 002

Zulfiandri, MMSI
NIP. 150 368 821

Mengetahui,
Ketua Program Studi Teknik Informatika

Yusuf Durrachman, MIT


NIP. 19710522 200604 1 002

iii

PENGESAHAN UJIAN

Skripsi berjudul PEMBUATAN APLIKASI ENKRIPSI MENGGUNAKAN


METODE ADVANCE ENCRYPTION STANDARD DAN RIVEST SHAMIR
ADLEMAN STUDI KASUS CV MAHARTA MANDIRI PROMO yang ditulis
oleh Zaenal Muttaqin, NIM 204091002553 telah diuji dan dinyatakan lulus dalam
sidang Munaqosyah Fakultas Sains dan Teknologi, Universitas Islam Negeri
Syarif Hidayatullah Jakarta pada tanggal 11 Januari 2010. Skripsi ini telah
diterima sebagai salah satu syarat untuk memperoleh gelar sarjana Strata Satu (S1)
Program Studi Teknik Informatika.

Menyetujui :
Penguji I

Penguji II

Viva Arifin, MMSI


NIP. 19730810 200604 2 001

Victor Amrizal, M.Kom


NIP. 150 411 288

Pembimbing I

Pembimbing II

Zulfiandri, MMSI
NIP. 150 368 821

Herlino Nanang, MT
NIP. 19731209 200501 1 002

Mengetahui:
Dekan
Fakultas Sains dan Teknologi

Ketua Program Studi


Teknik Informatika

DR. Syopiansyah Jaya Putra, M.Sis


NIP. 19680117 200112 1 001

Yusuf Durrachman, MIT


NIP. 19710522 200604 1 002

iv

PERNYATAAN

DENGAN INI SAYA MENYATAKAN BAHWA SKRIPSI INI BENARBENAR HASIL KARYA SENDIRI YANG BELUM PERNAH DIAJUKAN
SEBAGAI SKRIPSI ATAU KARYA ILMIAH PADA PERGURUAN TINGGI
ATAU LEMBAGA MANAPUN.

Jakarta, Januari 2010

Zaenal Muttaqin
2040 9100 2553

ABSTRAK

ZAENAL MUTTAQIN, Pembuatan Aplikasi Enkripsi Menggunakan Metode


Advance Encryption Standard Dan Rivest Shamir Adleman Studi Kasus CV
Maharta Mandiri Promo. (di bawah bimbingan Herlino Nanang dan Zulfiandri).

Perkembangan dunia teknologi informasi saat ini telah menjadikan


informasi sebagai kebutuhan yang pokok bagi setiap orang terutama bagi sebuah
instansi. Salah satu solusi pengamanan informasi yang digunakan adalah teknik
pengamanan data menggunakan kriptografi. Kriptografi adalah ilmu untuk
menyandikan pesan, sedangkan untuk menjaga agar pesan atau dokumen kita
aman dan tidak dapat dibaca oleh pihak yang tidak berhak, digunakan enkripsi.
CV Maharta Mandiri Promo sebagai sebuah perusahaan desain grafis dan
percetakan memiliki keinginan untuk melindungi data-data penting mereka dari
pihak yang tidak berhak. Aplikasi acrypt cs merupakan aplikasi enkripsi yang
menggabungkan metode enkripsi simetris dan metode enkripsi asimetris. Pada
aplikasi ini metode yang digunakan adalah metode enkripsi simetris Advance
Encryption Standard dan asimetris Rivest Shamir Adleman. Aplikasi ini dapat
dijadikan sebagai salah satu cara untuk mengamankan data. Pembuatan aplikasi
ini menggunakan bahasa pemrograman PHP dan MySQL. Untuk pengembangan
aplikasi penulis menggunakan metode Rapid Application Development (RAD).
Hasil akhir berupa aplikasi multifile berbasis client server, tanpa ada proses
instalasi, dan dapat dilakukan pada mutifile secara bersamaan (multifile dibatasi
sebanyak 10 file).

Kata kunci : kriptografi, enkripsi, Advance Encryption Standard, Rivest Shamir


Adleman, Enkripsi simetri/asimetri.
xvii halaman + 113 halaman + 4 tabel + 51 gambar + 3 lampiran
Daftar Pustaka : 15 (1999-2008)

vi

KATA PENGANTAR

Assalaamualaikum Wr. Wb.


Alhamdulillah, rasa syukur tiada terkira penulis panjatkan kepada Allah
Subhanahu Wataala. Rahmat dan salam semoga tercurahkan selalu kepada
Rasulullah Muhammad SAW beserta keluarga, sahabat, dan pengikut-pengikut
beliau (amin). Hanya berkat petunjuk dan pertolongan Allah-lah penulis dapat
menyelesaikan

skripsi

yang

berjudul

Pembuatan

Aplikasi

Enkripsi

Menggunakan Metode Advance Encryption Standard dan Rivest Shamir Adleman


Studi Kasus CV Maharta Mandiri Promo.
Terwujudnya tulisan dalam bentuk skripsi ini, tentunya tidak terlepas dari
bantuan dan bimbingan dari berbagai pihak. Rasa terima kasih penulis ucapkan
kepada :
1.

Bapak DR. Syopiansyah Jaya Putra, M.SIS, selaku Dekan Fakultas Sains
dan Teknologi.

2.

Bapak Yusuf Durrachman, selaku Ketua Program Studi Teknik Informatika.

3.

Bapak Herlino Nanang, MT, selaku dosen pembimbing I, dan

4.

Bapak Zulfriandri, MMSI, selaku dosen pembimbing II, yang telah


memberikan bimbingan, waktu, dan perhatiannya dalam penyusunan skripsi
ini.

vii

5.

Seluruh Dosen dan staf karyawan Program Studi Teknik Informatika,


Fakultas Sains dan Teknologi, Universitas Islam Negeri Syarif Hidayatullah
Jakarta yang telah mengajar atau membantu penulis selama kuliah.

Dalam penyusunan skripsi ini, penulis juga tidak luput dari berbagai
masalah dan menyadari sepenuhnya bahwa penulisan ini masih jauh dari
sempurna dan tidak lepas dari kesalahan dan kekurangan, oleh karena itu dengan
senang hati penulis akan menerima semua saran dan kritik maupun ide-ide yang
membangun dari rekan-rekan pembaca. Akhir kata semoga Allah membalas
kebaikan mereka yang telah membimbing penulis dalam membuat skripsi ini.
Semoga skripsi ini berguna bagi penulis dan pada pembaca umumnya.
Wassalaamualaikum Wr. Wb.

Jakarta, Januari 2010


Penulis

Zaenal Muttaqin
NIM. 2040 9100 2553

viii

Sebuah tulisan sederhana ini kupersembahkan


untuk:
Emak dan Babe

kesabaran dan kerja keras telah kalian

lakukan demi membesarkan ananda.. ananda tahu.. seberapa besarpun


hal yang dapat ananda berikan untuk emak dan babe, belumlah cukup
untuk membalas semua perjuangan emak dan babe..
Setiap peluh yang menetes di dahimu.. setiap langkah kakimu.. setiap
perjuanganmu untuk membuat ananda berdiri tegak sampai sekarang..
akan ananda ingat semua itu sampai akhir hayat ananda..
Ya Allah.. berikanlah hamba kesempatan untuk membahagiakan emak
dan babe..
ix

Terimakasih yang Spesial untuk :


Kakak-kakakku tercinta : k juki, k ita, k mun, k, maskur, k
rahman, te nunung, k sugi, k yanto, k adi,
Dan sangat spesial untuk kak may..
(mari kita berjuang untuk hidup yang lebih baik..)
Juga untuk adik-adikku tersayang : herma, edi, doel, n dilah
(maaf membuat kalian menunggu lama..)
Dan untuk semua keponakanku : bunga, lulu, firly, lika, qori, rijal,
ridwan, zaskia, moja, n haikal..
(jangan lupa belajar ya sayang..)
Untuk teman-temanku ariyadi, dimas, maxus, sigit, ade,
dawim, nana, nita, yanti, razka, mimah, n danang
(terimakasih untuk berbagi setiap bulan..)
Untuk fajar (makasih bro), farizki (makasih netbooknya), deva,
sundus, rofi, maladi, dadang (makasih ya CV-nya), adin & eko
(makasih untuk switch & kabel LAN-nya),
makasih buat semua anak TI Bhe angkatan 2004..
tanpa kalian aku tak bisa berdiri tegak.. (tetap silah ya..)
makasih juga untuk pak basuni dan pak zam (perpus)
terimakasih untuk keluarga besar TI/SI angkatan 2004 yang telah
berteman dan berbagi semuanya kepada penulis..
dan banyak lagi yang tidak dapat saya tuliskan di sini..
terimakasih semuanya..
dan juga terimakasih untuk :
uin syarif hidayatullah jakarta & cv maharta mandiri promo

DAFTAR ISI

PENGESAHAN UJIAN ........................................................................................ iv


PERNYATAAN...................................................................................................... v
ABSTRAK ............................................................................................................. vi
KATA PENGANTAR .......................................................................................... vii
DAFTAR ISI .......................................................................................................... xi
DAFTAR GAMBAR ............................................................................................ xv
DAFTAR TABEL .............................................................................................. xviii

BAB I

PENDAHULUAN .................................................................................. 1

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


1.2. Rumusan Masalah ................................................................................ 2
1.3. Batasan Masalah................................................................................... 3
1.4. Tujuan Penelitian ................................................................................. 4
1.5. Manfaat Penelitian ............................................................................... 4
1.6. Metodologi Penelitian .......................................................................... 5
1.6.1.

Metodologi Pengumpulan Data ............................................. 5

1.6.2.

Metodologi Pengembangan Sistem........................................ 6

1.7. Sistematika Penulisan........................................................................... 6

BAB II

LANDASAN TEORI ............................................................................. 8

2.1. Keamanan Data .................................................................................... 8


2.2. Aplikasi ................................................................................................ 8
2.3. Enkripsi dan Dekripsi........................................................................... 9
2.4. Kriptografi .......................................................................................... 11
2.4.1.

Definisi dan Terminologi ..................................................... 11

2.4.2.

Tujuan Kriptografi ............................................................... 14

2.4.3.

Sejarah Kriptografi............................................................... 15

2.5. Algoritma Kriptografi Klasik ............................................................. 17


2.5.1.

Cipher Substitusi .................................................................. 17

2.5.2.

Cipher Transposisi ............................................................... 20

xi

2.6. Algoritma Kriptografi Modern........................................................... 20


2.6.1.

Algoritma Simetris ............................................................... 20

2.6.2.

Algoritma Asimetris............................................................. 21

2.6.3.

Algoritma Hibrida ................................................................ 21

2.7. Advance Encryption Standard............................................................ 22


2.7.1.

Panjang Kunci dan Ukuran Blok Rijndael ........................... 23

2.7.2.

Algoritma Rijndael............................................................... 25

2.7.3.

Transformasi SubBytes() ...................................................... 28

2.7.4.

Transformasi ShiftRows()..................................................... 30

2.7.5.

Transformasi MixColumns() ................................................ 30

2.7.6.

Transformasi AddRoundKey().............................................. 32

2.7.7.

Ekspansi Kunci .................................................................... 32

2.8. Kriptografi Kunci Publik.................................................................... 32


2.8.1.

Sejarah Kriptografi Kunci Publik ........................................ 32

2.8.2.

Konsep Kriptografi Kunci Publik ........................................ 33

2.8.3.

Aplikasi Kriptografi Kunci Publik ....................................... 37

2.9. RSA (Rivest Shamir Adleman) .......................................................... 38


2.9.1.

Perumusan Algoritma Rivest Shamir Adleman ................... 39

2.9.2.

Algoritma Membangkitkan Pasangan Kunci ....................... 41

2.9.3.

Algoritma Enkripsi/Dekripsi................................................ 42

2.9.4.

Keamanan Rivest Shamir Adleman ..................................... 42

2.9.5.

Kecepatan ............................................................................. 44

2.10. PHP .................................................................................................... 45


2.10.1. Pengertian PHP .................................................................... 45
2.10.2. Kelebihan-kelebihan PHP .................................................... 45
2.10.3. Sintaks PHP.......................................................................... 46
2.11. MySQL............................................................................................... 46

BAB III METODOLOGI PENELITIAN ........................................................... 48


3.1. Metode Pengumpulan Data ................................................................ 48
3.1.1.

Metode Observasi ................................................................ 48

3.1.2.

Metode Wawancara.............................................................. 49

xii

3.1.3.

Metode Studi Pustaka........................................................... 49

3.1.4.

Metode Studi Literatur ......................................................... 49

3.2. Metode Pengembangan Sistem .......................................................... 50


3.2.1.

Fase Perencanaan Syarat-Syarat .......................................... 50

3.2.2.

Fase Perancangan ................................................................. 53

3.2.3.

Fase Konstruksi.................................................................... 55

3.2.4.

Fase Pelaksanaan.................................................................. 55

BAB IV PEMBAHASAN DAN IMPLEMENTASI .......................................... 57


4.1. Gambaran Umum CV Maharta Mandiri Promo................................. 57
4.1.1.

Sekilas CV Maharta Mandiri Promo.................................... 57

4.1.2.

Visi dan Misi CV Maharta Mandiri Promo ......................... 58

4.1.3.

Struktur Organisasi CV Maharta Mandiri Promo ................ 58

4.2. Hasil Observasi .................................................................................. 59


4.3. Aplikasi Acrypt cs .............................................................................. 59
4.4. Fase Perencanaan Syarat-syarat ......................................................... 60
4.4.1.

Analisis Kebutuhan Masalah ............................................... 60

4.4.2.

Tujuan .................................................................................. 60

4.4.3.

Syarat-syarat......................................................................... 61

4.5. Fase Perancangan (Workshop Design) ............................................... 61


4.5.1.

Perancangan Proses.............................................................. 62

4.5.2.

Perancangan Flowchart........................................................ 64

4.5.3.

Perancangan Basis Data ....................................................... 76

4.5.4.

Perancangan Antarmuka ...................................................... 80

4.5.5.

State Transition Diagram ................................................... 100

4.6. Fase Konstruksi ................................................................................ 106


4.7. Fase Pelaksanaan (Implementasi) .................................................... 107
4.7.1.

Konfigurasi Client Server .................................................. 108

4.7.2.

Proses Enkripsi dan Dekripsi Multifile .............................. 108

4.7.3.

Pengujian Aplikasi Acrypt cs............................................. 109

xiii

BAB V

PENUTUP .......................................................................................... 112

5.1. Kesimpulan ...................................................................................... 112


5.2. Saran................................................................................................. 113

DAFTAR PUSTAKA ......................................................................................... 114


LAMPIRAN A HASIL WAWANCARA ........................................................... 116
LAMPIRAN B TAMPILAN APLIKASI ACRYPT CS..................................... 118
LAMPIRAN C KODE SUMBER APLIKASI ACRYPT CS............................. 131

xiv

DAFTAR GAMBAR

Gambar 2.1. Enkripsi Secara Umum......................................................................11


Gambar 2.2. Sebuah scytale, pesan yang ditulis secara horizontal,
baris perbaris .....................................................................................16
Gambar 2.3. Mesin enkripsi Enigma yang digunakan oleh tentara Jerman
pada masa Perang Dunia ke II ..........................................................17
Gambar 2.4. Caesar Wheel.....................................................................................19
Gambar 2.5. Diagram Proses Enkripsi ...................................................................27
Gambar 2.6. Transformasi SubBytes .....................................................................31
Gambar 2.7. Transformasi ShiftRows....................................................................31
Gambar 2.8. Transformasi MixColumns ...............................................................32
Gambar 2.9. Transformasi AddRoundKey ............................................................33
Gambar 2.10. Skema kriptografi nirsimetri ...........................................................35
Gambar 3.1. Proses enkripsi dan dekripsi ..............................................................54
Gambar 3.2. Ilustrasi metodologi penelitian pengembangan aplikasi
kriptografi berbasis client server (acrypt cs).....................................56
Gambar 4.1. Organisasi CV Maharta Mandiri Promo ...........................................59
Gambar 4.2. Diagram konteks sistem yang diusulkan ...........................................62
Gambar 4.3. Diagram zero sistem yang diusulkan ................................................62
Gambar 4.4. Diagram level satu proses 1.0 (login)................................................63
Gambar 4.5. Diagram level satu proses 2.0 (enkripsi) ...........................................63
Gambar 4.6. Diagram level satu proses 3.0 (dekripsi) ...........................................63
Gambar 4.7. Flowchart proses enkripsi .................................................................65
Gambar 4.8. Flowchart proses enkripsi dengan metode RSA ...............................67

xv

Gambar 4.9. Flowchart proses enkripsi dengan metode RSA ...............................69


Gambar 4.10. Flowchart proses dekripsi ...............................................................71
Gambar 4.11. Flowchart proses dekripsi dengan metode RSA .............................73
Gambar 4.12. Flowchart proses dekripsi dengan metode RSA .............................75
Gambar 4.13. Struktur Entity Relationship Diagram.............................................76
Gambar 4.14. Logical Record Structure (LRS) .....................................................78
Gambar 4.15. Rancangan halaman login ...............................................................81
Gambar 4.16. Rancangan halaman sign up ............................................................82
Gambar 4.17. Rancangan halaman utama ..............................................................83
Gambar 4.18. Rancangan halaman input file enkripsi ...........................................84
Gambar 4.19. Rancangan halaman input file enkripsi ...........................................85
Gambar 4.20. Rancangan halaman cek file............................................................86
Gambar 4.21. Rancangan halaman input password ...............................................87
Gambar 4.22. Rancangan halaman pilih tujuan .....................................................88
Gambar 4.23. Rancangan halaman encryption complete .......................................89
Gambar 4.24. Rancangan halaman pilih file ..........................................................90
Gambar 4.25. Rancangan halaman cek file............................................................91
Gambar 4.26. Rancangan halaman input private key ............................................92
Gambar 4.27. Rancangan halaman decryption complete .......................................93
Gambar 4.28. Rancangan halaman inbox ..............................................................94
Gambar 4.29. Rancangan halaman outbox ............................................................95
Gambar 4.30. Rancangan halaman my key (security question) .............................96
Gambar 4.31. Rancangan halaman my key (private key) ......................................96
Gambar 4.32. Rancangan halaman generate key ...................................................97

xvi

Gambar 4.33. Rancangan halaman change password ............................................98


Gambar 4.34. Rancangan halaman help.................................................................99
Gambar 4.35. Rancangan halaman about.............................................................100
Gambar 4.36. State Transition Diagram Aplikasi Acrypt CS .............................101
Gambar 4.37. Informasi file sebelum dienkripsi..................................................109
Gambar 4.38. Informasi file sesudah dienkripsi ..................................................110
Gambar 4.39. Informasi file sesudah didekripsi ..................................................111

xvii

DAFTAR TABEL

Tabel 2.1. Tiga buah Versi AES ............................................................................24


Tabel 2.2. S-Box ....................................................................................................29
Tabel 4.1. Tabel ukuran dan waktu enkripsi ........................................................110
Tabel 4.2. Tabel ukuran dan waktu dekripsi ........................................................111

xviii

BAB I
PENDAHULUAN

1.1.

Latar Belakang
Pesatnya perkembangan teknologi informasi telah menjadikan
informasi sebagai kebutuhan pokok bagi setiap orang. Informasi juga
merupakan hal yang vital bagi sebuah perusahaan, karena informasi
dapat membantu suatu perusahaan untuk terus berkembang dalam
persaingan global.
Masalah yang terjadi pada proses pengiriman ataupun mendapatkan
informasi adalah apabila informasi itu bersifat rahasia. Bila informasi
tersebut tersebar luas karena adanya penyadapan, pencurian, dan
pemalsuan informasi, akan menyebabkan kerugian bagi pemilik
informasi. Salah satu cara untuk mengamankan data atau informasi dari
tindak kejahatan tersebut adalah menggunakan konsep kriptografi.
CV Maharta Mandiri Promo sebagai sebuah perusahaan desain
grafis dan percetakan, memiliki jaringan komputer untuk memperlancar
arus informasi di dalam perusahaan. Jaringan komputer tersebut memiliki
sebuah server dengan kurang lebih dua puluh client. Semua informasi di
perusahaan ini di-share lewat jaringan komputer tersebut. Namun
ternyata kemudahan tersebut tidak memiliki pengamanan yang baik. Di
perusahaan ini pernah terjadi pencurian informasi yang menyebabkan
kerugian bagi perusahaan tersebut. Sehingga perusahaan membutuhkan

sistem keamanan yang kuat untuk mengamankan data penting mereka,


seperti data proyek, desain grafis, dan data internal perusahaan lainnya.
Pada penelitian yang telah dilakukan (Muliati, 2009), dibuat
aplikasi enkripsi menggunakan metode Blowfish dan Rivest Shamir
Adleman yang dapat mengenkripsi maksimum lima file sekaligus. Oleh
karena itu, beberapa kelebihan akan ditambahkan pada aplikasi yang
akan dibuat diantaranya dapat mengenkripsi sepuluh file sekaligus.
Untuk itu peneliti berupaya mewujudkan implementasi keamanan
data dengan menggunakan metode enkripsi Advance Encryption
Standard dan Rivest Shamir Adleman ke dalam suatu aplikasi yang
mudah digunakan,

dalam skripsi yang

berjudul PEMBUATAN

APLIKASI ENKRIPSI MENGGUNAKAN METODE ADVANCE


ENCRYPTION STANDARD DAN RIVEST SHAMIR ADLEMAN
STUDI KASUS CV MAHARTA MANDIRI PROMO.

1.2.

Rumusan Masalah
Berdasarkan latar belakang, masalah pokok yang akan dibahas
penulis adalah membuat aplikasi enkripsi yang mudah digunakan dan
menjamin kerahasiaan data dengan menggunakan metode Advance
Encryption Standard dan Rivest Shamir Adleman.

1.3.

Batasan Masalah
Untuk menghindari meluasnya materi pembahasan tugas akhir ini,
maka permasalahan dibatasi hanya mencakup hal-hal berikut :
1.

Penelitian dibatasi dengan menggunakan metode enkripsi Advance


Encryption Standard dan Rivest Shamir Adleman.

2.

Pada aplikasi ini proses enkripsi/dekripsi dan pengiriman data


dapat dilakukan pada multifile. Jumlah file dibatasi sebanyak 10
file dengan maksimum ukuran file 1 GB pada sekali proses enkripsi
atau dekripsi untuk kunci yang sama, untuk menghindari proses
enkripsi yang terlalu lama.

3.

Aplikasi hanya mengenkripsi file tunggal (bukan folder) karena


enkripsi folder akan menyebabkan satu serangan terhadapnya akan
berakibat pada semua file yang ada di folder tersebut.

4.

Aplikasi dititikberatkan pada proses pengamanan data dengan


pencegahan pembacaan file oleh pihak-pihak yang tidak berhak.

5.

Hasil akhir file enkripsi akan menghasilkan file terenkripsi (*.znc),


dan password terenkripsi akan disimpan di database.

6.

Aplikasi dibuat menggunakan bahasa pemrograman PHP dan


menggunakan

database

MySQL,

serta

dijalankan

dengan

menggunakan Web Server Apache.


7.

Aplikasi dibuat untuk diimplementasikan pada CV Maharta


Mandiri Promo.

1.4.

Tujuan Penelitian
1.

Dapat mengimplementasikan dua buah metode enkripsi pada


aplikasi pengamanan data berbasis client server yang mudah
digunakan.

2.

Dapat mengamankan data-data penting pada CV Maharta Mandiri


Promo.

1.5.

Manfaat Penelitian
Manfaat yang didapat dalam menulis skripsi ini adalah :
1.

Bagi Penulis
a.

Menerapkan ilmu kriptografi khususnya enkripsi dengan


menggabungkan metode enkripsi simetris (Advance
Encryption Standard) dan metode enkripsi asimetris (Rivest
Shamir Adleman).

b.

Membangun aplikasi enkripsi berbasis client server yang


dapat membantu menjaga data-data penting.

2.

Bagi Pengguna
a.

Memiliki sarana untuk lebih meningkatkan keamanan data


yang dianggap rahasia.

b.

Memudahkan pengamanan data karena menggunakan kunci


publik. Sehingga tidak memerlukan pertukaran kunci privat.

3.

Bagi Universitas
Memberikan sumbangan ilmiah bagi perkembangan teknologi
keamanan data.

1.6.

Metodologi Penelitian
Pada penulisan tugas akhir ini, diperlukan data-data yang lengkap
sebagai bahan pendukung kebenaran materi uraian dan pembahasan.
Oleh karena itu diperlukan metodologi pengumpulan data dan metode
membangun sistem.

1.6.1.

Metodologi Pengumpulan Data


1.

Observasi
Pengamatan

dilakukan

secara

langsung

pada

komputer dan jaringannya di CV Maharta Mandiri Promo.


2.

Wawancara
Wawancara adalah proses memperoleh keterangan
untuk tujuan penelitian dengan cara tanya-jawab sambil
bertatap muka antara pewawancara dengan narasumber.

3.

Studi Pustaka
Membaca dan mempelajari referensi yang ada
sebagai pelengkap serta mencari referensi tambahan dari
internet.

4.

Studi Literatur
Metode studi literatur digunakan dengan melihat
penelitian yang sudah ada. Melalui studi literatur, peneliti
dapat terhindar dari melakukan penelitian yang sudah
pernah dilakukan, dan pengulangan kesalahan-kesalahan
masa lalu.
5

1.6.2.

Metodologi Pengembangan Sistem


Metodologi pengembangan sistem yang digunakan dalam
penelitian ini adalah metode pengembangan model RAD (Rapid
Application Development), model ini dibuat oleh James Martin
untuk membuat sistem yang cepat tanpa harus mengorbankan
kualitas. Dan melingkupi fase-fase sebagai berikut (Kendall &
Kendall, 2003 : 237) :

1)

Fase Perencanaan Syarat-Syarat


Pada tahap ini dilakukan penentuan tujuan dan syaratsyarat informasi.

2)

Fase Perancangan
Pada tahap ini dilakukan perancangan proses yaitu prosesproses yang akan terjadi di dalam sistem, yang terdiri dari
perancangan proses dan perancangan antarmuka pemakai
(user interface).

3)

Fase Konstruksi
Pada fase ini

dilakukan tahap pengkodean terhadap

rancangan-rancangan yang telah didefinisikan.


4)

Fase Pelaksanaan
Pada fase ini dilakukan pengujian terhadap sistem dan
melakukan pengenalan sistem kepada pengguna.

1.7.

Sistematika Penulisan
Dalam penulisan skripsi ini dibagi menjadi beberapa bab, yaitu :
6

BAB I

PENDAHULUAN
Bab ini terdiri dari latar belakang, rumusan masalah, batasan
masalah, tujuan,

manfaat,

metodologi

penelitian,

dan

sistematika penulisan.
BAB II

LANDASAN TEORI
Bab ini berisi uraian tentang landasan teori yang diperlukan
dalam pembuatan aplikasi enkripsi.

BAB III

METODOLOGI PENELITIAN
Bab ini menguraikan secara rinci metodologi yang digunakan
dalam pembuatan sistem aplikasi.

BAB IV

PEMBAHASAN DAN IMPLEMENTASI


Bab ini menguraikan tentang gambaran umum objek penelitian
yaitu CV Maharta Mandiri Promo serta pengembangan sistem
aplikasi enkripsi yang dibuat.

BAB V

PENUTUP
Bab ini berisi kesimpulan akhir dan saran-saran untuk
membangun sistem enkripsi lebih lanjut.

DAFTAR PUSTAKA
LAMPIRAN

BAB II
LANDASAN TEORI

2.1.

Keamanan Data
Keamanan dan kerahasiaan data merupakan sesuatu yang sangat
penting dalam era informasi ini dan telah menjadi kebutuhan dasar
karena perkomputeran secara global telah menjadi tidak aman. Informasi
akan tidak berguna lagi apabila di tengah jalan informasi itu disadap atau
dibajak oleh orang yang tidak berhak. Bahkan mungkin beberapa
pengguna dari sistem itu sendiri, mengubah data yang dimiliki menjadi
sesuatu yang tidak kita inginkan.
Keamanan data pada komputer tidak hanya tergantung pada
teknologi saja, tetapi dari aspek prosedur dan kebijakan keamanan yang
diterapkan serta kedisiplinan sumber daya manusia. Jika firewall dan
perangkat keamanan lainnya bisa dibobol oleh orang yang tidak berhak,
maka peran utama kriptografi untuk mengamankan data atau dokumen
dengan menggunakan teknik enkripsi sehingga data atau dokumen tidak
bisa dibaca (Ariyus, 2006 : 3).

2.2.

Aplikasi
Perangkat lunak (aplikasi) adalah program yang ditulis oleh
pemrogram komputer untuk memecahkan suatu masalah tertentu dengan
menggunakan bahasa pemrograman (Hartono, 1999 : 360).

2.3.

Enkripsi dan Dekripsi


Enkripsi adalah sebuah proses yang melakukan perubahan sebuah
kode dari yang bisa dimengerti menjadi sebuah kode yang tidak bisa
dimengerti (Wahana Komputer, 2003 : 17). Enkripsi dapat diartikan
sebagai kode atau cipher. Sebuah sistem pengkodean menggunakan suatu
table atau kamus yang telah didefinisikan untuk mengganti kata dari
informasi yang dikirim. Sebuah cipher menggunakan suatu algoritma
yang dapat mengkodekan semua aliran data (stream) bit dari sebuah
pesan menjadi cryptogram yang tidak dimengerti (unnitelligible). Karena
teknik cipher merupakan suatu sistem yang telah siap untuk diautomasi,
maka teknik ini digunakan dalam sistem keamanan komputer dan
jaringan.
Enkripsi dimaksudkan untuk melindungi informasi agar tidak
terlihat oleh orang atau pihak yang tidak berhak. Informasi ini dapat
berupa nomor kartu kredit, catatan penting dalam komputer, maupun
password untuk mengakses sesuatu.
Sepanjang sejarah pembentukan kode dan pemecahannya selalu
mendapat perhatian khusus dalam operasi militer. Penggunaan komputer
untuk pertama kalinya dalam kriptografi merupakan usaha untuk
memecahkan kode enigma Nazi sewaktu Perang Dunia II. Kini, pada
zaman modern, adanya komputer memungkinkan kita menghasilkan
kode yang kompleks, dan sebaliknya pula dapat digunakan untuk
memecahkannya.

E-commerce

adalah

industri

lain

yang

sangat

intensif

memanfaatkan kriptografi. Dengan meng-enkrip paket data yang lalu


lalang di internet, walaupun seseorang dapat menangkap paket-paket data
tersebut, tetap saja ia tidak dapat memahami artinya.
Enkripsi juga digunakan untuk verifikasi. Bila anda men-download
software, bagaimana anda tahu bahwa software yang anda download
adalah yang asli, bukan yang telah dipasangkan trojan di dalamnya.
Dalam hal ini terdapat tiga kategori enkripsi, yaitu (Wahana
Komputer, 2003 : 18) :
1.

Kunci enkripsi rahasia. Dalam hal ini, terdapat sebuah kunci yang
digunakan untuk mengenkripsi dan juga sekaligus mendekripsi
informasi.

2.

Kunci enkripsi publik. Dalam hal ini, dua kunci digunakan. Satu
untuk proses enkripsi dan yang lain untuk proses dekripsi.

3.

Fungsi one-way, atau fungsi satu arah adalah sustu fungsi dimana
informasi dienkripsi untuk menciptakan signature dari informasi
asli yang bisa digunakan untuk keperluan autentikasi.
Enkripsi dibentuk berdasarkan suatu

algoritma

yang akan

mengacak suatu informasi menjadi bentuk yang tidak bisa dibaca atau tak
bisa dilihat. Dekripsi adalah proses dengan algoritma yang sama untuk
mengembalikan informasi teracak menjadi bentuk aslinya. Algoritma
yang digunakan harus terdiri dari susunan prosedur yang direncanakan
secara hati-hati yang harus secara efektif menghasilkan sebuah bentuk
ter-enkripsi yang tidak bisa dikembalikan oleh seseorang, bahkan

10

sekalipun mereka

memiliki algoritma

yang

sama. Gambar

2.1

menunjukkan proses enkripsi secara umum.


kunci

Teks
terang

Enkripsi

Teks
tersandi

Gambar 2.1. Enkripsi secara umum


(sumber : http://id.wikipedia.org/wiki/enkripsi)

2.4.

Kriptografi
2.4.1.

Definisi dan Terminologi


Kriptografi (cryptography) berasal dari bahasa Yunani :
cryptos artinya secret(rahasia), sedangkan graphein
artinya writing (tulisan). Jadi, kriptografi berarti secret
writing (tulisan rahasia). Dalam buku-buku 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. Namun saat ini kriptografi lebih dari sekedar
privacy, tetapi juga untuk tujuan data integrity, authentication,
dan non-repudiation (Munir, 2006 : 2).
Beberapa istilah yang penting dalam kriptografi yang
perlu diketahui adalah sebagai berikut (Munir, 2006 : 3):

11

1.

Pesan, Plainteks, dan Cipherteks


Pesan (message) adalah data atau informasi yang dapat
dibaca dan dimengerti maknanya. Nama lain untuk pesan
adalah plainteks (plaintext) atau teks-jelas (cleartext).
Pesan yang disandikan ke bentuk lain disebut cipherteks
(ciphertext) atau kriptogram (cryptogram).

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.

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

4.

Cipher dan Kunci


Algoritma kriptografi disebut juga cipher yaitu aturan
untuk

enciphering

dan

deciphering,

atau

fungsi

matematika yang digunakan untuk enkripsi dan dekripsi.

12

Beberapa cipher memerlukan algoritma yang berbeda


untuk enciphering dan deciphering. Kunci (key) adalah
parameter yang digunakan untuk transformasi enchipering
dan dechipering. Kunci biasanya berupa string atau
deretan bilangan.

5.

Sistem Kriptografi
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.
Di dalam sistem kriptografi, cipher hanyalah salah satu
komponen saja.

6.

Penyadap
Penyadap (eavesdropper) adalah orang yang mencoba
menangkap pesan selama ditransmisikan.

7.

Kriptanalisis dan Kriptologi


Kriptografi

berkembang

sedemikian

rupa

sehingga

melahirkan bidang yang berlawanan yaitu kriptanalisis.


Kriptanalisis (cryptanalisys) adalah ilmu dan seni untuk
memecahkan

cipherteks

menjadi

plainteks

tanpa

mengetahui kunci yang digunakan. Pelakunya disebut


kriptanalis.

Kriptologi

(cryptology)

mengenai kriptografi dan kriptanalisis.

13

adalah

studi

2.4.2.

Tujuan Kriptografi
Kriptografi bertujuan untuk memberi layanan keamanan
sebagai berikut (Munir, 2006 : 9):
1.

Kerahasiaan (confidentiality)
Adalah layanan yang ditujukan untuk menjaga agar pesan
tidak dapat dibaca oleh pihak-pihak yang tidak berhak.

2.

Integritas data (data integrity)


Adalah layanan yang menjamin bahwa pesan masih
asli/utuh

atau

belum

pernah

dimanipulasi

selama

pengiriman.
3.

Otentikasi (authentication)
Adalah layanan yang berhubungan dengan identifikasi,
baik

mengidentifikasi

berkomunikasi

(user

authentication)

maupun

kebenaran

pihak-pihak
atau

authentication
mengidentifikasi

yang
entity

kebenaran

sumber pesan (data origin authentication).


4.

Nirpenyangkalan (non-repudiation)
Adalah

layanan

untuk

mencegah

entitas

yang

berkomunikasi melakukan penyangkalan, yaitu pengirim


pesan menyangkal melakukan pengiriman atau penerima
pesan menyangkal telah menerima pesan.

14

2.4.3.

Sejarah Kriptografi
Sejarah kriptografi sebagian besar merupakan sejarah
kriptografi klasik, yaitu metode enkripsi yang menggunakan
kertas dan pensil atau mungkin dengan bantuan alat mekanik
sederhana.
Sejarah kriptografi klasik mencatat penggunaan cipher
transposisi oleh tentara Sparta di Yunani pada permulaan tahun
400 SM. Mereka menggunakan alat yang namanya scytale
(Gambar 2.1). Sedangkan algoritma substitusi paling awal dan
paling sederhana adalah caesar cipher, yang digunakan oleh raja
Yunani kuno, Julius Caesar. Caranya adalah dengan mengganti
setiap karakter di dalam alfabet dengan karakter yang terletak
pada tiga posisi berikutnya di dalam susunan alphabet (Munir,
2006 : 10).

Gambar 2.2. Sebuah scytale, pesan yang ditulis secara


horizontal, baris perbaris.
(Sumber : http://global.mitsubishielectric.com).

Kriptografi juga digunakan untuk tujuan keamanan.


Kalangan gereja pada masa awal agama kristen menggunakan

15

kriptografi untuk menjaga tulisan relijius dari gangguan otoritas


politik atau budaya yang dominan saat itu.
Pada abad ke-17, sejarah kriptografi mencatat korban
ketika ratu Scotlandia, Queen Mary, dipancung setelah surat
rahasianya dari balik penjara (surat terenkripsi yang isinya
rencana membunuh Ratu Elizabeth I) berhasil dipecahkan oleh
seorang pemecah kode.
Seperti yang telah disebutkan di atas bahwa kriptografi
umum digunakan di kalangan militer. Pada Perang Dunia ke II,
Pemerintah Nazi Jerman membuat mesin enkripsi yang
dinamakan enigma (Gambar 2.2). Mesin yang menggunakan
beberapa buah rotor (roda berputar) ini melakukan enkripsi
dengan cara yang sangat rumit (Munir, 2006 : 11).

Gambar 2.3. Mesin enkripsi Enigma yang digunakan oleh


tentara Jerman pada masa Perang Dunia ke II.
(Sumber : http://www.technology.niagarac.on.ca).

Kriptografi modern dipicu oleh perkembangan peralatan


komputer digital. Dengan komputer digital, cipher yang

16

kompleks menjadi sangat mungkin untuk dapat dihasilkan.


Tidak seperti kriptografi klasik yang mengenkripsi karakter per
karakter, kriptografi modern beroperasi pada string biner.
Cipher yang kompleks seperti DES (Data Encryption Standard)
dan penemuan algoritma RSA adalah algoritma kriptografi
modern yang paling dikenal di dalam sejarah kriptografi
modern. Kriptografi modern tidak hanya berkaitan dengan
teknik menjaga kerahasiaan pesan, tetapi juga melahirkan
konsep seperti tandatangan digital dan sertifikat digital. Dengan
kata lain, kriptografi modern tidak hanya memberikan aspek
keamanan confidentiality, tetapi juga aspek keamanan lain
seperti otentikasi, integritas data, dan nirpenyangkalan (Munir,
2006 : 12).

2.5.

Algoritma Kriptografi Klasik


Rinaldi Munir. Pada dasarnya, algoritma kriptografi klasik dapat
dikelompokkan ke dalam dua macam cipher (Munir, 2006 : 55):

2.5.1.

Cipher Substitusi
Di dalam cipher substitusi setiap unit plainteks diganti
dengan satu unit cipherteks. Satu unit di sini bisa berarti satu
huruf, pasangan huruf, atau kelompok lebih dari dua huruf.
Chiper substitusi dapat dikelompokkan ke dalam empat jenis
(Munir, 2006 : 61):

17

1.

Cipher Alfabet Tunggal (Monoalphabetic cipher), satu


huruf di plainteks diganti dengan tepat satu huruf
cipherteks.

2.

Cipher Alphabetic Majemuk (Polyalphabetic chiper),


merupakan cipher substitusi ganda.

3.

Cipher Substitusi Homofonik (homophonic substitution


cipher), seperti cipher alfabet tunggal tetapi setiap huruf
dalam plainteks dapat dipetakan ke dalam salah satu dari
unit cipherteks yang mungkin.

4.

Cipher

Substitusi

Poligram

cipher), setiap kelompok

(Polygram

substitution

huruf disubstitusi

dengan

kelompok huruf cipherteks.


Algoritma substitusi tertua yang diketahui adalah caesar
cipher yang digunakan oleh kaisar Romawi, Julius Caesar, untuk
menyandikan pesan yang ia kirim kepada para gubernurnya.
Gambar 2.3 memperlihatkan caesar wheel terdiri dari dua
buah lempeng lingkaran besi. Lingkaran besi paling luar
menyatakan huruf-huruf plainteks sedangkan lingkaran besi
terdalam menyatakan huruf-huruf cipherteks.

Gambar 2.4. Caesar Wheel (Sumber : http://mail.colonial.net)

18

2.5.2.

Cipher Transposisi
Pada cipher transposisi, huruf-huruf di dalam plainteks
tetap sama, hanya saja urutannya diubah. Dengan kata lain
algoritma ini melakukan transpose terhadap rangkaian karakter
di dalam teks. Nama lain untuk metode ini adalah permutasi
atau pengacakan (scrambling) karena transpose setiap karakter
di dalam teks sama dengan mempermutasikan karakter-karakter
tersebut. Kriptografi dengan alat scytale yang digunakan oleh
tentara Sparta pada zaman Yunani termasuk ke dalam cipher
transposisi.
Misalkan sebuah plainteks :
DEPARTEMEN TEKNIK INFORMATIKA ITB
Untuk meng-enkripsi pesan, plainteks ditulis secara
horizontal dengan lebar kolom tetap, misal selebar 6 karakter
(kunci k = 6) :
DEPART
EMENTE
KNIKIN
FORMAT
IKAITB
Maka cipherteksnya dibaca secara vertikal menjadi
DEKFIEMNOKPEIRAANKMIRTIATTENTB
Atau dapat juga ditulis dalam kelompok-kelompok yang
terdiri dari 4 huruf :
DEKF IEMN OKPE IRAA NKMI RTIA TTEN TB
Untuk

mendekripsi

pesan,

kita

membagi

panjang

cipherteks dengan kunci. Pada contoh ini, kita membagi 30

19

dengan 6 untuk mendapatkan 5 (jika cipherteks ditulis dalam


kelompok-kelompok huruf, buang semua spasi yang ada
sehingga menjadi string yang panjang). Algoritma dekripsi
identik dengan algoritma enkripsi. Jadi, kita tulis cipherteks
dalam baris-baris selebar 5 karakter menjadi :
DEKFI
EMNOK
PEIRA
ANKMI
RTIAT
TENTB
Dengan membaca setiap kolom kita memperoleh pesan
semula :
DEPARTEMEN TEKNIK INFORMATIKA ITB

2.6.

Algoritma Kriptografi Modern


Kriptografi modern mempunyai kerumitan yang sangat kompleks
karena dioperasikan menggunakan komputer (Ariyus, 2008: 46).
Kriptografi modern merupakan suatu perbaikan yang mengacu pada
kriptografi klasik. Algoritma kriptografi modern terdiri dari dua bagian
(Ariyus, 2008: 108) :
2.6.1.

Algoritma Simetris
Algoritma simetris adalah algoritma yang menggunakan
kunci yang sama untuk enkripsi dan dekripsinya. Keamanan
algoritma simetris tergantung pada kuncinya. Algoritma simetris
sering juga disebut algoritma kunci rahasia, algoritma kunci
tunggal atau algoritma satu kunci. Dua kategori yang termasuk

20

pada algoritma simetris ini adalah algoritma block cipher dan


stream cipher.
Aplikasi dari algoritma simetris diantaranya adalah:

2.6.2.

1.

Data Encryption Standard (DES).

2.

Advanced Encryption Standard (AES).

3.

International Data Encryption Algorithm (IDEA).

4.

A5.

5.

RC4.

Algoritma Asimetris
Algoritma asimetris adalah pasangan kunci kriptografi
yang salah satunya digunakan untuk proses enkripsi dan yang
satu lagi untuk dekripsi. Semua orang yang mendapatkan kunci
publik dapat menggunakannya untuk mengenkripsi suatu pesan,
sedangkan hanya satu orang saja yang memiliki kunci rahasia
itu, yang dapat melakukan pembongkaran terhadap kode yang
dikirim untuknya.
Beberapa algoritma asimetris antara lain:

2.6.3.

1.

RSA (Rivest Shamir Adleman).

2.

Diffie Hellman.

Algoritma Hibrida
Algoritma hibrida adalah algoritma yang memafaatkan
dua tingkatan kunci, yaitu kunci rahasia (simetri) yang disebut
juga session key (kunci sesi) untuk enkripsi data dan pasangan

21

kunci rahasia kunci publik untuk pemberian tandatangan


digital serta melindungi kunci simetri.

2.7.

Advance Encryption Standard


DES (Data Encryption Standard) dianggap sudah tidak aman lagi
karena dengan perangkat keras khusus kuncinya bisa ditemukan dalam
beberapa hari. National Institute of Standards and Technology (NIST),
sebagai agensi Departemen Perdagangan AS mengusulkan kepada
Pemerintah Federal AS untuk sebuah standard kriptografi yang baru.
Untuk menghindari kontroversi mengenai standard yang baru
tersebut, NIST mengadakan sayembara terbuka untuk membuat standard
algoritma kriptografi yang akan diberi nama Advanced Encryption
Standard (AES) (Munir, 2006 : 157).
Persyaratan yang diajukan oleh NIST adalah :
1.

Algoritma yang ditawarkan termasuk ke dalam kelompok algoritma


kriptografi simetri berbasis cipher blok.

2.

Seluruh rancangan algoritma harus publik (tidak dirahasiakan).

3.

Panjang kunci fleksibel : 128, 192, dan 256 bit.

4.

Ukuran blok yang dienkripsi adalah 128 bit.

5.

Algoritma dapat diimplementasikan baik sebagai software maupun


hardware.
Pada bulan Agustus 1998, NIST memilih 5 finalis yang didasarkan

pada aspek keamanan algoritma, kemangkusan (efficiency), fleksibilitas,


dan kebutuhan memori. Finalis tersebut adalah (Munir, 2006 : 157):

22

1.

Rijndael (dari Vincent Rijmen and Joan Daemen Belgia, 86


suara).

2.

Serpent (dari Ross Anderson, Eli Biham, dan Lars Knudsen


Inggris, Israel, dan Norwegia, 59 suara).

3.

Twofish (dari tim yang diketuai oleh Bruce Schneier USA, 31


suara).

4.

RC6 (dari laboratorium RIVEST SHAMIR ADLEMAN USA, 23


suara).

5.

MARS (dari IBM, 13 suara).


Pada bulan Oktober 2000, NIST mengumumkan untuk memilih

Rijndael (dibaca : Rhinedoll), dan pada bulan November 2001, Rijndael


ditetapkan sebagai Advance Encryption Standard, dan diharapkan
Rijndael menjadi standard kriptografi yang dominan paling sedikit
selama sepuluh tahun (Munir, 2006 : 158).

2.7.1.

Panjang Kunci dan Ukuran Blok Rijndael


Rijndael mendukung panjang kunci 128 bit sampai 256 bit
dengan step 32 bit. Panjang kunci dan ukuran blok dapat dipilih
secara independen. Setiap blok dienkripsi dalam sejumlah
putaran tertentu, sebagaimana halnya pada DES.
Karena

Advance

Encryption

Standard

menetapkan

panjang kunci adalah 128, 192, dan 256, maka dikenal Advance
Encryption Standard-128, Advance Encryption Standard-192,
dan Advance Encryption Standard-256. Table 2.1. meresumekan
perbedaan ketiga versi Advance Encryption Standard tersebut.

23

Tabel 2.1. Tiga buah Versi Advance Encryption Standard


(Sumber : Munir, 2006 : 158)
Panjang Kunci
(Nk words)

Ukuran Blok
(Nb words)

Jumlah Putaran
(Nr)

AES-128

10

AES-192

12

AES-256

14

Catatan : 1 word = 32 bit

Secara defacto, hanya ada dua varian AES, yaitu AES-128


dan

AES

256,

karena

akan

sangat

jarang

pengguna

menggunakan kunci yang panjangnya 192 bit. Karena Advance


Encryption Standard mempunyai panjang kunci paling sedikit
128 bit, maka Advance Encryption Standard tahan terhadap
serangan exhaustive key search dengan teknologi saat ini.
Dengan panjang kunci 128-bit, maka terdapat sebanyak
2128 = 3,4 x 1038
kemungkinan kunci. Jika digunakan komputer tercepat
yang dapat mencoba 1 juta kunci setiap detik, maka akan
dibutuhkan waktu 5,4 x 1024 tahun untuk mencoba seluruh
kemungkinan kunci. Jika digunakan komputer tercepat yang
dapat mencoba 1 juta kunci setiap milidetik, maka akan
dibutuhkan waktu 5,4 x 1018 tahun untuk mencoba seluruh
kemungkinan kunci.

24

2.7.2.

Algoritma Rijndael
Rijndael menggunakan substitusi dan permutasi, dan
sejumlah

putaran

(cipher

berulang),

setiap

putaran

menggunakan kunci internal yang berbeda (kunci setiap putaran


disebut round key). Tetapi tidak seperti DES yang berorientasi
bit, Rijndael beroperasi dalam orientasi byte. Selain itu, Rijndael
tidak menggunakan jaringan Feistel seperti DES dan GOST.
Garis besar Algoritma Rijndael yang beroperasi pada blok
128-bit dengan kunci 128-bit adalah sebagai berikut (Munir,
2006 : 159):
1.

AddRoundKey : melakukan XOR antara state awal


(plainteks) dengan cipher key. Tahap ini disebut juga
initial round.

2.

Putaran sebanyak Nr 1 kali. Proses yang dilakukan pada


setiap putaran adalah :
a.

SubBytes : substitusi byte dengan menggunakan


table substitusi (S-box).

b.

ShiftRows : pergeseran baris-baris array state


secara wrapping.

c.

MixColumns : mengacak data di masing-masing


kolom array state.

d.

AddRoundKey : melakukan XOR antara state


sekarang dengan round key.

3.

Final round : proses untuk putaran terakhir :

25

a.

SubBytes

b.

ShiftRows

c.

AddRoundKey

Garis besar algoritma enkripsi Rijndael diperlihatkan pada


gambar 2.5.

Chiper Key

state

initial
round

AddRoundKey

1-SubBytes

2-ShiftRows
Round Key 0

3-MixColumns

9
rounds

4-AddRoundKey

SubBytes
Round Key 10

ShiftRows

AddRoundKey

final
round

Gambar 2.5. Diagram Proses Enkripsi (Sumber : Munir, 2006 : 159)

Algoritma Rijndael mempunyai tiga parameter (Munir,


2006 : 161) :
1.

plaintext : array yang berukuran 16-byte, yang berisi data


masukan.
26

2.

ciphertext : array yang berukuran 16-byte, yang berisi


hasil enkripsi.

3.

key : array yang berukuran 16-byte, yang berisi kunci


ciphering (disebut juga cipher key).
Dengan 16 byte, maka baik blok data dan kunci yang

berukuran 128-bit dapat disimpan di dalam ketiga array tersebut


(128 = 16 x 8). Selama kalkulasi plainteks menjadi cipherteks,
status sekarang dari data disimpan di dalam array of bytes dua
dimensi, state, yang berukuran NROWS x NCOLS. Untuk blok
data 128-bit, ukuran state adalah 4 x 4. Elemen array state diacu
sebagai S[r,c], dengan 0 r < 4 dan 0 c < Nb (Nb adalah
panjang blok dibagi 32. Pada AES-128, Nb = 128/32 = 4).
Pada awal enkripsi, 16-byte data masukan, in0,in1,,in15
disalin ke dalam array state (direalisasikan oleh fungsi
CopyPlaintextToState(state, plaintext)) seperti diilustrasikan
sebagai berikut :
output bytes

in0

input bytes
in4 in8 in12

S0,0

S0,1

S0,1

S0,3

out0

out4

out8

out12

in1

in5

in9

in13

S1,0

S1,1

S1,2

S1,3

out1

out5

out9

out13

in2

in6

in10

in14

S2,0

S2,1

S2,2

S2,3

out2

out6

out10

out14

in3

in7

in11

in15

S3,0

S3,1

S3,2

S3,3

out3

out7

out11

out15

state array

Operasi Enkripsi/dekripsi dilakukan terhadap array S, dan


keluarannya ditampung di dalam array out. Skema penyalinan
array masukan in ke array S adalah sebagai berikut :

27

S[r, c] in[r + 4c] untuk 0 r < 4 dan 0 c < Nb


Skema penyalinan array S ke array keluaran out :
out[r + 4c] S[r, c] untuk 0 r < 4 dan 0 c < Nb
Contoh elemen state dan kunci dalam notasi HEX :
input
state

Cipher key

32

88

31

e0

2b

28

ab

09

43

5a

31

37

7e

ae

f7

cf

f6

30

98

07

15

d2

15

4f

a8

8d

a2

34

16

a6

88

3c

hexadecimal notation:
Ex: 32 = 0011 0010 (1 byte)
3hex 2hex

2.7.3.

Transformasi SubBytes()

Transformasi SubBytes memetakan setiap byte dari


array state dengan menggunakan tabel substitusi S-box.
Tidak seperti DES yang mempunyai S-box berbeda pada
setiap putaran, Advance Encryption Standard hanya
mempunyai satu buah S-box. Tabel S-box yang digunakan
ditunjukkan pada table 2.2 :

28

Tabel 2.2. S-box (Sumber : Munir, 2006 : 163)


hex

y
0

63

7c

77

7b

f2

6b

6f

c5

30

01

67

2b

fe

d7

ab

76

ca

82

c9

7d

fa

59

47

f0

ad

d4

a2

af

9c

a4

72

c0

b7

fd

93

26

36

3f

f7

cc

34

a5

e5

f1

71

d8

31

15

04

c7

23

c3

18

96

05

9a

07

12

80

e2

eb

27

b2

75

09

83

2c

1a

1b

6e

5a

a0

52

3b

d6

b3

29

e3

2f

84

53

d1

00

ed

20

fc

b1

5b

6a

cb

be

39

4a

4c

58

cf

d0

ef

aa

fb

43

4d

33

85

45

f9

02

7f

50

3c

9f

a8

51

a3

40

8f

92

9d

38

f5

bc

b6

da

21

10

ff

f3

d2

cd

0c

13

ec

5f

97

44

17

c4

a7

7e

3d

64

5d

19

73

60

81

4f

dc

22

2a

90

88

46

ee

b8

14

de

5e

0b

db

e0

32

3a

0a

49

06

24

5c

c2

d3

ac

62

91

95

e4

79

e7

c8

37

6d

8d

d5

4e

a9

6c

56

f4

ea

65

7a

ae

08

ba

78

25

2e

1c

a6

b4

c6

e8

dd

74

1f

4b

bd

8b

8a

70

3e

b5

66

48

03

f6

0e

61

35

57

b9

86

c1

1d

9e

e1

f8

98

11

69

d9

8e

94

9b

1e

87

e9

ce

55

28

df

8c

a1

89

0d

bf

e6

42

68

41

99

2d

0f

b0

54

bb

16

Cara pensubstitusian adalah sebagai berikut : untuk setiap


byte pada array state, misalkan S[r,c]=xy, yang dalam hal ini xy
adalah

digit hexadesimal

dari

nilai

S[r,c],

maka

nilai

substitusinya, yang dinyatakan dengan S[r,c], adalah elemen di


dalam S-box yang merupakan perpotongan baris x dengan kolom
y. Gambar 2.5 memperlihatkan transformasi SubBytes().

29

a0,0 a0,1 a0,2 a0,3

b0,0 b0,1 b0,2 b0,3


SubBytes

a1,0 a1,1 a1,2 a1,3

b1,0 b1,1 b1,2 b1,3

a2,0 a2,1 aa2,2


2,2 a 2,3

b2,0 bb2,1
2,2 b2,2 b2,3

a3,0 a3,1 a3,2 a3,3

b3,0 b3,1 b3,2 b3,3

S
Gambar 2.6. Transformasi SubBytes
(Sumber : Munir, 2006 : 163)

2.7.4.

Transformasi ShiftRows()
Transformasi ShiftRows() melakukan pergeseran secara
wrapping (siklik) pada 3 baris terakhir dari array state. Jumlah
pergeseran bergantung pada nilai baris (r). baris r = 1 digeser
sejauh 1 byte, baris r = 0 tidak digeser. Gambar 2.6
memperlihatkan transformasi ShiftRows.

Gambar 2.7. Transformasi ShiftRows


(Sumber : Munir, 2006 : 165)

2.7.5.

Transformasi MixColumns()
Transformasi MixColumns() mengalikan setiap kolom dari
array state dengan polinom a(x) mod (x4 + 1). MixColumns

30

memberikan difusi pada cipher. Setiap kolom diperlakukan


sebagai polinom 4-suku pada GF(28). Polinom a(x) yang
ditetapkan adalah
a(x) = {03}x3 + {01}x2 + {01}x + {02}

(6.5)

Transformasi ini dinyatakan sebagai perkalian matriks :


S(x) = a(x)
S0,c
S1,c
S2,c
S3,c

s(x)

(6.6)

02 03 01 01

S0,c

01 02 03 01

S1,c

01 01 02 03

S2,c

03 01 01 02

S3,c

S0,c = ({02} S0,c) ({03} S1,c) S2,c S3,c


S1,c = S0,c ({02} S1,c) ({03} S2,c) S3,c
S1,c = S0,c S1,c ({02} S2,c) ({03} S2,c)
S1,c = ({03} S0,c) S1,c S2,c ({02} S3,c)
Gambar 2.7 memperlihatkan transformasi MixColumns().

Gambar 2.8. Transformasi MixColumns


(Sumber : Munir, 2006 : 166)

31

2.7.6.

Transformasi AddRoundKey()
Transformasi ini melakukan operasi XOR terhadap sebuah
round key dengan array state, dan hasilnya disimpan di array
state. Gambar 2.8 memperlihatkan transformasi AddRoundKey.

Gambar 2.9. Transformasi AddRoundKey


(Sumber : Munir, 2006 : 167)

2.7.7. Ekspansi Kunci


Algoritma Rijndael mengambil cipher key, K, yang
diberikan

oleh

pengguna,

dan

memanggil

fungsi

KeyExpansion() untuk membangkitkan sejumlah round key


(banyaknya round key bergantung pada jumlah putaran).

2.8.

Kriptografi Kunci Publik


2.8.1.

Sejarah Kriptografi Kunci Publik


Sistem kriptografi nirsimetri dipublikasikan pertama kali
pada tahun 1976 oleh Whitfield Diffie dan Martin Hellman, dua

32

orang ilmuwan dari Stanford University melalui makalah


berjudul New Directions in Cryptography. Makalah mereka
membahas distribusi kunci rahasia pada saluran komunikasi
publik (yang tidak aman) dengan metode pertukaran kunci yang
belakangan dikenal dengan nama algoritma pertukaran kunci
Diffie-Hellman.
Pada tahun 1977, generalisasi dari ide Cocks ditemukan
kembali oleh tiga orang ilmuwan dari MIT, yaitu Rivest, Shamir,
dan Adleman. Algoritma enkripsi yang mereka buat dikenal
dengan nama Rivest Shamir Adleman.
Akhirnya sejak tahun 1976 berbagai algoritma enkripsi,
tanda tangan digital, pertukaran kunci, dan teknik

lain

dikembangkan dalam bidang kriptografi kunci publik, misalnya


algoritma ElGamal untuk enkripsi dan tanda tangan digital dan
algoritma DSA untuk tanda tangan digital. Pada tahun 1980
Neal

Koblitz

memperkenalkan

elliptic-curve-cryptography

sebagai keluarga baru yang analog dengan algoritma kriptografi


kunci publik (Munir, 2006 : 177).

2.8.2.

Konsep Kriptografi Kunci Publik


Pada kriptografi kunci publik, setiap pengguna memiliki
sepasang kunci, satu kunci untuk enkripsi, dan satu kunci untuk
dekripsi (Gambar 2.9). Kunci untuk enkripsi diumumkan kepada
publik (oleh karena itu tidak rahasia) sehingga dinamakan kunci
publik (public key), disimbolkan dengan e. Kunci untuk

33

dekripsi bersifat rahasia sehingga dinamakan kunci pribadi


(private key), disimbolkan dengan d. Karena kunci enkripsi
kunci dekripsi itulah kriptografi kunci publik disebut juga
kriptografi nirsimetri (Munir, 2006 : 172).

Kunci Privat, d

Kunci Publik, e

Cipherteks, c
Plainteks, m

Enkripsi
Ee (m) = c

Dekripsi
Dd (c) = m

Plainteks, m

Gambar 2.10. Skema kriptografi nirsimetri


(Sumber : Munir, 2006 : 172)

Misalkan E adalah fungsi enkripsi dan D adalah fungsi


dekripsi. Misalkan (e, d) adalah pasangan kunci untuk enkripsi
dan dekripsi sedemikian, sehingga
Ee (m) = c dan Dd (c) = m
untuk suatu plainteks m dan cipherteks c. kedua persamaaan ini
menyiratkan bahwa dengan mengetahui e dan c, maka secara
komputasi hampir tidak mungkin menemukan m. asumsi
lainnya, dengan mengetahui e, secara komputasi hampir tidak
mungkin menurunkan d. Ee digambarkan sebagai fungsi pintu
kolong (trapdoor) satu arah dengan d adalah informasi trapdoor
yang diperlukan untuk menghitung fungsi inversinya, D, yang
dalam hal ini membuat proses dekripsi dapat dilakukan.

34

Dengan sistem kriptografi kunci publik ini dua orang yang


berkomunikasi tidak perlu berbagi kunci yang sama. Keduanya
memiliki sepasang kunci, kunci publik dan kunci privat. Sistem
kriptografi kunci publik yang aman memiliki dua karakteristik
sebagai berikut (Munir, 2006 : 174):
1.

Komputasi untuk enkripsi/dekripsi mudah dilakukan.

2.

Secara komputasi hampir tidak mungkin (infeasible)


menurunkan kunci privat, d, bila diketahui kunci publik, e,
pasangannya.
Kedua karakteristik di atas dapat dianalogikan dengan dua

masalah matematika berikut :


a.

Perkalian vs pemfaktoran. Mengalikan dua buah bilangan


prima, a x b = n, mudah, tetapi memfaktorkan n menjadi
faktor-faktor primanya lebih sulit.
Contoh :

b.

Pemangkatan

31 x 47 = 1457

(perkalian, mudah)

1457 = ? x ?

(pemfaktoran, sulit)

vs

logaritma

diskrit.

Melakukan

perpangkatan modulo, b = ax mod n, mudah, tetapi


menemukan x dari ax b (mod n) lebih sulit.
Contoh :
126 mod 1125 = 234

(perpangkatan modulo, mudah)

x dari 12x 234 (mod 1125)

35

(logaritmik diskrit, sulit)

Dua masalah matematika di atas sering dijadikan dasar


pembangkitan sepasang kunci pada kriptografi kunci publik,
yaitu (Munir, 2006 : 175):
1.

Pemfaktoran
Diberikan bilangan bulat n. Faktorkan n menjadi faktor
primanya. Contoh :
60 = 2 x 2 x 3 x 5
252601 = 41 x 61 x 101
213 1 = 3391 x 23279 x 65993 x 1868569 x
1066818132868207
Semakin besar n, semakin sulit memfaktorkan (butuh
waktu sangat lama). Algoritma yang menggunakan prinsip
ini : Rivest Shamir Adleman.

2.

Logaritma Diskrit
Temukan x sedemikian ax b (mod n) sulit dihitung.
Contoh : jika 3x 15 (mod 17) maka x = 6.
Semakin besar a, b, dan n semakin sulit memfaktorkan
(butuh waktu yang lama).
Algoritma yang menggunakan prinsip ini : ElGamal dan
DSA.
Catatan : Persoalan logaritma diskrit adalah kebalikan dari
persoalan perpangkatan modular : ax mod n

Sistem kriptografi kunci publik cocok digunakan di dalam


kelompok

pengguna

di

36

lingkungan

jaringan

komputer

(LAN/WAN)

yang

memungkinkan

mereka

saling

berkomunikasi. Setiap pengguna jaringan memiliki pasangan


kunci publik dan kunci privat yang bersesuaian. Kunci publik,
karena tidak rahasia, biasanya disimpan di dalam basisdata
kunci yang dapat diakses oleh pengguna lain. Jika ada pengguna
yang hendak berkirim pesan ke pengguna lainnya, maka ia perlu
mengetahui kunci publik penerima pesan melalui basisdata
kunci ini lalu menggunakannya untuk mengenkripsi pesan.
Hanya penerima pesan yang dapat mendekripsi pesan karena ia
yang mengetahui kunci privatnya sendiri.
Dengan sistem kriptografi kunci publik, tidak diperlukan
pengiriman kunci privat melalui saluran komunikasi khusus
sebagaimana pada sistem kriptografi simetri (Munir, 2006 :
176).
2.8.3.

Aplikasi Kriptografi Kunci Publik


Aplikasi kriptografi kunci publik dapat dibagi menjadi tiga
kategori (Munir, 2006 : 178):
1.

Kerahasiaan data
Seperti pada kriptografi kunci simetri, kriptografi kunci
publik dapat digunakan untuk menjaga kerahasiaan data
(provide

confidentiality/secrecy)

melalui

mekanisme

enkripsi dan dekripsi. Contoh algoritma untuk aplikasi ini


adalah

Rivest

Shamir

Adleman,

Knapsack,

ElGamal, Elliptic Curve Cryptography (ECC).

37

Rabin,

2.

Tanda tangan digital


Tanda

tangan

digital

(digital

signature)

dengan

menggunakan algoritma kriptografi kunci publik dapat


digunakan untuk membuktikan otentikasi pesan maupun
otentikasi pengirim (provide authentication). Contoh
algoritmanya untuk aplikasi ini adalah Rivest Shamir
Adleman, DSA, dan ElGamal.
3.

Pertukaran kunci (key exchange)


Algoritma kriptografi kunci publik dapat digunakan untuk
pengiriman

kunci

simetri

(session

key).

Contoh

algoritmanya adalah Rivest Shamir Adleman dan DiffieHellman.

2.9.

RSA (Rivest Shamir Adleman)


Algoritma Rivest Shamir Adleman dibuat oleh 3 orang peneliti dari
MIT (Massachussets Institute of Technology) pada tahun 1976, yaitu Ron
(R)ivest, Adi (S)hamir, dan Leonard (A)dleman. Keamanan algoritma
Rivest Shamir Adleman terletak pada sulitnya memfaktorkan bilangan
yang besar menjadi faktor-faktor prima. Pemfaktoran dilakukan untuk
memperoleh kunci privat. Selama pemfaktoran bilangan besar menjadi
faktor-faktor prima belum ditemukan algoritma yang mangkus, maka
selama itu pula keamanan algoritma Rivest Shamir Adleman tetap
terjamin (Munir, 2006 : 179).

38

Algoritma Rivest Shamir Adleman memiliki besaran-besaran


sebagai berikut :
1.

p dan q bilangan prima

(rahasia)

2.

n=p.q

(tidak rahasia)

3.

(n) = (p - 1)(q - 1)

(rahasia)

4.

e (kunci enkripsi)

(tidak rahasia)

5.

d (kunci dekripsi)

(rahasia)

6.

m (plainteks)

(rahasia)

7.

c (cipherteks)

(tidak rahasia)

2.9.1.

Perumusan Algoritma Rivest Shamir Adleman


Algoritma Rivest Shamir Adleman didasarkan pada
teorema Euler yang menyatakan bahwa
a(n) 1 (mod n)

(2.1)

dengan syarat (Munir, 2006 : 179) :


1.

a harus relatif prima terhadap n

2.

(n) = n(1 - 1/p1)(1 - 1/p2 )(1 1/pr), yang dalam hal ini
p1, p2, , pr adalah faktor prima dari n. (n) adalah fungsi
yang menentukan berapa banyak dari bilangan-bilangan 1,
2, 3,, n yang relatif prima terhadap n.
Berdasarkan sifat ak bk (mod n) untuk k bilangan bulat

1 maka persamaan (2.1) dapat ditulis menjadi


ak(n) 1k (mod n) atau
ak(n) 1 (mod n)

39

(2.2)

bila a diganti dengan m, maka persamaan (2.2) dapat


ditulis menjadi
mk(n) 1 (mod n)

(2.3)

Berdasarkan sifat ac bc (mod n), maka bila persamaan


(2.3) dikali dengan m menjadi :
mk(n)+1 m (mod n)

(2.4)

yang dalam hal ini m relatif prima terhadap n.


Misalkan e dan d dipilih sedemikian sehingga
e d 1 (mod (n))

(2.5)

atau
e d k(n) + 1

(2.6)

Sulihkan (2.6) ke dalam persamaan (2.4) menjadi :


me d m (mod n)

(2.7)

persamaan (2.7) dapat ditulis kembali menjadi :


(me) d m (mod n)

(2.8)

Yang artinya, perpangkatan m dengan e diikuti dengan


perpangkatan dengan d menghasilkan kembali m semula.
Berdasarkan persamaan (2.8), maka enkripsi dan dekripsi
dirumuskan sebagai berikut :
Ee(m) = c me mod n

(2.9)

Dd(c) = m cd mod n

(2.10)

Karena e d = d e, maka enkripsi diikuti dengan dekripsi


ekivalen dengan dekripsi diikuti enkripsi :
Dd(Ee(m)) = Ee(Dd(c)) md mod n

40

(2.11)

Oleh karena md mod n (m + jn)d mod n untuk


sembarang bilangan bulat j, maka tiap plainteks m, m + n, m +
2n, , menghasilkan cipherteks yang sama. Dengan kata lain,
transformasinya dari banyak ke satu. Agar transformasinya dari
satu ke satu, maka m harus dibatasi dalam himpunan {0, 1, 2,
, n-1} sehingga enkripsi dan dekripsi tetap benar seperti pada
persamaan (2.9) dan (2.10).

2.9.2.

Algoritma Membangkitkan Pasangan Kunci


1.

Pilih dua buah bilangan prima sembarang, p dan q.

2.

Hitung n = p q (sebaiknya p q, sebab jika p = q maka n


= p2 sehingga p dapat diperoleh dengan menarik akar
pangkat dua dari n).

3.

Hitung (n) = (p - 1)(q - 1).

4.

Pilih kunci publik, e, yang relatif prima terhadap (n).

5.

Bangkitkan kunci privat dengan mengguakan persamaan


(2.5), yaitu e d 1 (mod (n)). Perhatikan bahwa e d
1 (mod n) ekivalen dengan e d 1 + k(n), sehingga
secara sederhana d dapat dihitung dengan

(2.12)

Hasil dari algoritma di atas :


-

Kunci publik adalah pasangan (e, n)

Kunci privat adalah pasangan (d, n)

Catatan : n tidak bersifat rahasia, sebab ia diperlukan pada


perhitungan enkripsi/dekripsi (Munir, 2006 : 181).
41

2.9.3.

Algoritma Enkripsi/Dekripsi
Enkripsi
1.

Ambil kunci publik penerima pesan, e, dan modulus n.

2.

Nyatakan plainteks m menjadi blok-blok m1, m2,,


sedemikian sehingga setiap blok merepresentasikan nilai
di dalam selang [0, n-1].

3.

Setiap blok m, dienkripsi menjadi blok ci dengan rumus ci


= mi e mod n.

Dekripsi
Setiap blok cipherteks ci didekripsi kembali menjadi blok mi
dengan rumus mi = ci d mod n.
2.9.4.

Keamanan Rivest Shamir Adleman


Keamanan algoritma Rivest Shamir Adleman didasarkan
pada sulitnya memfaktorkan bilangan besar menjadi faktorfaktor primanya (Munir, 2006 : 183).
Masalah pemfaktoran : Faktorkan n, yang dalam hal ini n
adalah hasil kali dari dua atau lebih bilangan prima.
Pada Rivest Shamir Adleman, masalah pemfaktoran
berbunyi : Faktorkan n menjadi dua faktor primanya, p dan q,
sedemikian sehingga n = p q. Sekali n berhasil difaktorkan
menjadi p dan q, maka (n) = (p - 1)(q - 1) dapat dihitung.
Selanjutnya, karena kunci enkripsi e diumumkan (tidak rahasia),

42

maka kunci dekripsi d dapat dihitung dari persamaan e d 1


(mod (n)).
Selama 300 tahun para matematikawan mencoba mencari
faktor bilangan yang besar namun tidak banyak membuahkan
hasil. Semua bukti yang diketahui menunjukkan bahwa upaya
pemfaktoran itu luar biasa sulit. Belum ditemukan algoritma
pemfaktoran bilangan besar dalam waktu polinomial, tetapi juga
tidak dapat dibuktikan algoritma tersebut ada. Fakta inilah yang
membuat algoritma Rivest Shamir Adleman dianggap aman.
Penemu algoritma Rivest Shamir Adleman bahkan menyarankan
nilai p dan q panjangnya lebih dari 100 angka. Dengan demikian
hasil kali n = p x q akan berukuran lebih dari 200 angka.
Menurut Rivest dan kawan-kawan, usaha untuk mencari faktor
prima dari bilangan 200 angka membutuhkan waktu komputasi
selama 4 milyar tahun, sedangkan untuk bilangan 500 angka
membutuhkan waktu 1025 tahun. (dengan asumsi bahwa
algoritma pemfaktoran yang digunakan adalah algoritma yang
tercepat saat ini dan komputer yang digunakan mempunyai
kecepatan 1 milidetik).
Secara umum dapat disimpulkan bahwa Rivest Shamir
Adleman hanya aman jika n cukup besar. Jika panjang n hanya
256 bit atau kurang, ia dapat difaktorkan dalam beberapa jam
saja dengan sebuah komputer PC dan program yang tersedia

43

secara bebas. Jika panjang n 512 bit atau kurang, ia dapat


difaktorkan dengan beberapa ratus komputer.
Tahun 1977, tiga orang penemu Rivest Shamir Adleman
membuat sayembara untuk memecahkan cipherteks dengan
menggunakan Rivest Shamir Adleman di majalah scientific
American. Hadiahnya adalah $100. Tahun 1994, kelompok yang
bekerja dengan kolaborasi

internet berhasil memecahkan

cipherteks hanya dalam waktu 8 bulan.

2.9.5.

Kecepatan
Rivest Shamir Adleman lebih lambat daripada algoritma
kriptografi kunci simetri seperti DES dan AES. Oleh karena itu,
di dalam praktek penggunaannya, pesan tetap dienkripsi dengan
menggunakan salah satu algoritma kunci simetri atau kunci
rahasia, sedangkan Rivest Shamir Adleman digunakan untuk
mengenkripsi kunci rahasia. Pesan dan kunci rahasia yang sudah
dienkripsi dapat dikirim bersama-sama. Penerima pesan mulamula mendekripsi kunci rahasia dengan kunci privatnya, lalu
menggunakan kunci rahasia tersebut untuk mendekripsi pesan
(Munir, 2006 : 184).

44

2.10.

PHP
2.10.1. Pengertian PHP
PHP adalah singkatan dari PHP Hypertext Preprocessor
yang digunakan sebagai bahasa script server-side dalam
pengembangan web yang disisipkan pada dokumen HTML.
Penggunaan PHP memungkinkan web dapat dibuat dinamis
sehingga maintenance situs web tersebut menjadi lebih mudah
dan efisien (Peranginangin, 2006 : 1).
PHP merupakan software open source yang disebarkan
dan dilisensikan secara gratis serta dapat di-download bebas dari
situs resminya (http://www.php.net).

2.10.2. Kelebihan-kelebihan PHP


Diantara maraknya pemrograman server web saat ini,
adalah ASP yang berkembang menjadi ASP.NET, JSP, CFML,
dan

PHP.

Jika

dibandingkan

di

antara

tiga

terbesar

pemrograman server web di atas, terdapat kelebihan dari PHP


itu sendiri, yaitu :
1.

PHP merupakan

sebuah bahasa

script yang

tidak

melakukan sebuah kompilasi dalam penggunaanya. Tidak


seperti hanya bahasa pemrograman aplikasi seperti Visual
Basic dan sebagainya.
2.

PHP dapat berjalan pada web server yang dirilis oleh


Microsoft, seperti IIS atau PWS juga pada apache yang
bersifat open source.

45

3.

Karena sifatnya yang open source, maka perubahan dan


perkembangan interpreter pada PHP lebih cepat dan
mudah, karena banyak milis dan developer membantu
pengembangannya.

4.

Jika dilihat dari segi pemahaman, PHP memiliki referensi


yang begitu banyak sehingga sangat mudah untuk
dipahami.

5.

PHP dapat berjalan pada tiga sistem operasi, yaitu : Linux,


Unix, dan Windows, dan juga dapat dijalankan secara
runtime pada suatu console.

2.10.3. Sintaks PHP


Sintaks program/script PHP ditulis dalam apitan tanda
khusus PHP. Ada empat macam pasangan tag PHP yang dapat
digunakan untuk menandai blok script PHP :
<?php ... ?> , < ? ... ?>, <% %>, atau
<script language = PHP> ... </script>

2.11.

MySQL
MySQL adalah multi user database yang menggunakan bahasa
Structured Query Language (SQL). MySQL dalam operasi client server
melibatkan server daemon MySQL di sisi server dan berbagai macam
program serta library yang berjalan di sisi client. MySQL mampu
menangani data yang cukup besar. Perusahaan yang menangani MySQL
yaitu TcX, mengaku mampu menyimpan data lebih dari 40 database,
10.000 tabel, dan sekitar 7 juta baris, totalnya kurang lebih 100
Gigabytes data (Nanang, 2004, Ch4).

46

SQL adalah bahasa standar yang digunakan untuk mengakses


server database. Bahasa ini pada awalnya dikembangkan oleh IBM,
namun telah diadopsi dan digunakan sebagai standar industri. Dengan
menggunakan SQL, proses akan database menjadi lebih user-friendly
dibandingkan dengan menggunakan dBASE atau clipper yang masih
menggunakan perintah-perintah pemrograman.

47

BAB III
METODOLOGI PENELITIAN

Pada penulisan tugas akhir ini, diperlukan data-data yang lengkap sebagai
bahan pendukung kebenaran materi uraian dan pembahasan. Oleh karena itu
diperlukan metodologi pengumpulan data dan metode pengembangan sistem.

3.1.

Metode Pengumpulan Data


Penyusunan skripsi ini dilakukan dengan menggunakan beberapa
metode yang dapat mendukung penulisan, baik dalam pengumpulan data
maupun informasi yang diperlukan, untuk mendapatkan kebenaran
materi uraian pembahasan.
Adapun metode pengumpulan

data yang digunakan dalam

pembahasan skripsi ini adalah dengan menggunakan :

3.1.1.

Metode Observasi
Observasi adalah pengamatan langsung yang dilakukan di
lapangan untuk mengetahui secara langsung keadaan objek
penelitian yang sebenarnya. Hal ini bertujuan untuk memperoleh
penjelasan mengenai data-data dan informasi yang dibutuhkan
dalam penelitian dengan divisi operasional CV Maharta Mandiri
Promo. Observasi ini dilaksanakan selama bulan Juli 2009,
bertempat di Kantor CV Maharta Mandiri Promo Jl. Raya
Pondok Kacang Timur No. 11 Pondok Aren, Tangerang.

48

3.1.2.

Metode Wawancara
Wawancara

memperoleh

keterangan

untuk

tujuan

penelitian dengan cara tanya-jawab sambil bertatap muka antara


pewawancara dengan narasumber telah dilakukan pada tanggal 9
Juli 2009 dengan narasumber Bapak Andi Muhammad AR
(Direktur utama CV Maharta Mandiri Promo). Hasil wawancara
dapat dilihat pada lampiran A.

3.1.3.

Metode Studi Pustaka


Metode studi pustaka digunakan dengan membaca dan
mempelajari referensi yang ada, e-book, serta mencari referensi
tambahan dari internet. Buku utama yang digunakan peneliti
yaitu : Kriptografi (Munir, 2006), Memahami Model Enkripsi &
Security Data (Wahana Komputer, 2003), Pengantar Ilmu
Kriptografi (Ariyus, 2008). Dan buku-buku selengkapnya yang
digunakan dapat dilihat pada daftar pustaka.

3.1.4.

Metode Studi Literatur


Metode

studi

literatur

digunakan

dengan

melihat

penelitian yang sudah ada. Merujuk pada penelitian yang telah


dilakukan

(Muliati,

2009),

beberapa

kelebihan

akan

ditambahkan pada aplikasi yang akan dibuat yaitu : dapat


mengenkripsi sepuluh file sekaligus, adanya pemberitahuan file
masuk baru, perbedaan warna antara file yang pernah didekripsi
dengan yang belum pernah didekripsi, pembangkitan pasangan

49

kunci yang baru, pengubahan password login, verifikasi gambar


saat pendaftaran, dan pertanyaan pengaman.

3.2.

Metode Pengembangan Sistem


Penelitian dilakukan dengan menggunakan metode pengembangan
sistem model pendekatan RAD (Rapid Application Development).
Penulis menggunakan model RAD karena melihat dari aplikasi yang
dikembangkan adalah aplikasi yang sederhana dan tidak membutuhkan
waktu yang lama, metode RAD adalah metode yang diperuntukkan untuk
jangka pendek sesuai dengan aplikasi yang dikembangkan. Berikut
adalah penjelasan masing-masing fase RAD dalam penelitian ini.

3.2.1.

Fase Perencanaan Syarat-Syarat


1.

Analisis Kebutuhan Masalah


Dari hasil observasi dan wawancara yang dilakukan pada
tahap sebelumnya, maka peneliti dapat menganalisis
bahwa kurangnya pengamanan data di CV Maharta
Mandiri Promo ini telah menyebabkan hilangnya data
penting. Oleh karena itu, diperlukan sebuah aplikasi
keamanan data yang mudah digunakan

dan dapat

menjamin kerahasiaan data mereka. Untuk selengkapnya


dapat dilihat pada subbab 4.4.1.

50

2.

Tujuan
Berdasarkan pada analisis kebutuhan di atas, maka tujuan
penelitian ini adalah untuk membuat suatu aplikasi
enkripsi yang mengimplementasikan metode Advance
Encryption Standard dan Rivest Shamir Adleman sehingga
dapat menjaga kerahasiaan data di CV Maharta Mandiri
Promo. Untuk selengkapnya dapat dilihat pada subbab
4.4.2.

3.

Syarat-syarat
Untuk mewujudkan tujuan tersebut dibutuhkan beberapa
syarat minimum dalam pembuatan aplikasi keamanan data
ini yaitu meliputi hal-hal sebagai berikut :
a.

Web server
Web server merupakan syarat mutlak suatu aplikasi
berbasis web. Web server merupakan platform untuk
menjalankan suatu aplikasi berbasis web. Untuk
pengembangan aplikasi ini dibutuhkan minimum
Web Server Apache 2.0.

b.

Bahasa Pemrograman
Bahasa

pemrograman

dibutuhkan

untuk dapat

membangun sebuah aplikasi, agar komputer dapat


melakukan berbagai operasi dan fungsi sesuai
dengan keinginan user. Untuk itu dibutuhkan suatu
bahasa pemrograman yang dapat digunakan untuk

51

membuat

aplikasi

client

server.

Bahasa

pemrograman minimum yang dibutuhkan dalam


pengembangan aplikasi ini adalah PHP 4.0.
c.

Database
Perancangan tabel-tabel

akan digunakan untuk

pelengkap program seperti proses login serta proses


penamaan dan penyimpanan file enkripsi. Database
yang dibutuhkan adalah database MySQL 5.0.
Spesifikasi perangkat lunak dan perangkat keras minimum
yang diperlukan dalam pembuatan aplikasi ini adalah
sebagai berikut :
a.

Perangkat Lunak :
1.

Paket web server


(Apache 2.0, PHP 4.0, MySQL 5.0)

b.

2.

Adobe Photoshop 7.

3.

EditPlus 2.12.

4.

Mozilla Firefox 3.0.

5.

Microsoft Windows 2000.

Perangkat Keras :
1.

Processor Pentium III.

2.

Harddisk 80 GB.

3.

Memory SDR 512 MB.

4.

Monitor dengan resolusi 800 x 600 pixel.

52

3.2.2.

Fase Perancangan
Pada tahap ini dilakukan perancangan proses yaitu
perancangan proses-proses yang akan terjadi di dalam sistem.
1.

Perancangan Proses
Aplikasi ini menggabungkan dua metode enkripsi. Pada
proses enkripsi, file dienkripsi menggunakan metode
enkripsi Advance Encryption Standard (rijndael). Setelah
selesai, kunci yang digunakan untuk enkripsi dengan
Advance Encryption Standard tadi dienkripsi dengan
menggunakan kunci publik metode enkripsi Rivest Shamir
Adleman, dan string hasil enkripsi password tersebut
disimpan di basis data.
Pada proses dekripsi, file terenkripsi yang dihasilkan pada
proses enkripsi akan diubah menjadi file semula dengan
cara membalik proses enkripsi. Pada proses ini pertamatama, password didekripsi menggunakan kunci private
metode dekripsi Rivest Shamir Adleman. Setelah selesai
maka file terenkripsi didekripsi dengan kunci tadi
menggunakan metode

dekripsi Advance

Encryption

Standard. Setelah proses dekripsi selesai file terenkripsi


akan kembali ke tipe semula. Untuk selengkapnya dapat
dilihat di subbab 4.5.1.
Agar memperjelas gambaran proses enkripsi dan dekripsi,
dapat dilihat pada gambar 3.1.

53

Proses enkripsi

Proses dekripsi

plainteks

cipherpassword

AES

RSA

cipherteks

password

password

cipherteks

RSA

AES

cipherpassword

plainteks

Gambar 3.1. Proses enkripsi dan dekripsi

2.

Perancangan Basis Data


Pada aplikasi acrypt cs ini digunakan database sebagai
pelengkap program seperti proses login dan proses
penyimpanan data file enkripsi. Database yang digunakan
adalah database MySQL. Untuk selengkapnya dapat
dilihat di subbab 4.5.3.

3.

Perancangan Antarmuka Pemakai (User Interface)


Perancangan antarmuka pemakai memberikan fasilitas
komunikasi antar pemakai dan sistem, memberikan
berbagai fasilitas informasi dan berbagai keterangan yang
bertujuan untuk membantu mengarahkan alur penelusuran
masalah sampai ditemukan solusi. Perancangan antarmuka
54

pemakai (user interface) pada aplikasi ini digambarkan


oleh State Transition Diagram. Untuk selengkapnya dapat
dilihat di subbab 4.5.4.

3.2.3.

Fase Konstruksi
Pada tahap ini dilakukan pembuatan program terhadap
rancangan-rancangan yang telah

didefinisikan. Pembuatan

program yang dilakukan menggunakan bahasa pemrograman


PHP yang dibuat dengan menggunakan text editor editplus.
Untuk selengkapnya dapat dilihat di subbab 4.6.

3.2.4.

Fase Pelaksanaan
Pada tahapan ini dilakukan pengujian terhadap aplikasi
acrypt cs yang telah dibuat, pada pengujian terhadap aplikasi
ini, penulis menggunakan pengujian black-box yaitu suatu
pengujian yang berfokus pada persyaratan fungsional perangkat
lunak

(Pressman, 2002:

551). Sebagai akhir

dari fase

pelaksanaan, diminta tanggapan user tentang aplikasi ini untuk


bahan evaluasi. Untuk selengkapnya dapat dilihat di subbab 4.7.
Ilustrasi metodologi penelitian yang dilakukan dalam
membangun aplikasi acrypt cs ini dapat dilihat pada gambar
3.2.

55

Metode
Pengumpulan Data

Analisis
Kebutuhan

Tujuan :
Menciptakan sebuah aplikasi kriptografi menggunakan
metode AES dan RSA berbasis client server untuk
memberikan salah satu solusi dalam mengatasi masalah
keamanan data serta menjaga kerahasiaan data di CV
Maharta Mandiri Promo

Syarat-syarat :
Web Server Apache,
PHP, dan MySQL

Fase Perencanaan
Syarat-syarat
Perancangan
algoritma kriptografi
Fase Perancangan

Perancangan
Proses
Perancangan
Antarmuka

Fase Konstruksi

Flowchart

STD (State
Transition Diagram)

Tahap Pembuatan Program

Konfigurasi client server


Fase Pelaksanaan

Proses Enkripsi dan Dekripsi Multifile


Pengujian Aplikasi acrypt cs

perubahan

Tanggapan User

Aplikasi Kriptografi
berbasis client server

Gambar 3. 2 Ilustrasi metodologi penelitian pengembangan


aplikasi kriptografi berbasis client server (acrypt cs)

56

BAB IV
PEMBAHASAN DAN IMPLEMENTASI

4.1.

Gambaran Umum CV Maharta Mandiri Promo


4.1.1.

Sekilas CV Maharta Mandiri Promo


CV Maharta Mandiri Promo adalah perusahaan yang
bergerak dalam bidang desain grafis dan percetakan. Perusahaan
ini berdiri pada tanggal 18 Oktober 1999 berdasarkan akta
notaris Srilestari Roespinoedji, No.87. Tanggal 18 Oktober
1999. Bertempat di Jalan Raya Pondok Kacang Timur No.11.
Sejak berdiri hingga saat ini, perusahaan ini telah banyak
mengantongi ijin. Diantaranya : Surat Izin Tempat Usaha,
No.503/KEC.Pd.Aren/2007. Tanggal 02 Mei 2007, Tanda
Daftar

Perusahaan

Persekutuan

Komanditer,

No.30.03.3.52.01854. Tanggal 05 Agustus 2005, dan Izin Usaha


Perdagangan

(IUP)Kecil,No.503.1/0083/30-03/PK/III/2006.

Tanggal 07 Maret 2006.


Sejak awal berdiri sampai sekarang, perusahaaan telah
mendapat banyak mitra bisnis. Diantaranya adalah mitra
langsung yaitu McDonald, CommonWealth Bank, Alfa Grosir,
Bank Lippo, dan Badan Pertanahan Nasional. Sedangkan mitra
tidak langsung diantaranya Coca cola, Bank Mandiri, Kimia

57

Farma, Telkomsel, Nestle, dan BNI 46. Sumber : Company


Profile CV Maharta Mandiri Promo.
4.1.2.

Visi dan Misi CV Maharta Mandiri Promo


CV Maharta Mandiri Promo sebagai sebuah perusahaan
desain grafis dan percetakan memiliki visi dan misi dalam
menjalankan perusahaan. Visi dan misi tersebut bertujuan untuk
membangun perusahaan agar terus maju di bidangnya.
4.1.2.1. Visi CV Maharta Mandiri Promo
Menjadi perusahaan periklanan yang unggul,
profesional, bertaraf internasional, dan mandiri.
4.1.2.2. Misi CV Maharta Mandiri Promo

4.1.3.

1.

Memberikan layanan terbaik kepada konsumen.

2.

Menggunakan teknologi terbaru dalam produksi.

3.

Menjunjung tinggi nilai moral dalam bisnis.

4.

Menyejahterakan kehidupan karyawan.

5.

Memiliki tanggung jawab sosial yang baik.

Struktur Organisasi CV Maharta Mandiri Promo


Gambar 4.1 menunjukkan struktur organisasi CV Maharta
Mandiri Promo.

58

Direktur Utama
Andi Muhammad AR

Direktur Operasional
H. Ahmad AR

Direktur Keuangan
Inah Roinah

Direktur Pemasaran
Alfian

Kabag Produksi
Ichram Masrul

Kabag Kreatif
Anwar Rosandi

Kabag Keuangan
Nani Rustini

Manajer Pemasaran
Iwan

Pegawai

Pegawai

Pegawai

Pegawai

Gambar 4.1. Struktur Organisasi CV Maharta Mandiri Promo


(Sumber : Company Profile CV Maharta Mandiri Promo)

4.2.

Hasil Observasi
Observasi yang dilaksanakan selama bulan Juli 2009 di Kantor CV
Maharta Mandiri Promo memberikan kesimpulan bahwa data yang
tersimpan di komputer yang terhubung dalam jaringan LAN (Local Area
Network) CV Maharta Mandiri Promo tidak aman dari pencurian data.
Karena data yang dicuri dapat langsung dimanfaatkan oleh pihak yang
tidak berhak seperti yang pernah terjadi sebelumnya. Oleh karena itu
diperlukan suatu aplikasi enkripsi yang dapat melindungi data-data
penting perusahaan dari pihak yang tidak bertanggung jawab.

4.3.

Aplikasi Acrypt cs
Aplikasi acrypt cs (Aplikasi Enkripsi berbasis Client Server)
adalah sebuah aplikasi keamanan data berbasis client server yang

59

menggunakan metode Advance Encryption Standard dan Rivest Shamir


Adleman. Aplikasi ini diharapkan dapat membantu anda dalam menjaga
data-data penting dari pengaksesan orang-orang yang tidak berhak.

4.4.

Fase Perencanaan Syarat-syarat


4.4.1.

Analisis Kebutuhan Masalah


Aplikasi keamanan data yang akan dibuat seperti yang
telah dianalisis pada subbab 3.2.1 adalah aplikasi enkripsi dan
dekripsi berbasis web yang mudah digunakan menggunakan
metode kriptografi Advance Encryption Standard dan Rivest
Shamir Adleman.

4.4.2.

Tujuan
Seperti yang telah dijelaskan pada subbab 3.2.2 peneliti
bertujuan

untuk

membuat suatu

aplikasi enkripsi

yang

mengimplementasikan metode enkripsi dan dekripsi Advance


Encryption Standard dan Rivest Shamir Adleman, dan juga
pembangkitan pasangan kunci publik dan kunci privat Rivest
Shamir Adleman sehingga dapat menjaga kerahasiaan data di
CV Maharta Mandiri Promo.

60

4.4.3.

Syarat-syarat
Untuk mewujudkan tujuan tersebut digunakan beberapa
syarat dalam pembuatan aplikasi keamanan data ini yaitu
meliputi hal-hal sebagai berikut :
a.

Web server
Dalam pengembangan aplikasi ini digunakan Web Server
Apache 2.2.8. yang tergabung dalam paket xampp 1.6.6a.

b.

Bahasa Pemrograman
Bahasa pemrograman yang digunakan untuk membangun
aplikasi ini adalah PHP 5.2.5. Interpreter PHP telah ada
dalam paket xampp 1.6.6a. Dalam penulisan kode, peneliti
memakai editor teks editplus 2.12.

c.

Database
Database yang digunakan dalam aplikasi ini adalah
database MySQL 5.0.51a yang ada dalam paket xampp
1.6.6a. Untuk pembuatan database, digunakan editor
phpMyAdmin.

4.5.

Fase Perancangan (Workshop Design)


Pada tahap ini dilakukan perancangan, evaluasi dan memperbaiki
sistem sesuai dengan kebutuhan agar sistem yang sedang dibuat dapat
dimanfaatkan secara optimal.

61

4.5.1.

Perancangan Proses
1.

Diagram konteks sistem yang diusulkan

username, password,
public key, private key

user

file

public key, private key

aplikasi
acryptcs

filename1, filename2,
sender_id, receiver_id

user

file

filename1, filename2,
sender_id, receiver_id

Gambar 4.2. Diagram konteks sistem yang diusulkan

Dalam konteks diagram pada gambar 4.2 terdapat dua


entity yang menunjang proses aplikasi acrypt cs yaitu user
dan file.
2.

Diagram zero sistem yang diusulkan

username, password

1.0
login

user
password,
public key
2.0
enkripsi
private key

file

filename1, sender,
receiver
filename2, sender,
receiver

filename2, sender,
receiver
file

3.0
dekripsi

filename1, sender,
receiver

Gambar 4.3. Diagram zero sistem yang diusulkan

62

3.

Diagram level satu sistem yang diusulkan

username, password
user

1.1*
cek
database

1.2*
buat
session

username, password

Gambar 4.4. Diagram level satu proses 1.0 (login)

user

file

password, public key,


jumlah file
2.1*
cek file

filename1, sender,
receiver

2.2*
enkripsi
AES

password

public key
2.3*
enkripsi
RSA

filename2, sender,
receiver

file

Gambar 4.5. Diagram level satu proses 2.0 (enkripsi)

user

private key,
jumlah file
3.1*
cek file

file

filename2

private key

password

3.3*
dekripsi
AES

file
filename1

Gambar 4.6. Diagram level satu proses 3.0 (dekripsi)

63

3.2*
dekripsi
RSA

4.5.2.

Perancangan Flowchart
Pada tahap ini dilakukan perancangan flowchart algoritma
aplikasi enkripsi. Pada tahapan ini akan digambarkan alur proses
enkripsi dan dekripsi pada program yang dikembangkan dengan
menggunakan flowchart.

64

1. Flowchart proses enkripsi

start

Input jumlah file

Input file

Cek file

File salah/kosong ?

true

false
Input kunci AES

Pilih penerima

i=0, jml file = file tdk kosong

Panggil modul enkripsi AES

Panggil modul enkripsi RSA

Update database

i++

true

i< jml file?


false
Tampilkan hasil enkripsi

stop

Gambar 4.7. Flowchart proses enkripsi

65

Berdasarkan gambar 4.7, proses enkripsi dimulai dengan


memasukkan jumlah file yang akan dienkripsi. Setelah itu, user
memasukkan file yang akan dienkripsi. Kemudian data file akan
ditampilkan sementara. Jika file salah, maka user harus
memasukkan kembali file yang akan dienkripsi. Jika semua file
yang dipilih sudah pernah dienkripsi sebelumnya (dengan nama
file yang masih sama), maka user harus memasukkan kembali
file yang akan dienkripsi.
Selanjutnya user harus memasukkan string yang akan digunakan
sebagai kunci untuk enkripsi file. String dapat berupa karakter
apapun dengan panjang maksimal 20 karakter. Kemudian user
memilih penerima pesan (secara tidak langsung memasukkan
kunci publik penerima).
Setelah itu proses enkripsi dimulai. Proses memanggil fungsi
enkripsi Advance Encryption Standard untuk enkripsi file,
kemudian memanggil fungsi enkripsi Rivest Shamir Adleman
untuk enkripsi password. Sesudah selesai, proses memasukkan
data file ke dalam database. Proses enkripsi dilakukan sebanyak
jumlah file yang terisi (tidak kosong). Setelah proses enkripsi
selesai, data file terenkripsi ditampilkan.

66

2. Flowchart enkripsi Advance Encryption Standard

Baca file

r = 10

AddRoundKey()

SubBytes()

ShiftRows()

true

r=1?
false
MixColumns()

Panggil modul ekspansi kunci

AddRoundKey()

r-1

r=0?

false

true
2

Gambar 4.8. Flowchart proses enkripsi dengan metode Advance Encryption Standard
(Sumber : Munir, 2006)

67

Proses enkripsi dengan metode Advance Encryption Standard


seperti ditunjukkan pada gambar 4.8, dimulai dengan membaca
file. Didefinisikan bahwa jumlah round adalah sepuluh. Proses
melakukan fungsi AddRoundKey() terhadap data dengan round
key awal. Selanjutnya proses berlanjut dengan round-1 putaran
dengan

memanggil

fungsi

SubBytes(),

ShiftRows(),

MixColumns(), KeyExpansion(), dan AddRoundKey(). Setelah


selesai, putaran terakhir dilakukan dengan memanggil fungsi
SubBytes(), ShiftRows(), KeyExpansion(), dan AddRoundKey().
Setelah itu proses enkripsi Advance Encryption Standard
Selesai.

68

3. Flowchart enkripsi Rivest Shamir Adleman

plainteks (M), n, e

Transformasi M m

mn-1

false

m dibagi menjadi blok-blok

false

c disatukan menjadi kesatuan


bilangan integer

true
e

c = m (mod n)

cipherteks (c)

cn-1
true
cipherteks (c)

Transformasi c C

cipherteks (C)

Gambar 4.9. Flowchart proses enkripsi dengan metode Rivest Shamir Adleman
(Sumber : Munir : 2006)

Berdasarkan gambar 4.9, enkripsi dengan metode Rivest Shamir


Adleman dimulai dengan inisialisasi plainteks(M), n(p x q), dan
kunci

publik(e).

Plainteks

(dalam

hal

ini

password),

ditransformasi ke dalam angka (m). Selanjutnya, jika m lebih

69

besar dari n dikurang 1, m dibagi menjadi blok-blok.


Selanjutnya dilakukan penghitungan cipherteks (c) dengan
rumus c = me (mod n). Jika c lebih besar dari n dikurang1, c
disatukan menjadi kesatuan bilangan integer. Selanjutnya
dilakukan transformasi cipherteks c menjadi C.

70

4.

Flowchart proses dekripsi

start

Pilih file

Cek file sementara

File benar?

false

true
Input kunci private

Kunci valid?

false

true
i=0, n = jml file, (jml file>10, n=10)

Panggil modul dekripsi RSA

Panggil modul dekripsi AES

10

i++

true

i<n?
false
Tampilkan hasil dekripsi

stop

Gambar 4.10. Flowchart proses dekripsi

71

Untuk proses dekripsi, sesuai dengan gambar 4.10, dekripsi


dimulai dengan memilih file yang akan didekripsi. Lalu
menampilkan sementara file-file yang akan didekripsi. Jika file
benar, masukkan kunci privat. Setelah itu periksa apakah kunci
privat valid atau tidak. Jika kunci privat tidak valid, masukkan
lagi kunci privat. Jika valid, proses dekripsi berjalan.
Dimulai dengan menginisialisasi i(=0), n(jumlah file), jika
jumlah file lebih dari 10, maka n=10. Selanjutnya selama i
kurang dari n, proses memanggil modul dekripsi Rivest Shamir
Adleman, setelah itu memanggil modul dekripsi Advance
Encryption Standard. Setelah proses dekripsi selesai, file-file
hasil dekripsi ditampilkan.

72

5.

Flowchart dekripsi Advance Encryption Standard

Baca file

r = 10

AddRoundKey()

r = 10?

true

false
Inv MixColumns()

Inv SubBytes()

Inv ShiftRows()

Panggil modul ekspansi kunci

AddRoundKey()

r -1

false

r=0?
true
10

Gambar 4.11. Flowchart proses dekripsi dengan metode Advance Encryption Standard
(Sumber : Munir, 2006)

Proses dekripsi dengan metode Advance Encryption Standard


seperti ditunjukkan pada gambar 4.11, dimulai dengan membaca
file. Didefinisikan bahwa jumlah round adalah sepuluh. Proses
73

melakukan fungsi AddRoundKey() terhadap data dengan round


key awal. Selanjutnya proses berlanjut selama round-1 putaran
dengan memanggil fungsi InvMixColumns(), InvSubBytes(),
InvShiftRows(), KeyExpansion(), dan AddRoundKey(). Setelah
selesai, putaran terakhir dilakukan dengan memanggil fungsi
InvSubBytes(),

InvShiftRows(),

KeyExpansion(),

dan

AddRoundKey(). Setelah itu proses dekripsi Advance Encryption


Standard Selesai.

74

6.

Flowchart dekripsi Rivest Shamir Adleman

cipherteks (C), n, d

Transformasi C c

false

cn-1

c dibagi menjadi blok-blok

true
d

m = c (mod n)

plainteks (m)

false

m n-1

m disatukan menjadi kesatuan


bilangan integer

true
plainteks (m)

Transformasi m M

plainteks (M)

Gambar 4.12. Flowchart proses dekripsi dengan metode Rivest Shamir Adleman
(Sumber : Munir, 2006)

Berdasarkan gambar 4.12, dekripsi dengan metode Rivest


Shamir Adleman dimulai dengan inisialisasi cipherteks(C), n(p
x q), dan kunci privat (d). Cipherteks ditransformasi ke dalam
angka (c). Selanjutnya, jika c lebih besar dari n dikurang 1, c

75

dibagi menjadi blok-blok. Selanjutnya dilakukan penghitungan


plainteks (m) dengan rumus m = cd (mod n). Jika m lebih dari n
dikurang1, m disatukan menjadi kesatuan bilangan integer.
Selanjutnya dilakukan transformasi plainteks m menjadi M.

4.5.3.

Perancangan Basis Data


Pada pengembangan aplikasi acrypt cs ini digunakan
database sebagai pelengkap program seperti proses login dan
proses penamaan dan penyimpanan file enkripsi. Database yang
digunakan adalah database MySQL.
1.

Struktur Entity Relationship Diagram (ERD)

user

mendekripsi

mengenkripsi

plainteks

menjadi

cipherteks

Gambar 4.13. Struktur Entity Relationship Diagram

2.

Normalisasi
a.

Relasi User_Plainteks
UnNormalized Form (Bentuk Tidak Normal)

id_user

username

fullname

password

public_key

sec_question

sec_answer

id_plainteks

plain_name

plain_size

1 st Normal Form (Bentuk Normal Pertama)


76

private_key

id_user

username

fullname

password

public_key

sec_question

sec_answer

id_plainteks

plain_name

plain_size

private_key

2nd Normal Form (Bentuk Normal Kedua)


username

id_user

fullname

password

id_plainteks

plain_name

plain_size

id_outbox

id_plainteks

id_user

b.

public_key

private_key

sec_question

sec_answer

Relasi User_Cipherteks
UnNormalized Form (Bentuk Tidak Normal)

id_user

username

fullname

password

public_key

id_cipherteks

cipher_name

cipher_size

aes_key

iv

private_key

sec_question

sec_answer

sec_question

sec_answer

1 st Normal Form (Bentuk Normal Pertama)


id_user

username

fullname

password

public_key

id_cipherteks

cipher_name

cipher_size

aes_key

iv

private_key

nd

2 Normal Form (Bentuk Normal Kedua)


username

id_user

id_cipherteks

fullname

cipher_name

id_cipherteks

id_inbox

c.

password

cipher_size

public_key

aes_key

private_key

sec_question

sec_answer

iv

id_user

Relasi Plainteks_Cipherteks
UnNormalized Form (Bentuk Tidak Normal)
id_plainteks

plain_name

aes_key

iv

77

plain_size

id_cipherteks

cipher_name

cipher_size

1st Normal Form (Bentuk Normal Pertama)


id_plainteks

plain_name

aes_key

iv

plain_size

id_cipherteks

cipher_name

cipher_size

2nd Normal Form (Bentuk Normal Kedua)


Karena satu plainteks pasti menjadi satu cipherteks,
maka tabel dapat digabungkan menjadi satu tabel.
Maka semua field id_cipherteks dan id_plainteks
akan digabungkan menjadi id_file.
id_file

3.

plain_name

plain_size

cipher_name

cipher_size

aes_key

Logical Record Structure

Gambar 4.14. Logical Record Structure (LRS)


4.

Spesifikasi Tabel
Nama Database

: acryptcs

1.

Nama Tabel

: user

Primary Key

: id_user

Foreign Key

:-

78

iv

Tipe File

: File Master

field

2.

type

id_user

int(11)

username

varchar(30)

fullname

varchar(50)

password

varchar(50)

public_key

varchar(20)

private_key

varchar(20)

sec_question

varchar(50)

sec_answer

varchar(20)

Nama Tabel

: file

Primary Key

: id_file

Foreign Key

:-

Tipe File

: File Master

field

3.

type

id_file

int(11)

plain_name

varchar(100)

plain_size

varchar(20)

cipher_name

varchar(100)

cipher_size

varchar(20)

aes_key

varchar(50)

iv

varchar(20)

date

varchar(27)

Nama Tabel

: inbox

Primary Key

: id_inbox

Foreign Key

: id_file, id_user

Tipe File

: File Master

field

type

79

attributes
unsigned

attributes
unsigned

attributes

extra
auto_increment

extra
auto_increment

extra

4.

id_inbox

int(11)

id_file

int(11)

id_user

int(11)

Nama Tabel

: outbox

Primary Key

: id_outbox

Foreign Key

: id_file, id_user

Tipe File

: File Master

field

4.5.4.

unsigned

type

id_outbox

int(11)

id_file

int(11)

id_user

int(11)

auto_increment

attributes
unsigned

extra
auto_increment

Perancangan Antarmuka
Dalam perancangan antarmuka aplikasi keamanan data
yang berbasis client server ini, dibuat beberapa form yang akan
ditampilkan.
1.

Perancangan Halaman Login


Halaman

login

merupakan

tampilan

untuk

login.

Pengguna telah terdaftar diharuskan untuk mengisikan


username dan password.

80

Logo acrypt cs

Please login
username :
image

image
password :
enter

sign up

footer

Gambar 4.15. Rancangan halaman login

Apabila pengguna belum terdaftar, dapat mendaftar


terlebih dahulu dengan mengklik tombol sign up. Hal
ini mencegah aplikasi agar tidak diakses oleh sembarang
orang.

81

Logo acrypt cs

Sign up

image

Fullname

username

password

confirm password :
security question
question

answer

:
image

enter word above

:
sign up

clear
login

footer

Gambar 4.16. Rancangan halaman sign up

2.

Perancangan Halaman Utama (Home)


Halaman Home merupakan tampilan utama yang di
dalamnya terdapat sembilan link utama yang masingmasing mempunyai fungsi sebagai berikut :
1.

Encrypt : menampilkan halaman enkripsi.

2.

Decrypt : menampilkan halaman dekripsi.

3.

Inbox : menampilkan halaman kotak masuk.

4.

Outbox : menampilkan halaman kotak keluar.

82

5.

My key : menampilkan halaman untuk melihat kunci


privat dan mengubah pasangan kunci. Halaman ini
dilindungi dengan pertanyaan pengaman yang dibuat
saat sign up.

6.

Change password : menampilkan halaman untuk


mengubah password login.

7.

About : menampilkan halaman profil pembuat


aplikasi.

8.

Help : menampilkan halaman bantuan aplikasi.

9.

Logout : keluar dari account.

Logo acrypt cs

Keterangan inbox baru

Keterangan
menu
(saat
mouseover)

Keterangan
menu
(saat
mouseover)
Menu utama

footer

Gambar 4.17. Rancangan halaman utama

83

3.

Perancangan Halaman Encrypt


Halaman enkripsi akan muncul jika user memilih menu
encrypt pada halaman utama. Terdapat enam halaman
dalam rancangan halaman encrypt, yaitu:
a.

Rancangan halaman input jumlah file


Halaman input jumlah file merupakan halaman awal
dari proses enkripsi. User memilih jumlah file yang
akan dienkripsi pada halaman ini.

Logo acrypt cs

encryption
Number of file :

Combo box

enter

cancel

footer

Gambar 4.18. Rancangan halaman input file enkripsi

b.

Rancangan halaman input file


Halaman input file merupakan halaman kedua dari
proses enkripsi. Terdapat input file yang akan
dienkripsi.

Halaman

menyediakan

input

file

sebanyak 5 file. User dapat memilih file dengan


mengklik

tombol

84

browse.

Untuk

menghindari

kesalahan, user tidak dapat mengetikkan sendiri file


yang akan dienkripsi.

Logo acrypt cs

encryption
File 1 :

enter

:
File n :

Browse..

:
enter

next

Browse..

clear all

cancel

footer

Gambar 4.19. Rancangan halaman input file enkripsi

c.

Halaman cek file


Halaman ini menampilkan sementara file-file yang
akan dienkripsi.

85

Logo acrypt cs

encryption
File 1
File name

File type

File size

Status

File n
File name

File type

File size

Status

:
next

cancel

footer

Gambar 4.20. Rancangan halaman cek file

d.

Halaman input password.


Halaman ini meminta user untuk memasukkan
password berupa string yang akan digunakan untuk
enkripsi file pada halaman sebelumnya.

86

Logo acrypt cs

encryption
input string for AES password encryption :
next

cancel

footer

Gambar 4.21. Rancangan halaman input password

e.

Halaman pilih tujuan (penerima).


Sebenarnya

halaman

ini meminta

user

untuk

memasukkan kunci publik penerima pesan. Tetapi


untuk

mencegah

kesalahan

input,

aplikasi

menyediakan form yang memudahkan user untuk


memilih tujuan (penerima pesan). Setelah button
encrypt diklik, proses enkripsi akan dimulai.

87

Logo acrypt cs

encryption
Select receiver
o Username 1

o Username 2
:
:

o Username n
next

cancel

footer

Gambar 4.22. Rancangan halaman pilih tujuan

f.

Halaman encryption complete


Halaman ini muncul setelah proses enkripsi selesai.
Halaman ini menginformasikan file hasil enkripsi,
ukuran file, waktu enkripsi, dan user penerima.

88

Logo acrypt cs

encryption
Encryption complete for these file
File 1
File name

File size

Process time

File n
File name

File size

Process time

finish

footer

Gambar 4.23. Rancangan halaman encryption complete

4.

Perancangan Halaman Decrypt


Halaman dekripsi akan muncul jika user memilih menu
decrypt pada halaman utama. Terdapat lima halaman
dalam rancangan halaman decrypt, yaitu:
a.

Rancangan halaman pilih file


Halaman pilih file merupakan halaman awal dari
proses dekripsi. Terdapat checkbox untuk memilih
file yang akan didekripsi. User diizinkan memilih
paling banyak 10 file. Jika user memilih lebih dari

89

10 file, maka file ke 11 dan seterusnya akan


diabaikan.

Logo acrypt cs

decryption
Record 1
Record 2

Record n

decrypt

cancel

footer

Gambar 4.24. Rancangan halaman pilih file

b.

Halaman cek file


Halaman ini menampilkan sementara file-file yang
akan didekripsi.

90

Logo acrypt cs

decryption
File 1
File name

File size

Sender

Date

File n
File name

File size

Sender

Date

:
next

cancel

footer

Gambar 4.25. Rancangan halaman cek file

c.

Halaman input private key


Halaman ini meminta user untuk memasukkan kunci
private miliknya. Kunci private ini akan digunakan
untuk dekripsi password pada file yang terenkripsi.
Setelah button decrypt diklik, proses dekripsi akan
dimulai.

91

Logo acrypt cs

decryption
Your private key:
next

clear

cancel

footer

Gambar 4.26. Rancangan halaman input private key

d.

Halaman decryption complete.


Halaman ini menginformasikan file hasil dekripsi,
ukuran file, dan waktu dekripsi.

92

Logo acrypt cs

decryption
Decryption complete for these file
File 1
File name

File size

Process time

File n
File name

File size

Process time

finish

footer

Gambar 4.27. Rancangan halaman decryption complete

5.

Perancangan Halaman Inbox


Halaman inbox akan muncul jika user memilih menu
inbox pada halaman utama. Halaman ini menampilkan
semua file terenkripsi yang telah dikirimkan oleh user lain
kepadanya. User dapat langsung mendekripsi file dari
halaman ini. Tetapi user hanya dapat mendekripsi satu file
pada satu waktu. User juga dapat menghapus file tersebut.

93

Logo acrypt cs

inbox
No

Filename

Filesize

Sender

Date

Action

Record 1

decrypt

delete

Record 2

decrypt

delete

decrypt

delete

Record n

footer

Gambar 4.28. Rancangan halaman inbox

6.

Perancangan Halaman Outbox


Halaman outbox akan muncul jika user memilih menu
outbox pada halaman utama. Halaman ini menampilkan
semua file terenkripsi yang telah dikirimkan oleh user ini
kepada user lain. User dapat menghapus file tersebut.

94

Logo acrypt cs

outbox
No

Filename

Filesize

Receiver Date

Action

Record 1

delete

Record 2

delete

Record n

:
delete

footer

Gambar 4.29. Rancangan halaman outbox

7.

Perancangan Halaman My Key


Halaman my key akan muncul jika user memilih menu
my key pada halaman utama. Halaman ini memberi
kesempatan user untuk melihat kunci privat (jika user
lupa) dan merubah pasangan kuncinya. Halaman ini
dilindungi pertanyaan pengaman yang dibuat saat sign up.
Jika pertanyaan dijawab dengan benar, maka private key
akan muncul dan memberikan link untuk mengubah
pasangan kuncinya. Jika user memilih link tersebut, maka
aplikasi akan langsung membangkitkan pasangan kunci
publik dan kunci private jika inbox user dalam keadaan
kosong. Jika inbox tidak kosong, maka user harus

95

menghapus dulu seluruh file yang ada di inbox-nya. User


juga dapat merubah lagi pasangan kuncinya dengan merefresh halaman ini. User harus langsung menyimpan
kunci private yang telah ada.

Logo acrypt cs

My key

image

For security reason, you have to answer your


security question to get your private key or
change your key pair..
sequrity question
your answer :

enter

answer

clear

cancel

footer

Gambar 4.30. Rancangan halaman my key (security question)

Logo acrypt cs

My key
your private key :

new key

image

Please safely keep your private key..


change my key

footer

Gambar 4.31. Rancangan halaman my key (private key)

96

Logo acrypt cs

Change key
your key has been change ! refresh page for new key..
image

you have to save your private key :

new key

footer

Gambar 4.32. Rancangan halaman generate key

8.

Perancangan Halaman Change Password


Halaman change password akan muncul jika user memilih
menu change password di halaman utama. Halaman ini
memberi kesempatan user untuk merubah password
loginnya.

97

Logo acrypt cs

Change password

image

current password

new password

confirm password

:
save

clear

footer

Gambar 4.33. Rancangan halaman change password

9.

Perancangan Halaman Help


Halaman help akan muncul jika user memilih menu help
pada halaman utama. Halaman ini menampilkan semua
bantuan yang mungkin diperlukan oleh user. Termasuk
sedikit materi tentang metode yang digunakan dalam
aplikasi ini.

98

Logo acrypt cs

help
Singkat tentang acrypt cs

Algoritma AES

Algoritma RSA

Link bantuan

Gambar marquee

footer

Gambar 4.34. Rancangan halaman help


10.

Perancangan Halaman About


Halaman about akan muncul jika user memilih menu
about pada halaman utama. Halaman ini menampilkan
beberapa informasi tentang pembuat aplikasi.

99

Logo acrypt cs

about
Nama : zaenal muttaqin
Nim : 2040 9100 2553
Jurusan : teknik informatika
Fakultas : sains dan tekologi
e-mail : jayker85@gmail.com

foto

Ucapan terima kasih

footer

Gambar 4.35. Rancangan halaman about

4.5.5.

State Transition Diagram


Berikut adalah gambaran State Transition Diagram-nya :

100

101

Gambar 4.36. State Transition Diagram Aplikasi Acrypt CS

102

Berdasarkan State Transition Diagram pada gambar 4.34,


aplikasi acrypt cs dimulai dengan halaman login. User
memasukkan username dan password yang telah terdaftar
sebelumnya. Jika user belum terdaftar, user mengklik link
signup dan menuliskan data pribadi user di form yang
disediakan. Setelah signup selesai, user diberikan kunci privat
yang harus disimpan oleh user untuk mendekripsi pesan yang
dikirimkan kepadanya.
Setelah user berhasil login, aplikasi menampilkan halaman
utama yang berisi sembilan menu utama yaitu encryption,
decryption, inbox, outbox, generate new key pair, change key,
help about, dan logout.
Jika user mengklik encryption, maka muncul halaman
encryption yang meminta User memasukkan jumlah file yang
akan dienkripsi. Jika user menekan next, tampil halaman input
file yang akan dienkripsi. Jika user menekan back aplikasi akan
kembali ke halaman input jumlah file. Jika user menekan next
akan tampil halaman cek file yang menginformasikan tentang
file yang akan dienkripsi. Jika user menekan next akan tampil
halaman input password. Setelah memasukkan password, Jika
user menekan next aplikasi akan melakukan enkripsi dan setelah
selesai, menampilkan informasi file hasil enkripsi. Pada semua
halaman enkripsi tersebut, Jika user menekan cancel aplikasi
akan kembali ke halaman utama.

103

Jika user mengklik decryption, maka muncul halaman


decryption yang meminta user

memilih file yang akan

didekripsi. User dapat memilih maksimal 10 file. Jika user


memilih lebih dari 10 file, maka file setelah 10 terbawah akan
diabaikan. Jika user menekan next akan tampil halaman cek file
yang menginformasikan tentang file yang akan didekripsi. Jika
user menekan next akan tampil halaman input private key.
Setelah memasukkan private key, Jika user menekan next
aplikasi

akan

melakukan

dekripsi

dan

setelah

selesai,

menampilkan informasi file hasil dekripsi. Pada semua halaman


dekripsi tersebut, Jika user menekan cancel aplikasi akan
kembali ke halaman utama. Pada halaman hasil dekripsi, user
harus menyimpan file yang telah didekripsi. Karena setelah user
menekan tombol finish, file akan segera dihapus.
Jika user menekan inbox, maka muncul halaman inbox
yang menampilkan file terenkripsi yang dikirimkan kepadanya.
User dapat langsung mendekripsi atau menghapus file yang ada
dalam inbox-nya. Jika user menekan tombol decrypt, akan
tampil halaman cek file yang menginformasikan sementara file
yang akan didekrip. Jika user menekan next, muncul halaman
input private key. Setelah itu, jika user menekan decrypt,
dekripsi akan diproses. Setelah selesai, informasi file hasil
dekripsi akan ditampilkan. Pada semua halaman inbox tersebut,
Jika user menekan cancel aplikasi akan kembali ke halaman

104

inbox. Pada halaman hasil dekripsi, user harus menyimpan file


yang telah didekripsi. Karena setelah user menekan tombol
finish, file akan segera dihapus. Jika user menekan delete, maka
tampil halaman konfirmasi file yang akan dihapus. User dapat
menekan yes untuk menghapus, atau no untuk membatalkan.
Jika user mengklik outbox, akan tampil halaman outbox
yang menampilkan semua file yang telah dikirimkan olehnya.
User dapat menghapus file tersebut. Jika user menekan delete,
maka tampil halaman konfirmasi file yang akan dihapus. User
dapat

menekan

yes

untuk

menghapus,

atau no

untuk

membatalkan.
Jika user mengklik generate new key, akan tampil
halaman yang membangkitkan pasangan kunci publik dan kunci
privat yang baru. User harus menyimpan kunci privat yang baru
tersebut. Tetapi jika user masih memiliki file di inbox, aplikasi
tidak akan membangkitkan pasangan kunci yang baru, tetapi
menampilkan link untuk menghapus semua file yang ada di
inbox. Jika menekan delete all files, tampil halaman konfirmasi
untuk menghapus semua file inbox. Jika menekan yes, akan
tampil halaman yang membangkitkan pasangan kunci publik
dan kunci privat yang baru. Jika menekan no, aplikasi akan
kembali ke menu utama.
Jika user mengklik change password, akan tampil
halaman yang menampilkan form untuk mengubah password

105

login. Setelah form diisi dan ditekan next, akan diberitahukan


bahwa perubahan berhasil. User harus login kembali setelah
mengubah passwordnya.
Jika user mengklik help, akan tampil halaman help yang
berisi deskripsi singkat aplikasi, teori singkat metode Advance
Encryption Standard dan Rivest Shamir Adleman, dan link help
yang detil yaitu encryption, decryption, inbox, outbox, generate
new key pair, dan change password. Jika user mengklik salah
satu link tersebut, maka tampil halaman penjelasan sesuai link
yang diklik. Pada semua halaman help tersebut, jika user
mengklik home, akan kembali ke menu utama.
Jika user mengklik about, maka tampil halaman deskripsi
singkat tentang pembuat aplikasi. Jika user mengklik home,
akan kembali ke menu utama.
Jika user mengklik logout, maka aplikasi akan menghapus
session dan menampilkan halaman login kembali.

4.6.

Fase Konstruksi
Pada fase ini, dilakukan pengkodean terhadap rancangan-rancangan
yang telah didefinisikan sebelumnya menggunakan bahasa pemrograman
PHP. Pengkodean aplikasi ini menggunakan software EditPlus untuk
mengedit source code program, dan adobe photoshop untuk mendesain
user interface. Aplikasi ini dibuat dengan memanfaatkan library dan
class yang sudah tersedia. Library yang digunakan adalah library

106

enkripsi Advance Encryption Standard (rijndael) yang terdapat pada


interpreter

PHP

yang

digunakan.

Pemanfaatan

library

tersebut

ditunjukkan pada potongan kode sumber berikut :


$td = mcrypt_module_open('rijndael-128', '', 'cbc', '');
$iv

mcrypt_create_iv

(mcrypt_enc_get_iv_size($td),

MCRYPT_RAND);
$ks = mcrypt_enc_get_key_size($td);
$key = $_SESSION[AESpass];
mcrypt_generic_init($td, $key, $iv);
$encrypted_data = mcrypt_generic($td, $initial_contents);

Sedangkan class yang digunakan untuk membangun aplikasi


adalah class enkripsi Rivest Shamir Adleman. Penggunaan kelas tersebut
ditunjukkan dengan potongan kode sumber berikut :
require_once("rsa .class");
$rsa = New SecurityRSA;
$encoded = $rsa ->rsa _encrypt($key, $e, $n);

Class Rivest Shamir Adleman dan kode sumber selengkapnya


dapat dilihat pada lampiran C.

4.7.

Fase Pelaksanaan (Implementasi)


Pengujian yang dilakukan terhadap aplikasi acrypt cs ini adalah
pengujian dengan metode blackbox. Pengujian dilakukan dengan
menjalankan semua fungsi dan fitur yang ada dari aplikasi ini dan
kemudian dilihat apakah hasil dari fungsi-fungsi tersebut sesuai dengan
107

yang diharapkan. Aplikasi dijalankan melalui suatu web browser di


komputer client dan user mencoba melakukan proses enkripsi dan dekripsi.

4.7.1.

Konfigurasi Client Server


Pada implementasi ini, penulis melakukan konfigurasi
server dan client di CV Maharta Mandiri Promo divisi
operasional dengan menggunakan jaringan LAN. Pada server
menggunakan software Xampp 1.6.6a sebagai web servernya.
Sedangkan client langsung menjalankan aplikasi di browser
masing-masing komputer. User dapat langsung menggunakan
aplikasi acrypt cs tanpa perlu menginstal aplikasi terlebih dahulu
asalkan memiliki browser pada komputernya.
Untuk memulai program dilakukan pada PC client, dengan
mengetikkan alamat URL berikut pada address bar browser :
http://192.168.10.2/acrypt cs/
Disarankan untuk menggunakan browser mozilla firefox
karena interface dan fungsi aplikasi akan menjadi lebih baik.

4.7.2.

Proses Enkripsi dan Dekripsi Multifile


Proses enkripsi dan dekripsi multifile pada program
acrypt cs ini dapat berjalan dengan baik. Dan memberikan
keamanan dalam pencegahan pembacaan file oleh pihak-pihak
yang tidak berhak. Untuk tampilan program selengkapnya dapat
dilihat pada lampiran B.

108

4.7.3.

Pengujian Aplikasi Acrypt cs


Setelah melakukan

proses setting

server

kemudian

dilakukan pengujian terhadap aplikasi acrypt cs, pengujian yang


penulis lakukan bertempat di divisi operasional CV Maharta
Mandiri Promo, pada tahap pengujian enkripsi dan dekripsi ini
dilakukan pada semua tipe file dengan ukuran file maksimal
1GB dan proses enkripsi/dekripsi maksimal 60 menit.
Apabila

telah

terenkripsi

akan

menjadi

file

yang

berekstensi (*.znc), dan jika didekripsi akan kembali menjadi


file asli yang berekstensi seperti file awal. Pengujian ini dapat
dilihat pada tampilan program di lampiran B.
1.

Pengujian enkripsi terhadap tipe file yang berbeda.


Pada tahap ini, penulis akan melihat apakah aplikasi dapat
melakukan enkripsi pada tipe file yang berbeda dan
apakah ukuran file akan berubah atau tidak. Tipe file yang
akan diuji adalah file yang berekstensi (*.mp3), (*.mp4),
(*.zip), (*.pdf), dan (*.avi).

Gambar 4.37. Informasi file sebelum dienkripsi

109

Gambar 4.38. Informasi file sesudah dienkripsi

Proses enkripsi berjalan lancar, semua tipe file bisa


dienkripsi tanpa ada kesalahan aplikasi. Semua file sudah
berubah ke dalam data yang tersandikan. Untuk lama
waktu yang digunakan tergantung pada besar kecilnya
ukuran file yang dienkripsi, semakin besar ukuran file
yang dienkripsi maka semakin lama prosesnya. Namun,
jika ukuran file yang dienkripsi kecil (<=100 MB), maka
prosesnya tidak memakan waktu lama. Waktu ditampilkan
dalam hitungan detik. Tabel 4.1 menunjukkan ukuran file
dan waktu enkripsi.
Tabel 4.1. Tabel ukuran dan waktu enkripsi
No.
1.

Nama F ile
N PEOPLE.mp3
ORDI ARY

Ukuran File Awal


4,381 KB

k
Ukuran File A hir
4,381 KB

Waktu Enkripsi
0.24933 seconds

2.

Newspaper 9.flv

20,905 KB

20,905 KB

3.11202 seconds

3.

Video. zip

5 0,133 KB

50,133 KB

3.82763 seconds

4.

CHIP 07 2005.pdf

63,525 KB

63,525 KB

5.65621 seconds

5.

c
The se ret.avi

14 3,179 KB

143,179 KB

9.39863 seconds

2.

Pengujian dekripsi terhadap tipe file yang berbeda


Pada tahap

ini akan dilihat apakah aplikasi dapat

melakukan dekripsi, y itu merubah file ke bentuk asli

110

pada masing-masing tipe file di atas. Dan melihat berapa


banyak ukuran file itu akan berubah dan berapa lama
waktu yang digunakan. Berikut

hasil dekripsi yang

meunjukkan semua file kembali ke ukuran awal dan dapat


berjalan seperti file asli.

Gambar 4.39. Informasi file sesudah didekripsi

Proses dekripsi berjalan lancar, semua tipe file bisa


didekripsi ke bentuk semula. Untuk lama waktu yang
digunakan tergantung pada besar kecilnya ukuran file
yang didekripsi. Tabel 4.2 menunjukkan ukuran file dan
waktu dekripsi.
Tabel 4.2. Tabel ukuran dan waktu dekripsi
No.
1.

Na amFile
R
O DINARY
PEOPLE.mp3

k
U uran
File
4,381 KB

Waktu Dekripsi
0.25167 seconds

2.

Newspaper 9.flv

20,905 KB

2.93739 seconds

3.

Video.zip

50,133 KB

6.36124 seconds

4.

CHIP 07 2005.pdf

63,525 KB

7.62527 seconds

5.

T eh secret.avi

143,179 KB

e
13.62425 s conds

111

BAB V
PENUTUP

5.1. Kesimpulan
Berdasarkan uraian bab-bab sebelumnya, maka dapat diambil
kesimpulan dari penulisan skripsi ini sebagai berikut :
1.

Aplikasi Acrypt cs tidak memerlukan proses instalasi aplikasi terlebih


dahulu, dan juga dapat dijalankan dari sistem operasi apapun karena
aplikasi Acrypt cs ini berbasis client server (web based).

2.

Aplikasi acrypt cs berhasil mengimplementasikan metode Advance


Encryption

Standard

dan

Rivest

Shamir

Adleman

dalam

mengamankan pesan. Hal ini dibuktikan melalui hasil pengujian pada


tabel 4.1 dan tabel 4.2, yang memperlihatkan bahwa semua pesan yg
dienkrip dapat berubah menjadi file berekstensi (*.znc) serta dapat
dikembalikan ke file aslinya dalam proses dekripsi dan tidak
mengalami perubahan, dengan tingkat keberhasilan 100%.
3.

Berdasarkan hasil pengujian, ukuran file yang semakin besar akan


mempengaruhi lama proses enkripsi dan dekripsi. Semakin besar
ukuran file akan semakin lama proses enkripsi dan dekripsinya. Hal
tersebut ditunjukkan pada tabel 4.1 dan tabel 4.2 di atas.

4.

Aplikasi acrypt cs dapat digunakan pada jaringan LAN.

112

5.2. Saran
Berdasarkan penelitian yang diperoleh, ada beberapa saran untuk
pengembangan sistem lebih lanjut, saran-saran tersebut yaitu:
1.

Aplikasi

acrypt

cs

berbasis

client

server

dapat

bervariasi

menggunakan bahasa pemprograman dan metode yang lain agar dapat


memberikan keamanan yang lebih baik sehingga dapat dikembangkan
untuk pengiriman file dari server ke client atau dari client ke client
lain.
2.

Aplikasi acrypt cs hanya dapat mengupload 10 file dan ukuran


maksimal

1GB,

untuk

proses

enkripsi,

diharapkan

dapat

dikembangkan sehingga dapat mengupload file lebih banyak dengan


ukuran lebih besar tanpa harus memperlambat proses enkripsi dan
dekripsi secara signifikan.

113

DAFTAR PUSTAKA

Ariyus, Dony. 2006. Kriptografi Keamanan Data dan Komunikasi. Yogyakarta :


Graha Ilmu.

Ariyus, Dony. 2008. PENGANTAR ILMU KRIPTOGRAFI Teori Analisis dan


Implementasi. Yogyakarta : Andi.

Burnett, Steve and Stephen Paine. 2004. RSA Securitys Official Guide to
CRYPTOGRAPHY. California : McGraw-Hill/Osborne.

Hartono, Jogiyanto. 1999. Pengenalan Komputer. Yogyakarta : Andi.

Kahate, Atul. 2003. CRYPTOGRAPHY AND NETWORK SECURITY. California :


McGraw-Hill.

Muliati, Sarlika.2008. Implementasi Digital Envelope Dengan Menggunakan


Metode Blowfish Dan Rivest Shamir Adleman Di Ppptmgb Lemigas.
Jakarta : UIN Syarif Hidayatullah.

Peranginangin, Kasiman. 2006. Aplikasi WEB dengan PHP dan MySQL.


Yogyakarta : Andi.

114

Kenneth E. Kendall., Jullie E. Kendall. 2003. Systems Analysis and Design. fifth
Edition. Dialihbahasakan oleh Thamir Abdul Hafed Al-Hamdany, B.Sc, M.Sc
dalam buku Analisa dan Perancangan Sistem Jilid 1. Jakarta : Prenhallindo.

Kristanto, Andri. 2003. Keamanan Data Pada Jaringan Komputer. Bandung :


Gaya Media.

Munir, Rinaldi. 2006. Kriptografi. Bandung : Informatika.

Nanang, Herlino. 2004. Web Programming. Jakarta : UIN Syarif Hidayatullah.

Pressman, Roger S. 2002. Rekayasa Perangkat Lunak Pendekatan Praktisi (Buku


Satu). Yogyakarta : Andi.

Stalling, William. 2003. Cryptography and Network Security Principles and


Practices Third Edition. New Jersey : Prentice Hall.

Wahana Komputer. 2003. Memahami Model Enkripsi & Security Data.


Yogyakarta : Andi

Wicaksono, Prasetyo Andy. 2006. Studi Pemakaian Algoritma RSA Dalam Proses
Enkripsi dan Aplikasinya. Bandung : Institut Teknologi Bandung
http://www.informatika.org/~rinaldi/Matdis/20062007/Makalah/Makalah0607-80.pdf (diakses 01 jan 2009 pkl 20:08 WIB).

115

LAMPIRAN A
HASIL WAWANCARA

Narasumber

: Andi Muhammad AR
(Dirut CV Maharta Mandiri Promo)

1.

Pewawancara

: Zaenal Muttaqin

Waktu

: 9 Juli 2009

T : Bagaimana pemahaman anda mengenai keamanan data atau kriptografi ?


J : Keamanan data merupakan hal yang sangat penting bagi setiap
perusahaan, karena apabila data-data penting perusahaan tidak memiliki
keamanan data yang baik, maka informasi yang dimiliki perusahaan akan
mudah dicuri oleh pihak yang tidak bertanggung jawab atau yang tidak
mempunyai hakuntuk informasi tersebut.

2.

T : Menurut anda perlukah data perusahaan anda untuk diamankan?


J : Ya, karena data perusahaan adalah identitas perusahaan, yang harus kita
jaga dengan benar jangan sampai data perusahaan tersebut dicuri oleh
pihak yang tidak bertanggung jawab.

3.

T : Pernahkah anda mendengar tentang aplikasi keamanan data berbasis


client server?
J : Pernah.

4.

T : Pedulikah Bapak terhadap keamanan data di CV ini ?


J : Ya. Apapun data yang dimiliki perusahaan harus diamankan dengan
sebaik mungkin, untuk mencegah hal-hal yang tidak diinginkan oleh
perusahaan dan dapat merugikan perusahaan.

116

5.

T : Pentingkah data di perusahaan ini untuk diamankan ?


J : Ya, penting.

6.

T : Jenis data apa yang biasanya dikirim via jaringan di CV ini ?


J : Biasanya semacam surat penawaran kepada perusahaan lain atau mitra
dari CV Maharta Mandiri Promo, order pemesanan barang, desain
produk, digital printing, tagihan pembayaran, laporan keuangan, proposal
tender, dan lain-lain.

7. T : Jika anda diperkenalkan dengan sebuah aplikasi keamanan data, apakah


anda akan menggunakannya ?
J : Tergantung sesuai dengan kebutuhan perusahaan dan menganalisa
terlebih dahulu. Jika setelah melakukan analisa aplikasi tersebut
memang sesuai dengan yang dibutuhkan oleh perusahaan maka kami
akan mengunakan aplikasi keamanan data tersebut.
8.

T : Apakah di CV ini pernah terjadi pencurian data oleh pihak yang tidak
berhak?
J : Pernah.

9.

T : Jika ada, apakah CV ini dirugikan dengan pencurian data tersebut?


J : Ya, tentu saja merugikan. Saat itu desain yang kami buat dicuri oleh orang
lain dan menyebabkan tender jatuh ke perusahaan lain yang mematok
harga lebih murah dengan desain yang sama.

117

LAMPIRAN B
TAMPILAN APLIKASI ACRYPT CS

B.1. Tampilan Aplikasi Acrypt cs


B.1.1. Halaman Login

118

B.1.2. Halaman Signup

B.1.3. Halaman Utama

119

B.1.4. Halaman Enkripsi

120

121

122

B.1.5. Halaman Dekripsi

B.1.6. Halaman Inbox

123

B.1.7. Halaman Outbox

B.1.8. Halaman My Key

124

B.1.9. Halaman Change Password

125

B.1.10. Halaman Help

126

127

B.1.11. Halaman About

128

B.2. Tampilan Pesan


B.2.1. Pesan Sign Up Complete

B.2.2. Pesan Kesalahan Input Data


B.2.2.1. Kesalahan Login :

B.2.2.2. Kesalahan Sign up :

B.2.2.3. Kesalahan Input file enkripsi :

129

B.2.2.3. Kesalahan Input password enkripsi :

B.2.3. Konfirmasi Penghapusan File

B.2.4. Konfirmasi Penghapusan Seluruh isi inbox

130

LAMPIRAN C
KODE SUMBER APLIKASI ACRYPT CS

decrypt.php
<?php
function decryptFile($id, $i)
{
$hasil = mysql_query("select cipher_name, aes_key, iv from file
where id_file = '$id'");
$row = mysql_fetch_row($hasil);
//decryption process
$private_key = $_SESSION[privateKey];
//RSA string decryption
//pecah private key jadi d,n
$bagi = explode(",",$private_key);$d = $bagi[0];$n = $bagi[1];
require_once("rsa.class");
$rsa = New SecurityRSA;
//$encoded = $rsa->rsa_encrypt($key, $e, $n);
$decoded = $rsa->rsa_decrypt($row[1], $d, $n);
//AES file decryption
$file = 'data/'.$row[0];
$initial_contents = file_get_contents($file);
if($initial_contents)
{//This function opens the module of the algorithm and the mode to
be used
$td = mcrypt_module_open('rijndael-128', '', 'cbc', '');
//Create an initialization vector (IV) from a random source
//$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td),
MCRYPT_RAND);
$iv = $row[2];
$ks = mcrypt_enc_get_key_size($td);
$key = $decoded;
//password yg telah didekripsi
//This function initializes all buffers needed for
decryption
mcrypt_generic_init($td, $key, $iv);
//This function decrypts data
$decrypted_data = mdecrypt_generic($td, $initial_contents);
$nama = substr($row[0],0,-4);
$out = strtr($nama,"_",".");
$output = 'temp/'.$out;
$newfile = @fopen($output,'w');
$ok_decrypt = @fwrite($newfile,$decrypted_data);
if($ok_decrypt)
{ $_SESSION[dec] = "decrypted successfully"; }
else
{ $_SESSION[dec] = "decryption failed";}
@fclose($newfile);
//This function deinitializes an encryption module
mcrypt_generic_deinit($td);
//Close the mcrypt module
mcrypt_module_close($td);
if ($i != "")
{$_SESSION[filed.$i] = $output;}
if($i == "")
$_SESSION[filed] = $output;}}?>

131

decryption.php
<?php
session_start();
include "otentik.php";
if(!otentikasi($_SESSION[username], $_SESSION[password]))
{ $alamat = "logout.php";header("Location: $alamat");exit(0);}
if (!login_check())
{ header("Location: logout.php"); exit(0);}
$title = "acrypt cs | decryption ";
include "header.php";
$page = "secure";
?>
<script language="JavaScript">
function cek_file() {
var a = document.getElementById('check[]').value;
if (a==false)
{ alert('please check your input..'); return false; }
else return true;}
function input_private() {
var a = document.getElementById('pass').value;
if (a=="")
{ alert('please check your private key..');return false;}
else return true; }
</script>
<?php
include "header2.php";
// DECRYPTION FROM INBOX
$code = $_POST['code'];
if(isset($code))
{
include "koneksi.php";
//kode 1 adl tampilan sementara file yg akan didekripsi
//kode 2 input private key
//kode 3 decrypt kunci + file
//session_register :
//file
privateKey filed
if(!isset($_SESSION[file]))
{session_register("file");$_SESSION[file] = $_POST['file'];}
$kode = $_POST['kode'];
if(!isset($kode)) $kode = "1";
if($kode=="1")
{print"<center><table class=warna1 $frame><tr><td
rowspan=3>&nbsp;</td><td align=center colspan=3><img src=
'img/decryption.png' width=300></td></tr><tr><td
colspan=3>";print"<table width=500 class=warna2 $frame><tr><td
rowspan=50>&nbsp;</td></tr>";
//tampilan file sementara
print"<tr><td colspan=3><b>this file will be decrypt
:</b></td></tr><tr><td>&nbsp;</td></tr>";$hasil =
mysql_query("select cipher_name, cipher_size, date from file where
id_file = '$_SESSION[file]'");$row = mysql_fetch_row($hasil);
print"<form name='formulir' action='decryption.php'
method='POST'>"; print"<input type='hidden' name='code'
value='unit'>";
print"<input type='hidden' name='kode'
value='2'>";print"<tr><td align=left>filename </td><td>: </td><td
align=left>$row[0]</td></tr>";
$filesize = $row[1];

132

if($filesize > 1000000)


{ $filesize = $filesize/1048576;$satuan = "MB";}
else if($filesize > 1000)
{ $filesize = $filesize/1024; $satuan = "KB";}
else{ $satuan = "B"; }
printf("<tr><td align=left>file size </td><td>: </td><td
align=left>%.3f %s &nbsp;</td></tr>",$filesize, $satuan);
$id_user = mysql_fetch_row(mysql_query("select id_user from
user where username = '$_SESSION[username]'"));
//ambil data dari tabel outbox(sender)..
$out = mysql_fetch_row(mysql_query("select id_user from
outbox where id_file = '$_SESSION[file]'"));
if ($out[0]==$id_user[0])
$sender = "you";
else
{
$has = mysql_fetch_row(mysql_query("select fullname from
user where id_user = '$out[0]'")); $sender = $has[0];}
print"<tr><td align=left>sender </td><td>: </td><td
align=left>$sender</td></tr>"; print"<tr><td align=left>date
</td><td>:</td><td align=left>$row[2]</td></tr>"; print"<tr>
<td>&nbsp;</td></tr>"; print"</td></tr></table></td></tr>";
print"<tr align=right><td><input name='submit' type='submit'
value='next'></td>";
print"</form>";
//cancel button
back to inbox
print"<form name='formulir2' action='inbox.php'
method='POST'>";
print"<input type='hidden' name='clear' value='y'>";
print"<td width=50><input name='submit' type='submit'
value='cancel'></td></tr>";print"</form>";print"</table></center><
br><br><br><br><br><br>";}
if($kode=="2")
{ print"<center><table class=warna1 $frame><tr><td
rowspan=3>&nbsp;</td><td align=center colspan=3><img src=
'img/decryption.png' width=300></td></tr><tr><td colspan=3>";
print"<table width=500 class=warna2 $frame><tr><td
rowspan=50>&nbsp;</td></tr>";
//input private key
if (!isset($_SESSION[privateKey]))
session_register("privateKey");
$_SESSION[privateKey] = "";
print"<tr><td>&nbsp;</td></tr>";print"<form name='formulir'
action='decryption.php' method='POST'>";print"<input type='hidden'
name='kode' value='3'>";print"<input type='hidden' name='code'
value='unit'>";print"<tr><td>Your private key : </td><td><input
name='pass' type='password' id='pass' size='50'></td></tr>";
print"<tr><td>&nbsp;</td></tr></td></tr></table></td></tr>";
print"<tr align=right><td><input name='submit' type='submit'
value='decrypt' onClick='return input_private()'>";
print"<input name='reset' type='reset' value='clear'></td>";
print"</form>";
//cancel button
back to inbox
print"<form name='formulir2' action='inbox.php' method='POST'>";
print"<input type='hidden' name='clear' value='y'>";
print"<td width=50><input name='submit' type='submit'
value='cancel'></td></tr>";print"</form>";
print"</table></center><br><br><br><br><br><br><br><br><br><br>";}
if($kode=="3")
{//put private key to session

133

$_SESSION[privateKey] = $_POST['pass'];
//private key kosong
if($_SESSION[privateKey]=="")
{
print"<center><table class=warna1 $frame><tr><td align=center
colspan=3><img src= 'img/decryption.png'
width=300></td></tr><tr><td colspan=3>";
print"<table width=500 class=warna2
$frame><tr><td>&nbsp;</td></tr>";
print"<tr><td align=center><b>please check your private
key..</b></td></tr><tr><td>&nbsp;</td></tr>";
print"</td></tr></table>";
print"</td></tr><form name='formulir' action='decryption.php'
method='POST'>";
print"<input type='hidden' name='title' value='decryption'>";
print"<input type='hidden' name='code' value='unit'>";
print"<input type='hidden' name='kode' value='2'>";
print"<tr><td width=50 align=center><input name='submit'
type='submit' value='back'></td></form>";
print"</tr></table><br><br><br><br><br><br><br><br><br><br><b
r><br>";
include "footer.php";exit(0);}
//private key invalid
$private_key = mysql_fetch_row(mysql_query("select private_key
from user where username = '$_SESSION[username]'"));
if($private_key[0] != $_SESSION[privateKey])
{
print"<center><table class=warna1 $frame><tr><td align=center
colspan=3><img src= 'img/decryption.png'
width=300></td></tr><tr><td colspan=3>";print"<table width=500
class=warna2 $frame><tr><td>&nbsp;</td></tr>";print"<tr><td
align=center><b>your private key is invalid..</b></td></tr>
<tr><td>&nbsp;</td></tr>";print"</td></tr></table>";print"</td></t
r><form name='formulir' action='decryption.php' method='POST'>";
print"<input type='hidden' name='title' value='decryption'>";
print"<input type='hidden' name='code' value='unit'>";
print"<input type='hidden' name='kode' value='2'>";
print"<tr><td width=50 align=center><input name='submit'
type='submit' value='back'></td></form>";
print"</tr></table><br><br><br><br><br><br><br><br><br><br><br><br
>";
include "footer.php";
exit(0); }
print"<center><table class=warna1 $frame><tr><td
rowspan=3>&nbsp;</td><td align=center colspan=3><img src=
'img/decryption.png' width=300></td></tr><tr><td colspan=3>";
print"<table width=500 class=warna2 $frame><tr><td
rowspan=50>&nbsp;</td></tr>";
//decryption process
print"<tr><td colspan=3 align=center><font size='4px'
color='#0066ff'>decryption complete..</td></tr>";
print"<tr><td colspan=3 align=center>to download the file click on
the filename. we have to delete the file after you click
<b>finish</b>..</font></td></tr>";print"<tr><td>&nbsp;</td></tr>";
include "decrypt.php";include "microtime.php";
session_register("filed");$i = "";$_SESSION[dec]="";
$time_a = getmicrotime();//print"<br>SESSION[file] :
$_SESSION[file]<br>";decryptFile($_SESSION[file], $i);
//update table that the file was decrypted
$sql = "update inbox set decrypted='y' where
id_file='$_SESSION[file]'";
$hasil = mysql_query($sql,$connect);

134

$time_b = getmicrotime();
$time = $time_b - $time_a;
$filesize = filesize($_SESSION[filed]);
$nama = substr($_SESSION[filed],5);
if($filesize > 1048576)
{
$filesize = $filesize/1048576; $satuan = "MBytes";}
else if($filesize > 1024)
{
$filesize = $filesize/1024; $satuan = "KBytes"; }
else
{
$satuan = "Bytes"; }
//print hasil dekripsi
$link = "<a href='".$_SESSION[filed]."' target='_blank'>";
print"<tr><td width=100 align=left>file name </td><td>: </td><td
align=left> ".$link.$nama."</a></td></tr>";
printf("<tr><td align=left>file size </td><td>: </td><td
align=left>%.3f %s</td></tr>",$filesize, $satuan);
print"<tr><td align=left>status </td><td>: </td><td
align=left>".$_SESSION[dec]."</td></tr>";
printf("<tr><td align=left>process time </td><td>: </td><td
align=left>%.5f seconds</td></tr>",$time);
print"<tr><td>&nbsp;</td></tr>";
print"<tr><td>&nbsp;</td></tr></td></tr></table></td></tr>";
//cancel button
back to inbox
print"<form name='formulir2' action='inbox.php' method='POST'>";
print"<input type='hidden' name='hapus' value='y'>";
print"<td align=right><input name='submit' type='submit'
value='finish'></td></tr>";print"</form>";
print"</table></center><br><br>";}
//close if($kode=3)
}
//close if(isset($code))
/**ordinary decryption**/
else
{
$level = $_POST[level];
if(!isset($level)) $level = "1";
//level 1 select file to dekrip with checkbox
//level 2 temporary show file to decrypt
//level 3 input private key
//level 4 decrypt
if($level == "1")
{
//select file to decrypt max 10!!!!!
//prepare session variable
//
jml file
file1 - file10
//
privateKey
filed1 - filed10
session_register("jmlfile"); session_register("privateKey");
session_register("file1");
session_register("file2");
session_register("file3");
session_register("file4");
session_register("file5");
session_register("file6");
session_register("file7");
session_register("file8");
session_register("file9");
session_register("file10");
//set to null
$_SESSION[jmlfile] = "";
$_SESSION[privateKey] = "";
$_SESSION[file1] = "";
$_SESSION[file2] = "";
$_SESSION[file3] = "";
$_SESSION[file4] = "";
$_SESSION[file5] = "";
$_SESSION[file6] = "";
$_SESSION[file7] = "";
$_SESSION[file8] = "";
$_SESSION[file9] = "";
$_SESSION[file10] = "";
//show file in inbox n select file to decrypt..
include"koneksi.php";
// take from database....

135

$id_user = mysql_fetch_row(mysql_query("select id_user from user


where username = '$_SESSION[username]'"));
//ambil data dari tabel inbox
$inbox = mysql_query("select id_inbox, id_file, decrypted from
inbox where id_user = '$id_user[0]' order by id_inbox desc ");?>
<center><table class=warna6 <?php print $frame; ?> ><tr><td
colspan=2 align=center><img src= 'img/decryption.png'
width=300></td></tr><tr><td colspan=2 align=center>select file you
want to decrypt (10 files maximum, if the limit exceeded, the file
will ignored..) :</td></tr><tr><td colspan=2><table width=900
class=warna1 <?php print $frame; ?> ><th>no.</th> <th>file
name</th> <th>file size (bytes)</th> <th>sender</th> <th>date</th>
<th>select</th><tr><td>&nbsp;</td></tr><?php
$jumlah = mysql_num_rows($inbox);
if(!empty($jumlah))
{print"<form name='formulir' action='decryption.php'
method='POST'>";
print"<input type='hidden' name='level' value='2'>";$i = 1;
while($in = mysql_fetch_row($inbox))
{//ambil data dari tabel file..
$hasil = mysql_query("select id_file, cipher_name, cipher_size,
date from file where id_file = '$in[1]'");
$row = mysql_fetch_row($hasil);
if($i%2==0) $w = "warna4";
else $w = "warna3";
print"<tr class=$w><td align=center>$i</td>";
if($in[2] == "n")
$nama_file = "<font color='#0033FF'>$row[1]</font>";
else if($in[2] == "y")$nama_file = $row[1];
print"<td align=left>&nbsp; $nama_file</td>";$filesize = $row[2];
if($filesize > 1000000)
{$filesize = $filesize/1048576;$satuan = "MB";}
else if($filesize > 1000)
{$filesize = $filesize/1024;$satuan = "KB";}
else {$satuan = "B";}
printf("<td width=100 align=right>%.3f %s &nbsp;</td>",$filesize,
$satuan);
//ambil data dari tabel outbox(sender)..
$out = mysql_fetch_row(mysql_query("select id_user from outbox
where id_file = '$in[1]'"));
if ($out[0]==$id_user[0])
$sender = "you";
else
{$has = mysql_fetch_row(mysql_query("select fullname from user
where id_user = '$out[0]'")); $sender = $has[0];}
print"<td width=110>&nbsp; $sender</td>";print"<td
width=200>&nbsp; $row[3]</td>";print"<td width=50
align=center><input type='checkbox' name='check[]' id='check[]'
value='$row[0]' $cek></td></tr>";
$sql = "update inbox set new='n' where id_file='$in[1]'";
$hasil = mysql_query($sql,$connect);print"</td></tr>";$i++; }}
else
{print"<tr class=$w><td align=center colspan=6>there is no file in
your inbox..</td></tr>";}print"</table></td></tr>";
print"<tr><td align=right><input type='submit' name='submit'
value='next'></td>";print"</form>";
//cancel button
back to home
print"<form name='formulir2' action='index.php' method='POST'>";
print"<td width=50><input name='submit' type='submit'
value='cancel'></td></tr>";print"</form>";print"</table>";

136

print"</center>";if ($jumlah <= 0)$jbr = 10;else if($jumlah == 1)


$jbr = 9;else if($jumlah == 2)$jbr = 8;else if($jumlah == 3)
$jbr = 6;else if($jumlah == 4)$jbr = 5;else if($jumlah == 5)
$jbr = 4;else if($jumlah == 6)$jbr = 2;else if($jumlah == 7)
$jbr = 1;else if($jumlah >= 8)$jbr = 0;for ($br=0 ; $br<=$jbr ;
$br++)print"<br>";}
if($level == "2")
{//$check is an array content selected checkbox, and will sequence
from index 0, not depending on where checkbox selected..
$check = $_POST[check];
//input var to session, count from selected checkbox
$jumlah = count($check);
if($jumlah <= 0)
{print"<center><table class=warna1 $frame><tr><td align=center
colspan=3><img src= 'img/decryption.png' width=300></td>
</tr><tr><td colspan=3>";print"<table width=500 class=warna2
$frame><tr><td>&nbsp;</td></tr>";print"<tr><td align=center>
<b>please check one file or more to decrypt..</b></td></tr>
<tr><td>&nbsp;</td></tr>";print"</td></tr></table>";
print"</td></tr><form name='formulir' action='decryption.php'>";
print"<input type='hidden' name='title' value='decryption'>";
print"<tr><td align=center><input name='submit' type='submit'
value='back'></td></form>";print"</tr></table><br><br><br><br><br>
<br><br><br><br><br><br><br>";include "footer.php";exit(0); }
else if($jumlah > 10)
//make sure that only 10 first file will be decrypt..
$_SESSION[jmlfile] = 10;
Else $_SESSION[jmlfile] = $jumlah;
$j = 1;
for($i=0 ; $i<$_SESSION[jmlfile] ; $i++)
//looping as many checkbox selected in previous form..
{//input to $_SESSION[file.$j];
$_SESSION[file.$j] = $check[$i];
$j++; }
//temp show the file
print"<center><table class=warna1 $frame><tr><td
rowspan=3>&nbsp;</td><td align=center colspan=3><img src=
'img/decryption.png' width=300></td></tr><tr><td colspan=3>";
print"<table width=500 class=warna2 $frame><tr><td
rowspan=100>&nbsp;</td></tr>";print"<tr><td colspan=3><b>these
file(s) will be decrypt :</b></td></tr><tr><td>&nbsp;</td></tr>";
for($i=1 ; $i<=$_SESSION[jmlfile] ; $i++)
{$id_file = $_SESSION[file.$i];
//make query to get filename n filesize of the file with id
($_SESSION[file.$i])
$hasil = mysql_query("select cipher_name, cipher_size, date from
file where id_file = '$id_file'");
$row = mysql_fetch_row($hasil);
print"<tr class=$w><td align=left><b>file ".$i."</b></td></tr>";
print"<tr><td align=left>file name </td><td>: </td><td
align=left>$row[0]</td></tr>";
$filesize = $row[1];
if($filesize > 1048576)
{$filesize = $filesize/1048576; $satuan = "MBytes";}
else if($filesize > 1024)
{$filesize = $filesize/1024;$satuan = "KBytes"; }
else {$satuan = "Bytes";}
printf("<tr><td align=left>file size </td><td>: </td><td
align=left> %.3f %s</td></tr>",$filesize, $satuan);
//ambil data dari tabel outbox(sender)..

137

$out = mysql_fetch_row(mysql_query("select id_user from outbox


where id_file = '$id_file'"));
if ($out[0]==$id_user[0]) $sender = "you";
else
{$has = mysql_fetch_row(mysql_query("select fullname from user
where id_user = '$out[0]'")); $sender = $has[0];}
print"<tr><td align=left>sender </td><td>: </td><td
align=left>$sender</td></tr>";print"<tr><td align=left>date
</td><td>: </td><td align=left>$row[2]</td></tr>";
print"<tr><td>&nbsp;</td></tr>";}
//close for
print"</td></tr></table></td></tr>";print"<form name='formulir2'
action='decryption.php' method='POST'>";print"<input type='hidden'
name='level' id='level' value='3'>";print"<tr align=right>
<td><input name='submit' type='submit' value='next'></td>";
print"</form>";//cancel button
back to decrypt level=1
print"<form name='formulir2' action='index.php' method='POST'>";
print"<td width=50><input name='submit' type='submit'
value='cancel' ></td></tr>";print"</form>";print"</table>";
if ($jumlah == 1) $jbr = 3;else if($jumlah >= 2)$jbr = 0;
for ($br=0 ; $br<=$jbr ; $br++) print"<br>";}
if($level == "3")
{//input private key
if (!isset($_SESSION[privateKey]))
session_register("privateKey");
$_SESSION[privateKey] = "";
print"<center><table class=warna1 $frame><tr><td
rowspan=3>&nbsp;</td><td align=center colspan=3><img src=
'img/decryption.png' width=300></td></tr><tr><td colspan=3>";
print"<table width=500 class=warna2 $frame><tr><td
rowspan=50>&nbsp;</td></tr>";print"<tr><td>&nbsp;</td></tr>";
print"<form name='formulir' action='decryption.php'
method='POST'>";print"<input type='hidden' name='level'
value='4'>";print"<tr><td>Your private key : </td><td><input
name='pass' type='password' id='pass' size='50'></td></tr>";
print"<tr><td>&nbsp;</td></tr></td></tr></table></td></tr>";
print"<tr align=right><td><input name='submit' type='submit'
value='decrypt' onClick='return input_private()'>";
print"<input name='reset' type='reset' value='clear'></td>";
print"</form>";//cancel button
back to decrypt level=1
print"<form name='formulir2' action='index.php' method='POST'>";
print"<td width=50><input name='submit' type='submit'
value='cancel'></td></tr>";print"</form>";
print"</table></center>";
print"<br><br><br><br><br><br><br><br><br><br>";}
if($level == "4")
{//put private key to session
$_SESSION[privateKey] = $_POST[pass];
if($_SESSION[privateKey]=="")
{print"<center><table class=warna1 $frame><tr><td align=center
colspan=3><img src= 'img/decryption.png'
width=300></td></tr><tr><td colspan=3>";
print"<table width=500 class=warna2
$frame><tr><td>&nbsp;</td></tr>";print"<tr><td
align=center><b>please check your private
key..</b></td></tr><tr><td>&nbsp;</td></tr>";print"</td></tr></tab
le>";print"</td></tr><form name='formulir' action='decryption.php'
method='POST'>";print"<input type='hidden' name='title'
value='decryption'>";
print"<input type='hidden' name='level' value='3'>";

138

print"<tr><td align=center><input name='submit' type='submit'


value='back'></td></form>";
print"</tr></table><br><br><br><br><br><br><br><br><br><br><br><br
>"; include "footer.php";exit(0);}
//private key invalid
$private_key = mysql_fetch_row(mysql_query("select private_key
from user where username = '$_SESSION[username]'"));
if($private_key[0] != $_SESSION[privateKey])
{
print"<center><table class=warna1 $frame><tr><td align=center
colspan=3><img src= 'img/decryption.png' width=300></td></tr>
<tr><td colspan=3>";print"<table width=500 class=warna2
$frame><tr><td>&nbsp;</td></tr>";print"<tr><td align=center>
<b>your private key is invalid..</b></td></tr><tr><td>&nbsp;</td>
</tr>";print"</td></tr></table>";print"</td></tr><form
name='formulir' action='decryption.php' method='POST'>";
print"<input type='hidden' name='title' value='decryption'>";
print"<input type='hidden' name='level' value='3'>";
print"<tr><td align=center><input name='submit' type='submit'
value='back'></td></form>";print"</tr></table><br><br><br><br><br>
<br><br><br><br><br><br><br>";include "footer.php";exit(0); }
print"<center><table class=warna1 $frame><tr><td
rowspan=3>&nbsp;</td><td align=center colspan=3><img src=
'img/decryption.png' width=300></td></tr><tr><td colspan=3>";
print"<table width=500 class=warna2 $frame><tr><td
rowspan=50>&nbsp;</td></tr>";
//decryption process
include "decrypt.php"; include "microtime.php";
session_register("dec");
print"<tr><td colspan=3 align=center><font size='4px'
color='#0066ff'>decryption complete..</td></tr>";
print"<tr><td colspan=3 align=center>to download the file click on
the filename. we have to delete the file after you click
<b>finish</b>..</font></td></tr>";
print"<tr><td>&nbsp;</td></tr>";
for($i=1 ; $i<=$_SESSION[jmlfile] ; $i++)
{session_register("filed$i"); $_SESSION[dec]="";
$time_a = getmicrotime();decryptFile($_SESSION[file.$i], $i);
//update table that the file was decrypted
$sql = "update inbox set decrypted='y' where
id_file='".$_SESSION[file.$i]."'";
$hasil = mysql_query($sql,$connect);
$time_b = getmicrotime();$time = $time_b - $time_a;
$filesize = filesize($_SESSION[filed.$i]);
$nama = substr($_SESSION[filed.$i],5);
if($filesize > 1048576)
{$filesize = $filesize/1048576;$satuan = "MBytes";}
else if($filesize > 1024)
{$filesize = $filesize/1024;$satuan = "KBytes";}
else {$satuan = "Bytes";}
//print hasil dekripsi
$link = "<a href='".$_SESSION[filed.$i]."' target='_blank'>";
print"<tr><td width=100 align=left>file ".$i."</td></tr>";
print"<tr><td align=left>file name </td><td>: </td><td align=left>
".$link.$nama."</a></td></tr>";printf("<tr><td align=left>file
size </td><td>: </td><td align=left>%.3f %s</td></tr>",$filesize,
$satuan);print"<tr><td align=left>status </td><td>: </td><td
align=left>".$_SESSION[dec]."</td></tr>"; printf("<tr><td
align=left>process time </td><td>: </td><td align=left>%.5f
seconds</td></tr>",$time);print"<tr><td>&nbsp;</td></tr>";}

139

print"<tr><td>&nbsp;</td></tr></td></tr></table></td></tr>";
//finish button
back to decryption
print"<form name='formulir2' action='index.php' method='POST'>";
print"<input type='hidden' name='hapus1' value='y'>";
print"<td colspan=3 align=right><input name='submit' type='submit'
value='finish'></td></tr>";print"</form>";print"</table></center>"
;print"<br>";}}
include "footer.php";?>

encrypt.php
<?php
function encryptFile($kiriman)
{
include"koneksi.php";
$file = 'temp/'.$kiriman;
//buat filename baru
$nama = strtr($kiriman,".","_"); $out = $nama.".znc";
$output = 'data/'.$out; $_SESSION[filed] = $output;
$initial_contents = file_get_contents($file);
if($initial_contents)
{//RIJNDAEL ENCRYPTION..
//This function opens the module of the algorithm and the mode to
be used
$td = mcrypt_module_open('rijndael-128', '', 'cbc', '');
//Create an initialization vector (IV) from a random source
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
$ks = mcrypt_enc_get_key_size($td);
$key = $_SESSION[AESpass];
//This function initializes all buffers needed for encryption
mcrypt_generic_init($td, $key, $iv);
//This function encrypts data
$encrypted_data = mcrypt_generic($td, $initial_contents);
$encrypted_file = @fopen($output,'w');
$ok_encrypt = @fwrite($encrypted_file,$encrypted_data);
if($ok_encrypt)
{$_SESSION[enc] = "encrypted successfully";}
else
{$_SESSION[enc] = "encryption failed";}
@fclose($encrypted_file);
//This function deinitializes an encryption module
mcrypt_generic_deinit($td);
//Close the mcrypt module
mcrypt_module_close($td);
//RSA ENCRYPTION
//ambil public key receiver
$hasil = mysql_query("select public_key from user where id_user =
'$_SESSION[receiver]'");
$public_key = mysql_fetch_row($hasil);
$bagi = explode(",",$public_key[0]);
$e = $bagi[0];$n = $bagi[1];require_once("rsa.class");
$rsa = New SecurityRSA;$encoded = $rsa->RSA_encrypt($key, $e, $n);
$receiver = $_SESSION[receiver];
$sender_id = mysql_fetch_row(mysql_query("select id_user from user
where username = '$_SESSION[username]'"));
$sender = $sender_id[0];

140

//get filesize (plain n cipher)


$plain_size = filesize($file);
$cipher_size = filesize($output);
$date = date("d F Y H:i:s");
//INSERT TO DATABASE
//insert to file
$id_max = mysql_fetch_row(mysql_query("select max(id_file) from
file")); $id_file = $id_max[0] + 1; $sql = "insert into file
(id_file, plain_name, plain_size, cipher_name, cipher_size,
aes_key, iv, date) values ('$id_file', '$kiriman', '$plain_size',
'$out', '$cipher_size', '$encoded', '$iv', '$date')";
$hasil = mysql_query($sql,$connect);
//insert to inbox
$id_max = mysql_fetch_row(mysql_query("select max(id_inbox) from
inbox")); $id_inbox = $id_max[0] + 1; $sql = "insert into inbox
(id_inbox, id_file, id_user) values ('$id_inbox', '$id_file',
'$receiver')"; $hasil2 = mysql_query($sql,$connect);
//insert to outbox
$id_max = mysql_fetch_row(mysql_query("select max(id_outbox) from
outbox")); $id_outbox = $id_max[0] + 1; $sql = "insert into outbox
(id_outbox, id_file, id_user) values ('$id_outbox', '$id_file',
'$sender')"; $hasil3 = mysql_query($sql,$connect);
mysql_close($connect);
if($hasil) {$_SESSION[saved] = "saved";}
else {$_SESSION[saved] = "unsaved";}
}
//close initial contents
}?>

encryption.php
<?php session_start(); include "otentik.php";
if(!otentikasi($_SESSION[username], $_SESSION[password]))
{$alamat = "logout.php"; header("Location: $alamat"); exit(0);}
if (!login_check())
{header("Location: logout.php");exit(0);}
$title = "acrypt cs | encryption ";include "header.php";
$page = "secure";?>
<script language="JavaScript">
function input_file() {
var a = document.getElementById('userfile[]').value;
if (a=="")
{alert('please check your file input..'); return false;}
else
return true;
}
function cek_pass() {
var a = document.getElementById('pass').value;
if (a==""){alert('please check your password..'); return false;}
else return true;}
function cek_receiver() {
var a = document.getElementById('receiver').value;
if (a==""){alert('please select one receiver..');return false;}
else return true;}
</script>
<?php
include "header2.php";
//kode 1 how many file to enkrip?
//kode 2 input file

141

//kode 3 tampilan sementara file yg akan dienkripsi


//kode 4 input password AES
//kode 5 pilih receiver
//kode 6 encrypt
$kode = $_POST['kode'];
if(!isset($kode)) $kode = "1";
if($kode=="1")
{//siapkan variabel2 yg diperlukan utk menyimpan data di session..
//
jml file
file1 - file10// AESpass
receiver
session_register("jmlfile"); session_register("AESpass");
session_register("receiver"); session_register("file1");
session_register("file2");
session_register("file3");
session_register("file4");
session_register("file5");
session_register("file6");
session_register("file7");
session_register("file8");
session_register("file9");
session_register("file10");
session_register("status1");
session_register("status2");
session_register("status3");
session_register("status4");
session_register("status5");
session_register("status6");
session_register("status7");
session_register("status8");
session_register("status9");
session_register("status10");
$_SESSION[jmlfile] = "";
$_SESSION[AESpass] = "";
$_SESSION[receiver] = "";
$_SESSION[file1] = "";
$_SESSION[file2] = "";
$_SESSION[file3] = "";
$_SESSION[file4] = "";
$_SESSION[file5] = "";
$_SESSION[file6] = "";
$_SESSION[file7] = "";
$_SESSION[file8] = "";
$_SESSION[file9] = "";
$_SESSION[file10] = "";
$_SESSION[status1] = "";
$_SESSION[status2] = "";
$_SESSION[status3] = "";
$_SESSION[status4] = "";
$_SESSION[status5] = "";
$_SESSION[status6] = "";
$_SESSION[status7] = "";
$_SESSION[status8] = "";
$_SESSION[status9] = "";
$_SESSION[status10] = "";
//input jumlah file?>
<center><table class=warna1 <?php print $frame; ?> >
<tr><td align=center><img src= 'img/encryption.png'
width=300></td></tr><tr><td>
<table width=400 class=warna2 <?php print $frame; ?> >
<tr><td>&nbsp;</td></tr><tr class=$w><!-- content -->
<form name='formulir' action='encryption.php' method='POST'>
<input type='hidden' name='kode' value='2'>
<input type='hidden' name='title' value='encryption'>
<td align=right width=200>number of file :
<select name='jml'><?php
for($i=1;$i<=10;$i++) print"<option value=$i>$i</option>";?>
</select></td><td align=center width=50>
<?php if(preg_match("/MSIE/i","$agent")) print"<br>"; ?>
<input name='submit' type='submit' value='next''></form></td>
<form name='formulir2' action='index.php' method='POST'>
<td align=left><input name='submit' type='submit' value='cancel'
onClick='return cek_form()'></td></form></tr><tr><td>&nbsp;</td>
</tr></table></td></tr></table><br><br><br><br><br><br><br><br><br
><br><br><br><?php}//close kode=1
if($kode=="2")
{//delete file back button from kode=2
$hapus = $_POST[hapus];
if($hapus=='y')
{
for($i=1 ; $i <= $_SESSION[jmlfile] ; $i++)
{ if($_SESSION[file.$i] != "")

142

unlink("temp/".$_SESSION[file.$i]);}}
//masukkan jml file ke session
if($_SESSION[jmlfile]=="") $_SESSION[jmlfile] = $_POST['jml'];
//input file
print"<center><table class=warna1 $frame><tr><td colspan=3
align=center><img src= 'img/encryption.png' width=300></td></tr>";
print"<tr><td colspan=3>";print"<table class=warna2 $frame>";
print"<tr><td rowspan=20>&nbsp;</td><td></td><td></td><td>
</td></tr>";print"<form name='formulir1' action='encryption.php'
method='POST' enctype='multipart/form-data'>";
print"<input type='hidden' name='max_file_size'
value='8589934592'>";
//1 GB = 1024 MB * 1024 KB * 1024 B * 8 b
print"<input type='hidden' name='kode' value='3'>";
print"<input type='hidden' name='title' value='encryption'>";
for($i=0 ; $i<$_SESSION[jmlfile] ; $i++)
{
$j = $i+1;
print"<tr><td>File $j </td><td> : </td><td colspan=2><input
name='userfile[]' id='userfile[]' type='file'
size=80/></td></tr>";
}
print"<tr><td>&nbsp;</td></tr>";print"<tr><td></td></tr></table>";
print"<tr><td></td></tr>";print"<tr><td align=right><input
name='submit' type='submit' value='next' onClick='return
input_file()'>";print"<input name='reset' type='reset'
value='clear'></td>";print"</form>";print"<form name='formulir2'
action='encryption.php'>";print"<td width=50 align=right><input
name='submit' type='submit' value='back'></td></form>";print"<form
name='formulir2' action='index.php' method='POST'>";print"<td
width=50 align=left><input name='submit' type='submit'
value='cancel'></td></tr></form>";print"<tr><td></td></tr>";
print"</td></tr></table>";$jumlah = $_SESSION[jmlfile];
if ($jumlah == 1) $jbr = 9; else if($jumlah == 2)$jbr = 8;
else if($jumlah == 3) $jbr = 7; else if($jumlah == 4) $jbr = 5;
else if($jumlah == 5) $jbr = 3; else if($jumlah == 6) $jbr = 2;
else if($jumlah >= 7) $jbr = 0;
for ($br=0 ; $br<=$jbr ; $br++)print"<br>";}
if($kode=="3")
{//mencegah semua file kosong dan menghitung berapa file yg
terisi..
$jum_isi = 0; $jum_kosong = 0;
for($i=0 ; $i<$_SESSION[jmlfile] ; $i++)
{ if(empty($_FILES['userfile']['name'][$i]))
$jum_kosong += 1; else $jum_isi += 1;}
if($jum_kosong == $_SESSION[jmlfile])
{print"<center><table class=warna1 $frame><tr><td align=center
colspan=3><img src= 'img/decryption.png' width=300></td></tr><tr>
<td colspan=3>";print"<table width=500 class=warna2
$frame><tr><td>&nbsp;</td></tr>"; print"<tr><td
align=center><b>please check your file input..</b></td></tr>
<tr><td>&nbsp;</td></tr>";print"</td></tr></table>";
print"</td></tr><form name='formulir' action='encryption.php'
method='POST'>"; print"<input type='hidden' name='title'
value='encryption'>";print"<input type='hidden' name='kode'
value='2'>";print"<tr><td width=50 align=center><input
name='submit' type='submit' value='back'></td></form>";print"
</tr></table><br><br><br><br><br><br><br><br><br><br><br><br>";
include "footer.php";exit(0);}else $_SESSION[jmlfile] = $jum_isi;

143

print"<center><table class=warna1 $frame><tr><td rowspan=3>


&nbsp;</td><td align=center colspan=3><img src=
'img/encryption.png' width=300></td></tr><tr><td colspan=3>";
print"<table width=600 class=warna2 $frame><tr><td
rowspan=50>&nbsp;</td></tr>";
//copy file ke directory sementara (temp/)
for($i=0 ; $i<$_SESSION[jmlfile] ; $i++)
{if($_FILES['userfile']['size'][$i] > 0)
{$save_dir = "temp";
//move file ke dir tujuan
if(!@move_uploaded_file($_FILES['userfile']['tmp_name'][$i],"$save
_dir/".$_FILES['userfile']['name'][$i]))
print"<h4><font color='#0055FF'>upload failed
".$_FILES['userfile']['name'][$i] ." ke $save_dir</font></h4>";
else //upload success
{//save in dir temp/
@chmod("$save_dir/".$_FILES['userfile']['name'][$i],0755);
//put in session
$j = $i + 1;
$_SESSION[file.$j] = $_FILES['userfile']['name'][$i];
//show temporary
$file = $_SESSION[file.$j];
$link_file = "<a href = 'temp/$file' target='_blank'>";
$filesize = $_FILES['userfile']['size'][$i];
if($filesize > 1048576)
{$filesize = $filesize/1048576;$satuan = "MBytes";}
else if($filesize > 1024)
{$filesize = $filesize/1024; $satuan = "KBytes";}
else { $satuan = "Bytes";}
//mencegah file sudah terenkripsi sebelumnya..
$cari = mysql_query("select id_file from file where plain_name =
'".$_SESSION[file.$j]."'");
$ada = mysql_num_rows($cari);
if($ada > 0)
$_SESSION[status.$j] = "<font color=#FF0000>already encrypted
(this file will ignored)</font>";
else
$_SESSION[status.$j] = "ok";
print"<tr class=$w><td align=left><b>file ".$j."</b></td></tr>";
print"<tr><td align=left>file name </td><td>: </td><td
align=left>".$link_file.$_SESSION[file.$j]."</a></td></tr>";
print"<tr><td align=left>file type </td><td>: </td><td
align=left>".$_FILES['userfile']['type'][$i]."</td></tr>";
printf("<tr><td align=left>file size </td><td>: </td><td
align=left>%.3f %s</td></tr>",$filesize, $satuan);
print"<tr><td align=left>status </td><td>: </td><td
align=left>".$_SESSION[status.$j]."</td></tr>";
print"<tr><td>&nbsp;</td></tr>";
}
//close if(!@move..
}
//close $_FILES
}
//close for
print"</td></tr></table></td></tr>";
print"<form name='formulir2' action='encryption.php'
method='POST'>";print"<input type='hidden' name='kode' id='kode'
value='4'>";print"<input type='hidden' name='title'
value='encryption'>";print"<tr align=right><td><input
name='submit' type='submit' value='next'></td>";print"</form>";
//back n cancel button
delete file temporary in temp/

144

print"<form name='formulir2' action='encryption.php'


method='POST'>";print"<input type='hidden' name='hapus' id='hapus'
value='y'>";print"<input type='hidden' name='kode' id='kode'
value='2'>";print"<td width=50><input name='submit' type='submit'
value='back' ></td></form>";print"<form name='formulir2'
action='index.php' method='POST'>";print"<input type='hidden'
name='hapus' id='hapus' value='y'>";print"<td width=50><input
name='submit' type='submit' value='cancel' ></td></tr></form>";
print"</form>";print"</table>";$jumlah = $_SESSION[jmlfile];
if ($jumlah == 1)$jbr = 7;else if($jumlah >= 2)$jbr = 0;
for ($br=0 ; $br<=$jbr ; $br++)print"<br>";}
if($kode=="4")
{//mencegah semua file telah terenkripsi
$sudah = 0;
for($i=0 ; $i<$_SESSION[jmlfile] ; $i++)
{$j = $i + 1; if($_SESSION[status.$j] != "ok") $sudah += 1;}
if($sudah == $_SESSION[jmlfile])
{print"<center><table class=warna1 $frame><tr><td align=center
colspan=3><img src= 'img/decryption.png' width=300></td>
</tr><tr><td colspan=3>";print"<table width=500 class=warna2
$frame><tr><td>&nbsp;</td></tr>";print"<tr><td
align=center><b>sorry, all files is already encrypted..</b></td>
</tr><tr><td>&nbsp;</td></tr>"; print"</td></tr></table>";
print"</td></tr><form name='formulir' action='encryption.php'
method='POST'>";print"<input type='hidden' name='title'
value='encryption'>";print"<input type='hidden' name='kode'
value='2'>";print"<tr><td width=50 align=center><input
name='submit' type='submit' value='back'></td></form>";print"
</tr></table><br><br><br><br><br><br><br><br><br><br><br><br>";
include "footer.php";exit(0);}
print"<center><table class=warna1 $frame><tr><td
rowspan=3>&nbsp;</td><td align=center colspan=3><img src=
'img/encryption.png' width=300></td><td>&nbsp;</td></tr><tr><td
colspan=3>";print"<table class=warna2 $frame><tr><td
rowspan=50>&nbsp;</td></tr>";
//input password for AES encryption..
print"<form name='formulir3' action='encryption.php'
method='POST'>";print"<input type='hidden' name='kode'
value='5'>";print"<input type='hidden' name='title'
value='encryption'>";print"<tr><td>&nbsp;</td></tr>";
print"<tr><td>input string for AES encryption password:
</td><td><input name='pass' type='password' id='pass' maxlength=25
size=50 /></td><td></td></tr>";print"<tr><td></td><td
align=center>(you can using character a..z - 0..9 A..Z)</td></tr>";print"<tr><td>&nbsp;</td></tr>";print"</table></t
d></tr>";print"<form name='formulir2' action='encryption.php'
method='POST'>";print"<tr align=right><td><input name='submit'
type='submit' value='next' onClick='return cek_pass()'></td>";
print"</form>";//cancel button
delete file temporary in temp/
print"<form name='formulir2' action='index.php' method='POST'>";
print"<input type='hidden' name='hapus' id='hapus' value='y'>";
print"<td width=50><input name='submit' type='submit'
value='cancel' ></td></tr>";print"</form>";print"<tr><td>
</td></tr>";print"</table>";print"<br><br><br><br><br><br><br><br>
<br>";}
if($kode=="5")
{//simpan AESpass di session..
if($_SESSION[AESpass]=="")$_SESSION[AESpass] = $_POST['pass'];
if($_SESSION[AESpass]=="")

145

{print"<center><table class=warna1 $frame><tr><td align=center


colspan=3><img src= 'img/decryption.png' width=300></td></tr><tr>
<td colspan=3>";print"<table width=500 class=warna2 $frame><tr>
<td>&nbsp;</td></tr>";print"<tr><td align=center><b>please check
your password..</b></td></tr><tr><td>&nbsp;</td></tr>";
print"</td></tr></table>";print"</td></tr><form name='formulir'
action='encryption.php' method='POST'>";print"<input type='hidden'
name='title' value='encryption'>";print"<input type='hidden'
name='kode' value='4'>";print"<tr><td width=50 align=center><input
name='submit' type='submit' value='back'></td></form>";print"
</tr></table><br><br><br><br><br><br><br><br><br><br><br><br>";
include "footer.php"; exit(0); }
print"<center><table class=warna1 $frame><tr><td
rowspan=3>&nbsp;</td><td align=center colspan=3><img src=
'img/encryption.png' width=300></td></tr><tr><td colspan=3>";
print"<table width=400 class=warna2 $frame><tr><td
rowspan=100>&nbsp;</td></tr>";
//select receiver (ambil dr database)
include "koneksi.php";
$hasil = mysql_query("select id_user, fullname, username from user
order by fullname asc");
print"<form name='formulir4' action='encryption.php'
method='POST'>";
print"<input type='hidden' name='kode' value='6'>";
print"<input type='hidden' name='title' value='encryption'>";
print"<tr><td colspan=2 align=left>select receiver you want to
send the encrypted file : </td></tr>";
print"<tr><td></td></tr>";
while($row = mysql_fetch_row($hasil))
{print"<tr><td width=10><input type='radio' name='receiver'
id='receiver' value='$row[0]'></td>";
print"<td align=left>&nbsp; $row[1] -> $row[2]</td></tr>";}
print"</td></tr><tr><td></td></tr></table></td></tr>";
print"<form name='formulir2' action='encryption.php'
method='POST'>";print"<tr align=right><td><input name='submit'
type='submit' value='encrypt' onClick='return
cek_receiver()'></td>";print"</form>";
//cancel button
delete file temporary in temp/
print"<form name='formulir2' action='index.php' method='POST'>";
print"<input type='hidden' name='hapus' id='hapus' value='y'>";
print"<td width=50><input name='submit' type='submit'
value='cancel' ></td></tr>";print"</form>";print"</table>";
print"<br>";}
if($kode=="6")
{$_SESSION[receiver] = $_POST['receiver'];
if($_SESSION[receiver]=="")
{print"<center><table class=warna1 $frame><tr><td align=center
colspan=3><img src= 'img/decryption.png' width=300></td></tr>
<tr><td colspan=3>";print"<table width=500 class=warna2
$frame><tr><td>&nbsp;</td></tr>";print"<tr><td align=center>
<b>please select one user..</b></td></tr><tr><td>&nbsp;</td>
</tr>";print"</td></tr></table>";print"</td></tr><form
name='formulir' action='encryption.php' method='POST'>";
print"<input type='hidden' name='title' value='encryption'>";
print"<input type='hidden' name='kode' value='5'>";
print"<tr><td width=50 align=center><input name='submit'
type='submit' value='back'></td></form>";print"</tr></table>
<br><br><br><br><br><br><br><br><br><br><br><br>";
include "footer.php";
exit(0);}

146

print"<center><table class=warna1 $frame><tr><td


rowspan=25>&nbsp;</td><td align=center colspan=3><img src=
'img/encryption.png' width=300></td></tr><tr><td colspan=3>";
print"<table width=600 class=warna2 $frame><tr><td
rowspan=100>&nbsp;</td></tr>";
//encryption process
include "encrypt.php";include "microtime.php";
session_register("enc");session_register("saved");
$receiver = mysql_fetch_row(mysql_query("select username, fullname
from user where id_user = '$_SESSION[receiver]'"));
if($receiver[0]==$_SESSION[username])
$receiver = "you";
else $receiver = $receiver[1];
print"<tr><td colspan=3><font size='4px'
color='#0066ff'>encryption complete and these file already sent to
</font><font size='4px'
color='#0000ff'>".$receiver."</font></td></tr>";
print"<tr><td colspan=3>&nbsp;</td></tr>";
for($i=1 ; $i <= $_SESSION[jmlfile] ; $i++)
{if($_SESSION[status.$i] == "ok")
//statusnya belum
terenkripsi
{session_register("filed");
$_SESSION[enc] = "";
if($_SESSION[file.$i] != null)
{$time_a = getmicrotime();
encryptFile($_SESSION[file.$i]);
unlink("temp/".$_SESSION[file.$i]);
$time_b = getmicrotime(); $time = $time_b - $time_a;
$nama = substr($_SESSION[filed],5);
$filesize = filesize($_SESSION[filed]);
if($filesize > 1048576)
{$filesize = $filesize/1048576;$satuan = "MBytes";}
else if($filesize > 1024)
{$filesize = $filesize/1024; $satuan = "KBytes";}
else { $satuan = "Bytes";}}
//print hasil enkripsi
print"<tr><td width=100 align=left>file ".$i."</td></tr>";
print"<tr><td align=left>file name </td><td>: </td><td align=left>
<b>".$nama."</b></td></tr>";printf("<tr><td align=left>file size
</td><td>: </td><td align=left>%.3f %s</td></tr>",$filesize,
$satuan);print"<tr><td align=left>status </td><td>: </td><td
align=left>".$_SESSION[enc]."</td></tr>";print"<tr><td
align=left>data </td><td>: </td><td align=left>".$_SESSION[saved]
."</td></tr>";printf("<tr><td align=left>process time </td><td>:
</td><td align=left>%.5f seconds</td></tr>",$time);print"<tr>
<td>&nbsp;</td></tr>";}
else unlink("temp/".$_SESSION[file.$i]);}
print"<tr><td></td></tr></table></td></tr>";
//finish button back to home
print"<form name='formulir2' action='index.php' method='POST'>";
print"<td align=right><input name='submit' type='submit'
value='finish' ></td></tr>";print"</form>";print"</table>";
$jumlah = $_SESSION[jmlfile];
if ($jumlah == 1)$jbr = 3;else if($jumlah >= 2) $jbr = 0;
for ($br=0 ; $br<=$jbr ; $br++)print"<br>";}
include "footer.php";?>

147

index.php
<?php
session_start(); include "otentik.php";
if (!isset($_SESSION[username]) && !isset($_SESSION[password]))
{$_SESSION[username] = $_POST[username];
$_SESSION[password] = md5($_POST[password]);login_validate();}
if(empty($_SESSION[username]) || empty($_SESSION[password]))
{$alamat = "logout.php";header("Location: $alamat");exit(); }
if(!otentikasi($_SESSION[username], $_SESSION[password]))
{$msg = "your username and password is incorrect..!"; $alamat =
"logout.php?msg=$msg";header("Location: $alamat");exit();}
if (!login_check())
{header("Location: logout.php"); exit(0);}
$title = "acrypt cs | home ";include "header.php";
include "header2.php";
//delete file temp after encryption..
$hapus = $_POST[hapus];
if($hapus=='y')
{for($i=1 ; $i <= $_SESSION[jmlfile] ; $i++)
{if($_SESSION[file.$i] != "")unlink("temp/".$_SESSION[file.$i]);}}
//delete file temp after decryption..
$hapus1 = $_POST[hapus1];
if($hapus1=='y')
{for($i=1 ; $i<=$_SESSION[jmlfile] ; $i++)
{unlink($_SESSION[filed.$i]); unset($_SESSION[file.$i]);
unset($_SESSION[filed.$i]);}}?>
<?php //notification new file in the user inbox
include "koneksi.php";
// take from database....
$id_user = mysql_fetch_row(mysql_query("select id_user from user
where username = '$_SESSION[username]'"));
//ambil data dari tabel inbox
$inbox = mysql_num_rows(mysql_query("select id_inbox from inbox
where id_user = '$id_user[0]' and new = 'y'"));
if($inbox > 0)
print"<font color=#ff0000>you have <b>".$inbox."</b> new file in
your <a href='inbox.php'>inbox</a></font>";?>
<ul> <li><a id="link1" href="encryption.php"><em></em>
<span><object><p class="bold">encryption</p></object>
<p>encrypt your file and secure the password.<p><p>click for
encryption..</span></a></li>
<li> <a id="link2" href="decryption.php"><em></em><span><object><p
class="bold">decryption</p></object><p>decrypt one or more
files<br>from your inbox.<br /><p><p>click for decryption..
</span></a></li>
<li><a id="link3" href="inbox.php"><em></em><span><object><p
class="bold">inbox</p></object><p>check message or file sent<br>to
you. it can be decrypt or delete.<br/><p><p>click to open your
inbox..</span></a></li>
<li><a id="link4" href="change_pass.php"><em></em>
<span><object><p class="bold">change password</p></object>
<p>change your login <br>password.<br />
<p><p>click to change..</span></a></li>
<li><a id="link5" href="mykey.php"><em></em><span><object><p
class="bold">my key</p></object><p>if you forget your
private<br>key or you want to generate new key pair..<br />

148

<p><p>click it..</span></a></li>
<li><a id="link6" href="outbox.php"><em></em><span><object><p
class="bold">outbox</p></object><p>check message or file you <br>
have sent from your outbox <br> and you can to delete it.<br />
<p><p>click to open your outbox..</span></a></li>
<li><a id="link7" href="help.php"><em></em><span><object><p
class="bold">help</p></object><p>get some help about this
application.<br /><p><p>click for help..</span></a></li>
<li><a id="link8" href="about.php"><em></em><span><object><p
class="bold">about</p></object><p>get some information about the
author.<br /><p><p>click to view..</span></a></li>
<li><a id="link9" href="logout.php"><em></em><span><object><p
class="bold">Logout</p></object><p>end your session<p><p>click to
logout.</span></a></li></ul><br><br><br><br><br><br><br><br><br><b
r><br><br><br><? include "footer.php"; ?>

koneksi.php
<?$connect = mysql_connect("localhost","root","")or die("Koneksi
Gagal");mysql_select_db("acryptcs", $connect) or die("Database tak
bisa dibuka");?>

login.php
<?php $title = "acrypt cs | login ";include "header.php";?>
<script language="JavaScript">
function cek_form() {
var a = document.getElementById('username').value;
var b = document.getElementById('password').value;
if (a==""||b=="")
{ alert('bad username and password..');
return false; }
else
return true;}
</script>
<?php include "header2.php";?>
<center><table width="300" class=warna1 <?php print $frame; ?> >
<tr><td></td><td colspan=2 align=center><img src =
'img/login.png'></td><td rowspan=5><img src = 'img/hacker.gif'
width=200></td></tr>
<tr><td><img src="img/security.png"></td><td>
<form name="formulir" action="index.php" method=POST>
<table width="250" class=warna2 <?php print $frame; ?> >
<tr><td></td></tr><tr><td></td><td>username</td><td> : </td>
<td><input name="username" type="text" id="username" size=23
/></td></tr><tr><td></td><td>password</td><td> : </td>
<td><input name="password" type="password" id="password" size=23
/></td></tr><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><td></td><td></td><td></td><td align='left'><input
name="submit" type="submit" value="enter" onClick="return
cek_form()" /></td><td></td></tr><tr><td></td></tr></table></form>
</td><td></td></tr><tr><td></td><td align=right><a
href='sign_up.php'>sign up</a></td></tr><tr><td></td></tr>

149

</table><br><?php $msg = $_GET[msg];print"<font


color='#FF0000'>".$msg."</font>";?></center><br><br><br><br><br><b
r><br><?php include "footer.php";?>

logout.php
<?php
$msg = $_GET[msg];session_start();unset($_SESSION[username]);
unset($_SESSION[password]);session_destroy();
if($msg == "")
$alamat = "login.php";
else $alamat = "login.php?msg=$msg";
header("Location: $alamat");?>

otentik.php
<?php
include"koneksi.php";
function otentikasi($username, $password)
{if($username=="" || $password=="") return false;
else{
$hasil = mysql_query("select password from user where username =
'$username'");
$row = mysql_fetch_row($hasil);
if($row[0]==$password) return true;
else return false;}}
function login_validate()
{$timeout = 180;
//3 menit tak ada aktifitas,
logout!hitungan dalam detik
$_SESSION["expires_by"] = time() + $timeout;}
function login_check()
{$exp_time = $_SESSION["expires_by"];
if (time() < $exp_time)
{login_validate();return true;}
else {
unset($_SESSION["expires_by"]);return false;}}?>

rsa.class
class SecurityRSA {
var $primes;
var $maxprimes;
function SecurityRSA($show_debug=0) {
/*random generator seed */
mt_srand((double)microtime()*1000000);
/* Prime numbers table (570 prime numbers)
* 4507,4513 is the smallest and 9521,9533 is the largest pair*/
$this->primes = array (4507, 4513, 4517, 4519, 4523, 4547,
4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, 4637, 4639, 4643,
4649, 4651, 4657, 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729,
4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817,
4831, 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937,

150

4943,
5011,
5107,
5227,
5323,
5419,
5503,
5591,
5689,
5791,
5861,
5981,
6079,
6173,
6269,
6343,
6449,
6563,
6661,
6761,
6841,
6949,
7019,
7129,
7237,
7349,
7481,
7549,
7639,
7723,
7841,
7933,
8059,
8161,
8243,
8353,
8447,
8573,
8669,
8741,
8837,
8941,
9041,
9151,
9239,
9341,
9431,
9511,

4951,
5021,
5113,
5231,
5333,
5431,
5507,
5623,
5693,
5801,
5867,
5987,
6089,
6197,
6271,
6353,
6451,
6569,
6673,
6763,
6857,
6959,
7027,
7151,
7243,
7351,
7487,
7559,
7643,
7727,
7853,
7937,
8069,
8167,
8263,
8363,
8461,
8581,
8677,
8747,
8839,
8951,
9043,
9157,
9241,
9343,
9433,
9521,

4957, 4967,
5023, 5039,
5119, 5147,
5233, 5237,
5347, 5351,
5437, 5441,
5519, 5521,
5639, 5641,
5701, 5711,
5807, 5813,
5869, 5879,
6007, 6011,
6091, 6101,
6199, 6203,
6277, 6287,
6359, 6361,
6469, 6473,
6571, 6577,
6679, 6689,
6779, 6781,
6863, 6869,
6961, 6967,
7039, 7043,
7159, 7177,
7247, 7253,
7369, 7393,
7489, 7499,
7561, 7573,
7649, 7669,
7741, 7753,
7867, 7873,
7949, 7951,
8081, 8087,
8171, 8179,
8269, 8273,
8369, 8377,
8467, 8501,
8597, 8599,
8681, 8689,
8753, 8761,
8849, 8861,
8963, 8969,
9049, 9059,
9161, 9173,
9257, 9277,
9349, 9371,
9437, 9439,
9533);

4969,
5051,
5153,
5261,
5381,
5443,
5527,
5647,
5717,
5821,
5881,
6029,
6113,
6211,
6299,
6367,
6481,
6581,
6691,
6791,
6871,
6971,
7057,
7187,
7283,
7411,
7507,
7577,
7673,
7757,
7877,
7963,
8089,
8191,
8287,
8387,
8513,
8609,
8693,
8779,
8863,
8971,
9067,
9181,
9281,
9377,
9461,

4973, 4987, 4993, 4999, 5003, 5009,


5059, 5077, 5081, 5087, 5099, 5101,
5167, 5171, 5179, 5189, 5197, 5209,
5273, 5279, 5281, 5297, 5303, 5309,
5387, 5393, 5399, 5407, 5413, 5417,
5449, 5471, 5477, 5479, 5483, 5501,
5531, 5557, 5563, 5569, 5573, 5581,
5651, 5653, 5657, 5659, 5669, 5683,
5737, 5741, 5743, 5749, 5779, 5783,
5827, 5839, 5843, 5849, 5851, 5857,
5897, 5903, 5923, 5927, 5939, 5953,
6037, 6043, 6047, 6053, 6067, 6073,
6121, 6131, 6133, 6143, 6151, 6163,
6217, 6221, 6229, 6247, 6257, 6263,
6301, 6311, 6317, 6323, 6329, 6337,
6373, 6379, 6389, 6397, 6421, 6427,
6491, 6521, 6529, 6547, 6551, 6553,
6599, 6607, 6619, 6637, 6653, 6659,
6701, 6703, 6709, 6719, 6733, 6737,
6793, 6803, 6823, 6827, 6829, 6833,
6883, 6899, 6907, 6911, 6917, 6947,
6977, 6983, 6991, 6997, 7001, 7013,
7069, 7079, 7103, 7109, 7121, 7127,
7193, 7207, 7211, 7213, 7219, 7229,
7297, 7307, 7309, 7321, 7331, 7333,
7417, 7433, 7451, 7457, 7459, 7477,
7517, 7523, 7529, 7537, 7541, 7547,
7583, 7589, 7591, 7603, 7607, 7621,
7681, 7687, 7691, 7699, 7703, 7717,
7759, 7789, 7793, 7817, 7823, 7829,
7879, 7883, 7901, 7907, 7919, 7927,
7993, 8009, 8011, 8017, 8039, 8053,
8093, 8101, 8111, 8117, 8123, 8147,
8209, 8219, 8221, 8231, 8233, 8237,
8291, 8293, 8297, 8311, 8317, 8329,
8389, 8419, 8423, 8429, 8431, 8443,
8521, 8527, 8537, 8539, 8543, 8563,
8623, 8627, 8629, 8641, 8647, 8663,
8699, 8707, 8713, 8719, 8731, 8737,
8783, 8803, 8807, 8819, 8821, 8831,
8867, 8887, 8893, 8923, 8929, 8933,
8999, 9001, 9007, 9011, 9013, 9029,
9091, 9103, 9109, 9127, 9133, 9137,
9187, 9199, 9203, 9209, 9221, 9227,
9283, 9293, 9311, 9319, 9323, 9337,
9391, 9397, 9403, 9413, 9419, 9421,
9463, 9467, 9473, 9479, 9491, 9497,

$this->maxprimes = count($this->primes) - 1;
if ($show_debug == 1)
print "<p>instiantator: <br>Primes: " . $this->primes
"<br>Maxprimes: " . $this->maxprimes . "</p>";
}
/*Function for generating keys. Return array where
$array[0] -> modulo N
$array[1] -> public key E
$array[2] -> private key D
Public key pair is N and E

151

Private key pair is N and D


*/
function generate_keys($show_debug=0){
//class-ify: global $primes, $maxprimes;
if ($show_debug)
print "<p>generate_keys()<br>Primes:
$this->primes<br>Maxprimes: $this->maxprimes</p>";
while (empty($e) || empty($d)) {
/* finding 2 small prime numbers $p and $q
$p and $q must be different*/
$p = $this->primes[mt_rand(0, $this->maxprimes)];
while (empty($q) || ($p==$q)) {
$q = $this->primes[mt_rand(0, $this->maxprimes)];
}
//second part of public and private pairs - N
$n = $p*$q;
//$pi (we need it to calculate D and E)
$pi = ($p - 1) * ($q - 1);
// Public key E
$e = $this->tofindE($pi, $p, $q);
// Private key D
$d = $this->extend($e,$pi);
$keys = array ($n, $e, $d);
if ($show_debug) {
echo "P = $p<br>Q = $q<br><b>N = $n</b> - modulo<br>PI
= $pi<br><b>E = $e</b> - public key<br><b>D = $d</b> - private
key<p>";
}
}
return $keys;
}
/* modulus function */
function mo($g, $l) {
return $g - ($l * floor ($g/$l));
}
// Standard method of calculating D (D = E-1 (mod N))
// It's presumed D will be found in less then 16 iterations
function extend($Ee,$Epi) {
$u1 = 1;
$u2 = 0;
$u3 = $Epi; $v1
$v3 = $Ee;
while ($v3 != 0) {
$qq = floor($u3/$v3);
$t1 = $u1
$t2 = $u2 - $qq * $v2;
$t3 = $u3
$u1 = $v1; $u2 = $v2; $u3 = $v3; $v1
$v3 = $t3; $z = 1;}
$uu = $u1;
$vv = $u2;
if ($vv < 0) {
$inverse = $vv + $Epi;
} else {
$inverse = $vv;
}
return $inverse;

152

= 0;

$v2 = 1;

- $qq * $v1;
- $qq * $v3;
= $t1; $v2 = $t2;

}
/* This function return Greatest Common Divisor for $e and $pi
numbers */
function GCD($e,$pi) {
$y = $e;
$x = $pi;
while ($y != 0)
{ $w = $this->mo($x , $y);
$x = $y;
$y = $w;}
return $x;}
/*function for calculating E under conditions:
GCD(N,E) = 1 and 1<E<N
If each test E is prime, there will be much less loops in that
fuction
and smaller E means less JS calculations on client side */
/*
* Calculating E under conditions:
* GCD(N,E) = 1 and 1<E<N
* If E is prime, there will be fewer loops in the function.
* Smaller E also means reduced JS calculations on client side.
*/
function tofindE($pi) {
//class-ify: global $primes, $maxprimes;
$great = 0;
$cc = mt_rand (0,$this->maxprimes);
$startcc = $cc;
while ($cc >= 0) {
$se = $this->primes[$cc];
$great = $this->GCD($se,$pi);
$cc--;
if ($great == 1) break;
}
if ($great == 0) {
$cc = $startcc + 1;
while ($cc <= $this->maxprimes) {
$se = $this->primes[$cc];
$great = $this->GCD($se,$pi);
$cc++;
if ($great == 1) break;
}
}
return $se;
}
/* ENCRYPT function returns
*, X = M^E (mod N)
*
* Each letter in the message is represented as its ASCII code
number - 30
* 3 letters in each block with 1 in the beginning and end.*/
function rsa_encrypt($m, $e, $n) {
$asci = array ();
for ($i=0; $i<strlen($m); $i+=3) {
$tmpasci="1";
for ($h=0; $h<3; $h++) {
if ($i+$h <strlen($m)) {
$tmpstr = ord (substr ($m, $i+$h, 1)) - 30;

153

if (strlen($tmpstr) < 2) {
$tmpstr ="0".$tmpstr;
}
} else break;
$tmpasci .=$tmpstr;
}
array_push($asci, $tmpasci."1");
}
//Each number is then encrypted using the RSA formula: block
^E mod N
for ($k=0; $k< count ($asci); $k++) {
$resultmod = $this->powmod($asci[$k], $e, $n);
$coded .= $resultmod." ";
}
return trim($coded);
}
/*Russian Peasant method for exponentiation */
function powmod($base, $exp, $modulus) {
$accum = 1;
$i = 0;
$basepow2 = $base;
while (($exp >> $i)>0) {
if ((($exp >> $i) & 1) == 1) {
$accum = $this->mo(($accum * $basepow2) , $modulus);
}
$basepow2 = $this->mo(($basepow2 * $basepow2) , $modulus);
$i++;
}
return $accum;
}
/*ENCRYPT function returns M = X^D (mod N)*/
function rsa_decrypt($c, $d, $n) {
//Strip the blank spaces from the ecrypted text and store it
in an array
$decryptarray = split(" ", $c);
for ($u=0; $u<count ($decryptarray); $u++) {
if ($decryptarray[$u] == "") {
array_splice($decryptarray, $u, 1); }}
//Each number is then decrypted using the RSA formula: block
^D mod N
for ($u=0; $u< count($decryptarray); $u++) {
$resultmod = $this->powmod($decryptarray[$u], $d, $n);
//remove leading and trailing '1' digits
$deencrypt.= substr ($resultmod,1,strlen($resultmod)-2);
}
//Each ASCII code number + 30 in the message is represented
as its letter
for ($u=0; $u<strlen($deencrypt); $u+=2) {
$resultd .= chr(substr ($deencrypt, $u, 2) + 30);
} return $resultd;
}
} //end class
?>

154

BUKTI PENYERAHAN SKRIPSI


(Sebagai Syarat Pendaftaran Wisuda)

NAMA
NIM
PROGRAM STUDI
JUDUL

TANGGAL
Jabatan

: Zaenal Muttaqin
: 2040 9100 2553
: Teknik Informatika
: Pembuatan Aplikasi Enkripsi Menggunakan Metode
Advance Encryption Standard dan Rivest Shamir Adleman
Studi Kasus CV Maharta Mandiri Promo
: Senin, 11 Januari 2010
Nama

Tanggal

Pembimbing I

Herlino Nanang, MT

Pembimbing II

Zulfiandri, MMSI

Penguji I

Viva Arifin, MMSI

Penguji II

Victor Amrizal, M.Kom

Ketua Prodi

Yusuf Durrachman, MIT

Tanda Tangan

Perpustakaan Pusat UIN


Perpustakaan Fakultas

Jakarta,
a.n. Dekan,
Kasubag Akademik Fakultas
Sains dan Teknologi,

Dra. Sukmayeti
NIP. 19620114 198803 2 001
Ket :
* Dibuat Rangkap 2 (dua) untuk :
1. Akademik FST
2. Mahasiswa (Syarat Pengambilan Ijazah)

155

Anda mungkin juga menyukai