Sequence Diagram
untuk sistem yang dirancang pada penelitian ini dapat dilihat pada Gambar 3.8
Gambar 3.8
Sequence diagram
sistem
3.3 Perancangan Sistem
3.3.1 Pembuatan Algoritma Program
Pembuatan algoritma program adalah proses penerjemahan langkah-langkah algoritma ElGamal serta algoritma
Elias Gamma Code
, ke dalam sebuah bahasa pemograman. Tahap-tahap yang dilalui dalam pembuatan algoritma program yaitu:
1. Pembuatan alur proses sistem secara umum.
2. Pembuatan alur proses enkripsi dan dekripsi dengan menggunakan algoritma
ElGamal dan penerapan algoritma ElGamal ke dalam bahasa pemrograman Java.
user
Enkripsi ElGamal Kompresi Elias
Gamma Code Dekompresi Elias
Gamma Code Dekripsi ElGamal
Input file teks .txt Masukkan kunci publik
Input hasil enkrip Kompresi
Input Hasil Kompresi Dekompresi
Input Hasil Dekompresi Masukkan Kunci privat
Hasil Dekripsi
3. Pembuatan alur proses kompresi dan dekompresi dengan menggunakan algoritma
Elias Gamma Code
dan penerapan algoritma
Elias Gamma Code
ke dalam bahasa pemrograman Java
4. Pembuatan alur proses pengujian bilangan prima menggunakan Fermat dan
penerapan Fermat ke dalam bahasa pemrograman Java.
3.3.2. Alur Proses Sistem Secara Umum
Alur proses sistem secara umum dibagi menjadi dua yaitu proses enkripsi file teks menjadi file
ciphertext
dan proses dekripsi file
ciphertext
menjadi file teks dan proses kompresi dan dekompresi. Keseluruhan proses tersebut dapat dilihat pada
flowchart
gambaran umum sistem pada Gambar 3.9.
Gambar 3.9
Flowchart
gambaran umum system.
Start
Bil.prima p, α ,
bilangan acak x Plainteks M
M disusun menjadiblok
m1,m2,m3...mi Enkripsi
Y= α
b mod p
C= mx
b
mod pmod p Cipherteks
Proses Kompresi yang merujuk pada tabel elias
gamma code Dekripsi
Z= y
p-1-a
mod p M = c.z mod p
Plainteks End
File hasil kompresi
txt.eg File hasil
dekompresi txt
Proses Dekompresi yang merujuk pada tabel elias
gamma code
3.3.3 Alur Proses Pembangkit Kunci
Pada agoritma ElGamal proses pembangkit kunci dapat dijelaskan sebagai berikut : 5.
Pilih sembarang bilangan prima yang telah di uji dengan metode Fermat.
Misalkan nilai bilangan prima yang dipilih adalah
2399. Adapun pseudocode untuk menguji bilangan prima dengan Fermat adalah :
Private bangkitkanPrimaint panjang{ acak = bilanganAcakpanjang;
whileisPrimeFermatacak{ acak = bilanganAcakpanjang;
} return acak;
} private boolean isPrimeFermatint angka{
banyakPercobaan = 0; banyakPercobaan = String.valueOfangka.length;
ifbanyakPercobaan 4{ banyakPercobaan = 4;
} hasilPangkat = 0;
pangkat = angka - 1; angkaAcak = 0;
lakukan percobaan sebanyak n kali forint i = 0; i banyakPercobaan; i++{
angkaAcak = randGen.nextIntangka; hasilPangkat = modExpangkaAcak, pangkat, angka;
ifhasilPangkat = 1{ jika ditemukan hasil yang bukan 1 maka angka bukan prima
return false; }
} jika untuk semua percobaan menghasilkan 1 maka angka adalah
prima. return true;
}
6. Ambil bilangan α sebagai akar primitive mod p. Misalkan nilai α adalah 11.
7. Ambil bilangan acak
a
dengan syarat
a
harus berada dalam rentang β≤
a
p-1. Misalkan nilai a adalah 2291.
8. Hitung nilai x = α
a
mod p = 11
2291
mod 2399 = 166
Hasil dari algoritma ini adalah kunci publik: tripel
p,
α, x yaitu 2399, 11, 166 yang dapat diumumkan ke bublik dan kunci privat: pasangan
p,a
yaitu 2399, 2291 yang harus dirahasiakan. Alur proses pembangkitan kunci dapat dijelaskan pada
flowchart
seperti Gambar 3.10.
Gambar 3.10
Flowchart
Alur proses pembangkit kunci
3.3.4 Alur Proses Enkripsi ElGamal
Langkah-langkah dalam mengenkripsi pesan sebagai berikut : 1.
Terima kunci publik
p
, α, x yaitu 2399, 11, 166.
Start
Bangkitkan bilangan prima,
α
dan a
Uji dengan Fermat
a
p-1
mod p
ya
tid ak
Mengambil nilai
α
dan a Menghitung
x = α
a
mod p
Kunci publik p,
α dan x Kunci privat a
end
2. Plainteks
m
disusun menjadi blok- blok m1, mβ, …, mp-1 sedemikian sehingga
setiap blok merepresentasikan nilai di dalam rentang 0 sampai p – 1.
Contoh: Plaintext
: WIN →�
1
=W → uba� ��njad� b��angan ASCII �a��u �
2
=I → uba� ��njad� b��angan ASCII �a��u �
3
=N → ubah menjadi bilangan ASCII yaitu 78
3. Ubah nilai blok pesan ke dalam nilai ASCII.
4. Ambil sebuah bilangan asli
b
p-1. Misalkan nilai b adalah 100 5.
Hitung y = α
b
mod p
c
= mx
b
mod p mod p
Contoh : y = 11
100
mod 2399 = 914
c
1
= 87166
100
mod 2399mod 2399 = 835
c
2
= 73166
100
mod 2399mod 2399 = 1390
c
3
= 78166
100
mod 2399mod 2399 = 335
6. Pasangan
y
dan
c
adalah cipherteks untuk blok pesan
m
. Jadi, ukuran cipherteks dua kali ukuran plainteksnya.
Adapun pseudocode untuk proses enkripsi adalah :
BigInteger gamma; BigInteger delta;
char chr; public String getEnkripsiString chrASCII, String rnd,
BigInteger g, BigInteger p, BigInteger y, String pesan { for int i = 0; i pesan.length; i++ {
BigInteger m = new BigIntegerchrASCII; BigInteger k = new BigIntegerrnd;
gamma = g.modPowk, p;
delta = y.powk.intValue.modp.multiplym.modp; }
return gamma.toString + + delta.toString+ ; }
Alur proses enkripsi menggunakan algoritma ElGamal dapat dijelaskan pada
flowchart
seperti Gambar 3.11
Gambar 3.11
Flowchart
Alur proses enkripsi ElGamal.
3.3.5 Alur Proses Dekripsi ElGamal
Langkah-langkah dalam mendekripsi pesan: 3.
Terima
y,c
dari sender 4.
Gunakan kunci privat
a
untuk mendekripsi
chipertext y
dan
c
menjadi plaintext
m
dengan rumus:
Z = y
p-1-a
mod p
dan
M = c.z mod p.
Konversikan bilangan
m
ke dalam karakter sesuai dengan kode ASCII
Masukkan kunci publik
p, α,x
end start
Masukkan plainteks
Enkripsikan teks
Hitung c y sebagai cipherteks
Cipherteks
Contoh : Z
= y
2399-1-2291
mod 2399 = 914
107
mod 2399 = 523
M
1
= 835 x 523 mod 2399 = 87
W M
2
= 1390 x 523 mod 2399 = 73
I M
3
= 335 x 523 mod 2399 = 78
N Adapun pseudocode untuk proses dekripsi adalah :
public char getDekripsiString nGamma, String nDelta, BigInteger p, BigInteger x, String pesan {
y = Integer.valueOfnGamma; c = Integer.valueOfnDelta;
pemodulo = p.intValue; pangkat = p.intValue - 1 - x.intValue;
z = this.modExpy, pangkat, pemodulo; m = this.modExpc z, 1 , pemodulo;
chr = char m; return chr;
}
Alur proses dekripsi menggunakan algoritma ElGamal dapat dijelaskan pada
flowchart
seperti Gambar 3.12.
Gambar 3.12
Flowchart
Alur proses dekripsi ElGamal
3.3.6 Alur Proses Kompresi Elias Gamma Code
Untuk proses kompresi menggunakan
Elias Gamma Code
kita merujuk pada tabel
Elias Gamma Code.
Dimana
Elias Gamma
ini hanya cocok diterapkan untuk bilangan desimal 1 hingga 15 karena pengkodean kelima belas bilangan ini hanya memerlukan jumlah
bit
1 hingga 7
bit
sehingga efisiensi penyimpanan di dapat. Contoh:
Terdapat
file
teks yang berisikan
string
“WIN”. Untuk ukuran
String
dapat dilihat pada Tabel 3.1.
start Masukkan
kunci privat a
plainteks
end Masukkan
cipherteks
Dekripsikan pesan Z = y
p-1-a
mod p m
j
= z c mod p
Mengkonversikan pesan m kedalam
tabel ASCII
Tabel 3.1.
String
yang Belum Dikompresi char ASCII
Code
ASCII
Code
Binary Bit
Frek Bit x Frek
W 87
01010111 8
1 8
I 73
01001001 8
1 8
N 78
01001110 8
1 8
Total 24
Proses kompresi untuk
Elias Gamma Code
dapat dilihat pada Tabel 3.2 Tabel 3.2.
String
yang Sudah Dikompresi Dengan Elias Gamma Code char
Elias Gamma Code Bit
Frek Bit x Frek
W 1
1 1
1 I
001 3
1 3
N 011
3 1
3 Total
7
Pada proses dekompresinya, sebelum ditulis ke sebuah
file
hasil kompresi dilakukan penambahan bit-bit
padding
dan
flagging
diakhir
String
bit. Bit-bit itu dihasilkan dari panjang
String
bit itu sendiri apakah habis dibagi delapan dan berapa sisanya jika dibagi delapan. Karena jumlah
String
bit 7 tidak habis dibagi delapan. Maka dapat dibuat
padding
“0” dan
flaggingnya
adalah “00000001” menjadi“1001011000000001”.
Sehingga total bit seluruhnya setelah penambahan
padding
dan
flagging
adalah 16 bit. Komputer akan mencari bit hasil kompresi kedalam kamus untuk dibentuk
string.
Adapun pseudocode untuk proses kompresi adalah :
Private EliasGammaString st { int[] freq = countFreqst;
String charset = getCharSetst; t = charset.length;
InsertionSortfreq, charset; freq = fr;
charset = cs; eg = new String[t];
eg[0] = 1; for int i = 1; i t; i++{
String b = dec2bini + 1; M = b.length;
StringBuffer u = new StringBuffer; for int j = 1; j M; j++
u.append0; u.append1;
StringBuffer s1 = new StringBuffer; for int j = 0; j M; j++
s1.appendb.charAtj.appendu.charAtj; StringBuffer s = new StringBuffers1.substring1,
s1.length; eg[i] = s.toString;
} }
Proses kompresi sendiri didasarkan pada bahwa isi
file
akan dibaca secara per
byte
8
bit
sehingga menghasilkan nilai pembacaan antara 0 hingga 255. Alur proses kompresi menggunakan algoritma
Elias Gamma Code
dapat dijelaskan pada
flowchart
seperti Gambar 3.13.
Gambar 3.13
Flowchart
Alur proses kompresi
Elias Gamma Code
start
Input file yang akan
dikompresi Lakukan
pembacaan informasi file
Tiap karakter akan dikodekan sesuai
dengan tabel kode Gamma
Hasil Kompresi
Simpan file hasil kompresi
end
Proses dekompresi data pada algoritma
Elias Gamma Code
tidak jauh berbeda dengan proses kompresinya. Proses dekompresi dapat dilakukan secara langsung dengan
suatu tabel. Dengan cara melakukan penelusuran untuk menemukan angka 0 sehingga sehingga n = 1.
Adapun pseudocode untuk proses dekompresi adalah :
Private decompressString stb, String c, String[]
s { StringBuffer st
= new StringBuffer; StringBuffer bit = new StringBuffer;
StringBuffer stb2; t =
stb.length; pad
= bin2decstb.substringt - 8, t; stb2 = new StringBufferstb.substring0, t - pad - 8;
for int i = 0; i stb2.length; i++ {
bit.appendstb2.charAti; if Arrays.asLists.containsbit.toString {
x = Arrays.asLists.indexOfbit.toString; st.appendc.charAtx;
bit = new StringBuffer; }
} return st.toString;
}
3.4 Perancangan Antarmuka Interface