ZAENAL MUTTAQIN
2040.9100.2553
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
iii
PENGESAHAN UJIAN
Menyetujui :
Penguji I
Penguji II
Pembimbing I
Pembimbing II
Zulfiandri, MMSI
NIP. 150 368 821
Herlino Nanang, MT
NIP. 19731209 200501 1 002
Mengetahui:
Dekan
Fakultas Sains dan Teknologi
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.
Zaenal Muttaqin
2040 9100 2553
ABSTRAK
vi
KATA PENGANTAR
skripsi
yang
berjudul
Pembuatan
Aplikasi
Enkripsi
Bapak DR. Syopiansyah Jaya Putra, M.SIS, selaku Dekan Fakultas Sains
dan Teknologi.
2.
3.
4.
vii
5.
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.
Zaenal Muttaqin
NIM. 2040 9100 2553
viii
DAFTAR ISI
BAB I
PENDAHULUAN .................................................................................. 1
1.6.2.
BAB II
2.4.2.
2.4.3.
Sejarah Kriptografi............................................................... 15
2.5.2.
xi
2.6.2.
Algoritma Asimetris............................................................. 21
2.6.3.
2.7.2.
Algoritma Rijndael............................................................... 25
2.7.3.
2.7.4.
Transformasi ShiftRows()..................................................... 30
2.7.5.
2.7.6.
Transformasi AddRoundKey().............................................. 32
2.7.7.
2.8.2.
2.8.3.
2.9.2.
2.9.3.
Algoritma Enkripsi/Dekripsi................................................ 42
2.9.4.
2.9.5.
Kecepatan ............................................................................. 44
3.1.2.
Metode Wawancara.............................................................. 49
xii
3.1.3.
3.1.4.
3.2.2.
3.2.3.
Fase Konstruksi.................................................................... 55
3.2.4.
Fase Pelaksanaan.................................................................. 55
4.1.2.
4.1.3.
4.4.2.
Tujuan .................................................................................. 60
4.4.3.
Syarat-syarat......................................................................... 61
Perancangan Proses.............................................................. 62
4.5.2.
Perancangan Flowchart........................................................ 64
4.5.3.
4.5.4.
4.5.5.
4.7.2.
4.7.3.
xiii
BAB V
xiv
DAFTAR GAMBAR
xv
xvi
xvii
DAFTAR TABEL
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
berjudul PEMBUATAN
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.
2.
3.
4.
5.
6.
database
MySQL,
serta
dijalankan
dengan
1.4.
Tujuan Penelitian
1.
2.
1.5.
Manfaat Penelitian
Manfaat yang didapat dalam menulis skripsi ini adalah :
1.
Bagi Penulis
a.
b.
2.
Bagi Pengguna
a.
b.
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.
Observasi
Pengamatan
dilakukan
secara
langsung
pada
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.
1)
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
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
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.
E-commerce
adalah
industri
lain
yang
sangat
intensif
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
Teks
terang
Enkripsi
Teks
tersandi
2.4.
Kriptografi
2.4.1.
untuk
menjaga
kerahasiaan
pesan
dengan
cara
11
1.
2.
3.
4.
enciphering
dan
deciphering,
atau
fungsi
12
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.
berkembang
sedemikian
rupa
sehingga
cipherteks
menjadi
plainteks
tanpa
Kriptologi
(cryptology)
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.
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
Nirpenyangkalan (non-repudiation)
Adalah
layanan
untuk
mencegah
entitas
yang
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).
15
16
2.5.
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.
2.
3.
4.
Cipher
Substitusi
Poligram
(Polygram
substitution
huruf disubstitusi
dengan
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
19
2.6.
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
2.6.2.
1.
2.
3.
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.
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
2.7.
2.
3.
4.
5.
22
1.
2.
3.
4.
5.
2.7.1.
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
Ukuran Blok
(Nb words)
Jumlah Putaran
(Nr)
AES-128
10
AES-192
12
AES-256
14
AES
256,
karena
akan
sangat
jarang
pengguna
24
2.7.2.
Algoritma Rijndael
Rijndael menggunakan substitusi dan permutasi, dan
sejumlah
putaran
(cipher
berulang),
setiap
putaran
2.
b.
c.
d.
3.
25
a.
SubBytes
b.
ShiftRows
c.
AddRoundKey
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
2.
3.
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
27
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()
28
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
digit hexadesimal
dari
nilai
S[r,c],
maka
nilai
29
b2,0 bb2,1
2,2 b2,2 b2,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.
2.7.5.
Transformasi MixColumns()
Transformasi MixColumns() mengalikan setiap kolom dari
array state dengan polinom a(x) mod (x4 + 1). MixColumns
30
(6.5)
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
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.
oleh
pengguna,
dan
memanggil
fungsi
2.8.
32
lain
Koblitz
memperkenalkan
elliptic-curve-cryptography
2.8.2.
33
Kunci Privat, d
Kunci Publik, e
Cipherteks, c
Plainteks, m
Enkripsi
Ee (m) = c
Dekripsi
Dd (c) = m
Plainteks, m
34
2.
b.
Pemangkatan
31 x 47 = 1457
(perkalian, mudah)
1457 = ? x ?
(pemfaktoran, sulit)
vs
logaritma
diskrit.
Melakukan
35
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
pengguna
di
36
lingkungan
jaringan
komputer
(LAN/WAN)
yang
memungkinkan
mereka
saling
Kerahasiaan data
Seperti pada kriptografi kunci simetri, kriptografi kunci
publik dapat digunakan untuk menjaga kerahasiaan data
(provide
confidentiality/secrecy)
melalui
mekanisme
Rivest
Shamir
Adleman,
Knapsack,
37
Rabin,
2.
tangan
digital
(digital
signature)
dengan
kunci
simetri
(session
key).
Contoh
2.9.
38
(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.
(2.1)
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
39
(2.2)
(2.3)
(2.4)
(2.5)
atau
e d k(n) + 1
(2.6)
(2.7)
(2.8)
(2.9)
Dd(c) = m cd mod n
(2.10)
40
(2.11)
2.9.2.
2.
3.
4.
5.
(2.12)
2.9.3.
Algoritma Enkripsi/Dekripsi
Enkripsi
1.
2.
3.
Dekripsi
Setiap blok cipherteks ci didekripsi kembali menjadi blok mi
dengan rumus mi = ci d mod n.
2.9.4.
42
43
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).
PHP.
Jika
dibandingkan
di
antara
tiga
terbesar
PHP merupakan
sebuah bahasa
script yang
tidak
45
3.
4.
5.
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
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.
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
3.1.3.
3.1.4.
studi
literatur
digunakan
dengan
melihat
(Muliati,
2009),
beberapa
kelebihan
akan
49
3.2.
3.2.1.
dan dapat
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
51
membuat
aplikasi
client
server.
Bahasa
Database
Perancangan tabel-tabel
Perangkat Lunak :
1.
b.
2.
Adobe Photoshop 7.
3.
EditPlus 2.12.
4.
5.
Perangkat Keras :
1.
2.
Harddisk 80 GB.
3.
4.
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
53
Proses enkripsi
Proses dekripsi
plainteks
cipherpassword
AES
RSA
cipherteks
password
password
cipherteks
RSA
AES
cipherpassword
plainteks
2.
3.
3.2.3.
Fase Konstruksi
Pada tahap ini dilakukan pembuatan program terhadap
rancangan-rancangan yang telah
didefinisikan. Pembuatan
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:
dari fase
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)
perubahan
Tanggapan User
Aplikasi Kriptografi
berbasis client server
56
BAB IV
PEMBAHASAN DAN IMPLEMENTASI
4.1.
Perusahaan
Persekutuan
Komanditer,
(IUP)Kecil,No.503.1/0083/30-03/PK/III/2006.
57
4.1.3.
1.
2.
3.
4.
5.
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
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
4.4.
4.4.2.
Tujuan
Seperti yang telah dijelaskan pada subbab 3.2.2 peneliti
bertujuan
untuk
membuat suatu
aplikasi enkripsi
yang
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.
61
4.5.1.
Perancangan Proses
1.
username, password,
public key, private key
user
file
aplikasi
acryptcs
filename1, filename2,
sender_id, receiver_id
user
file
filename1, filename2,
sender_id, receiver_id
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
62
3.
username, password
user
1.1*
cek
database
1.2*
buat
session
username, password
user
file
filename1, sender,
receiver
2.2*
enkripsi
AES
password
public key
2.3*
enkripsi
RSA
filename2, sender,
receiver
file
user
private key,
jumlah file
3.1*
cek file
file
filename2
private key
password
3.3*
dekripsi
AES
file
filename1
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
start
Input file
Cek file
File salah/kosong ?
true
false
Input kunci AES
Pilih penerima
Update database
i++
true
stop
65
66
Baca file
r = 10
AddRoundKey()
SubBytes()
ShiftRows()
true
r=1?
false
MixColumns()
AddRoundKey()
r-1
r=0?
false
true
2
Gambar 4.8. Flowchart proses enkripsi dengan metode Advance Encryption Standard
(Sumber : Munir, 2006)
67
memanggil
fungsi
SubBytes(),
ShiftRows(),
68
plainteks (M), n, e
Transformasi M m
mn-1
false
false
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)
publik(e).
Plainteks
(dalam
hal
ini
password),
69
70
4.
start
Pilih file
File benar?
false
true
Input kunci private
Kunci valid?
false
true
i=0, n = jml file, (jml file>10, n=10)
10
i++
true
i<n?
false
Tampilkan hasil dekripsi
stop
71
72
5.
Baca file
r = 10
AddRoundKey()
r = 10?
true
false
Inv MixColumns()
Inv SubBytes()
Inv ShiftRows()
AddRoundKey()
r -1
false
r=0?
true
10
Gambar 4.11. Flowchart proses dekripsi dengan metode Advance Encryption Standard
(Sumber : Munir, 2006)
InvShiftRows(),
KeyExpansion(),
dan
74
6.
cipherteks (C), n, d
Transformasi C c
false
cn-1
true
d
m = c (mod n)
plainteks (m)
false
m n-1
true
plainteks (m)
Transformasi m M
plainteks (M)
Gambar 4.12. Flowchart proses dekripsi dengan metode Rivest Shamir Adleman
(Sumber : Munir, 2006)
75
4.5.3.
user
mendekripsi
mengenkripsi
plainteks
menjadi
cipherteks
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
private_key
id_user
username
fullname
password
public_key
sec_question
sec_answer
id_plainteks
plain_name
plain_size
private_key
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
username
fullname
password
public_key
id_cipherteks
cipher_name
cipher_size
aes_key
iv
private_key
nd
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
plain_name
aes_key
iv
plain_size
id_cipherteks
cipher_name
cipher_size
3.
plain_name
plain_size
cipher_name
cipher_size
aes_key
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.
login
merupakan
tampilan
untuk
login.
80
Logo acrypt cs
Please login
username :
image
image
password :
enter
sign up
footer
81
Logo acrypt cs
Sign up
image
Fullname
username
password
confirm password :
security question
question
answer
:
image
:
sign up
clear
login
footer
2.
2.
3.
4.
82
5.
6.
7.
8.
9.
Logo acrypt cs
Keterangan
menu
(saat
mouseover)
Keterangan
menu
(saat
mouseover)
Menu utama
footer
83
3.
Logo acrypt cs
encryption
Number of file :
Combo box
enter
cancel
footer
b.
Halaman
menyediakan
input
file
tombol
84
browse.
Untuk
menghindari
Logo acrypt cs
encryption
File 1 :
enter
:
File n :
Browse..
:
enter
next
Browse..
clear all
cancel
footer
c.
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
d.
86
Logo acrypt cs
encryption
input string for AES password encryption :
next
cancel
footer
e.
halaman
ini meminta
user
untuk
mencegah
kesalahan
input,
aplikasi
87
Logo acrypt cs
encryption
Select receiver
o Username 1
o Username 2
:
:
o Username n
next
cancel
footer
f.
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
4.
89
Logo acrypt cs
decryption
Record 1
Record 2
Record n
decrypt
cancel
footer
b.
90
Logo acrypt cs
decryption
File 1
File name
File size
Sender
Date
File n
File name
File size
Sender
Date
:
next
cancel
footer
c.
91
Logo acrypt cs
decryption
Your private key:
next
clear
cancel
footer
d.
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
5.
93
Logo acrypt cs
inbox
No
Filename
Filesize
Sender
Date
Action
Record 1
decrypt
delete
Record 2
decrypt
delete
decrypt
delete
Record n
footer
6.
94
Logo acrypt cs
outbox
No
Filename
Filesize
Receiver Date
Action
Record 1
delete
Record 2
delete
Record n
:
delete
footer
7.
95
Logo acrypt cs
My key
image
enter
answer
clear
cancel
footer
Logo acrypt cs
My key
your private key :
new key
image
footer
96
Logo acrypt cs
Change key
your key has been change ! refresh page for new key..
image
new key
footer
8.
97
Logo acrypt cs
Change password
image
current password
new password
confirm password
:
save
clear
footer
9.
98
Logo acrypt cs
help
Singkat tentang acrypt cs
Algoritma AES
Algoritma RSA
Link bantuan
Gambar marquee
footer
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
footer
4.5.5.
100
101
102
103
akan
melakukan
dekripsi
dan
setelah
selesai,
104
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
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
PHP
yang
digunakan.
Pemanfaatan
library
tersebut
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);
4.7.
4.7.1.
4.7.2.
108
4.7.3.
proses setting
server
kemudian
telah
terenkripsi
akan
menjadi
file
yang
109
Nama F ile
N PEOPLE.mp3
ORDI ARY
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.
110
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.
2.
Standard
dan
Rivest
Shamir
Adleman
dalam
4.
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
1GB,
untuk
proses
enkripsi,
diharapkan
dapat
113
DAFTAR PUSTAKA
Burnett, Steve and Stephen Paine. 2004. RSA Securitys Official Guide to
CRYPTOGRAPHY. California : McGraw-Hill/Osborne.
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.
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
2.
3.
4.
116
5.
6.
T : Apakah di CV ini pernah terjadi pencurian data oleh pihak yang tidak
berhak?
J : Pernah.
9.
117
LAMPIRAN B
TAMPILAN APLIKASI ACRYPT CS
118
119
120
121
122
123
124
125
126
127
128
129
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> </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> </td></tr>";
//tampilan file sementara
print"<tr><td colspan=3><b>this file will be decrypt
:</b></td></tr><tr><td> </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
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> </td></tr>";
print"<tr><td align=center><b>please check your private
key..</b></td></tr><tr><td> </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> </td></tr>";print"<tr><td
align=center><b>your private key is invalid..</b></td></tr>
<tr><td> </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> </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> </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> </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> </td></tr>";
print"<tr><td> </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
136
137
138
139
print"<tr><td> </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
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
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> </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> </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> </td></tr>"; print"<tr><td
align=center><b>please check your file input..</b></td></tr>
<tr><td> </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
144
145
146
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> </td><td> </td><td> </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
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,
$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
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
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
Penguji II
Ketua Prodi
Tanda Tangan
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