• Tidak ada hasil yang ditemukan

BAB 5 : KESIMPULAN DAN SARAN

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= (m(xb mod p)mod 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

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 bangkitkanPrima(int panjang){

acak = bilanganAcak(panjang); while(!isPrimeFermat(acak)){ acak = bilanganAcak(panjang); } return acak; }

private boolean isPrimeFermat(int angka){ banyakPercobaan = 0; banyakPercobaan = String.valueOf(angka).length(); if(banyakPercobaan < 4){ banyakPercobaan = 4; } hasilPangkat = 0; pangkat = angka - 1; angkaAcak = 0;

// lakukan percobaan sebanyak n kali

for(int i = 0; i < banyakPercobaan; i++){

angkaAcak = randGen.nextInt(angka);

hasilPangkat = modExp(angkaAcak, pangkat, angka);

if(hasilPangkat != 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 = (m(xb mod p)) mod p Contoh : y= 11 100 mod 2399 = 914 c1 =(87(166100 mod 2399))mod 2399 = 835 c2 = (73(166100 mod 2399))mod 2399 = 1390 c3 = (78(166100 mod 2399))mod 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 getEnkripsi(String chrASCII, String rnd, BigInteger g, BigInteger p, BigInteger y, String pesan) {

for (int i = 0; i < pesan.length(); i++) { BigInteger m = new BigInteger(chrASCII); BigInteger k = new BigInteger(rnd); gamma = g.modPow(k, p);

delta = ((y.pow(k.intValue()).mod(p)).multiply(m)).mod(p); }

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 M1 = 835 x 523 mod 2399 = 87  W M2 = 1390 x 523 mod 2399 = 73  I M3 = 335 x 523 mod 2399 = 78N

Adapun pseudocode untuk proses dekripsi adalah :

public char getDekripsi(String nGamma, String nDelta, BigInteger p, BigInteger x, String pesan) {

y = Integer.valueOf(nGamma); c = Integer.valueOf(nDelta); pemodulo = p.intValue();

pangkat = p.intValue() - 1 - x.intValue(); z = this.modExp(y, pangkat, pemodulo); m = this.modExp(c * z, 1 , pemodulo); chr = (char) m;

return chr; }

Alur proses dekripsi menggunakan algoritma ElGamal dapat dijelaskan pada flowchart

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 mj = 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 EliasGamma(String st) {

int[] freq = countFreq(st); String charset = getCharSet(st); t = charset.length(); InsertionSort(freq, charset); freq = fr; charset = cs; eg = new String[t]; eg[0] = "1";

String b = dec2bin(i + 1);

M = b.length();

StringBuffer u = new StringBuffer();

for (int j = 1; j < M; j++)

u.append("0");

u.append("1");

StringBuffer s1 = new StringBuffer();

for (int j = 0; j < M; j++)

s1.append(b.charAt(j)).append(u.charAt(j));

StringBuffer s = new StringBuffer(s1.substring(1,

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

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 decompress(String stb, String c, String[] s) {

StringBuffer st = new StringBuffer();

StringBuffer bit = new StringBuffer(); StringBuffer stb2;

t = stb.length();

pad = bin2dec(stb.substring(t - 8, t));

stb2 = new StringBuffer(stb.substring(0, t - pad - 8));

for (int i = 0; i < stb2.length(); i++) {

bit.append(stb2.charAt(i));

if (Arrays.asList(s).contains(bit.toString())) { x = Arrays.asList(s).indexOf(bit.toString()); st.append(c.charAt(x));

bit = new StringBuffer(); }

}

return st.toString(); }

3.4 Perancangan Antarmuka (Interface)

Perancangan Antarmuka (Interface) merupakan sarana interaksi antara pengguna dan sistem. Hal ini berfungsi untuk memudahkan pengguna dalam melakukan proses sistem.

3.4.1. Rancangan Halaman Utama

Halaman menu utama adalah halaman yang muncul pertama kali saat sistem dijalankan. Halaman ini memiliki empat tombol, yaitu Key Generator, Enkripsi, Dekripsi,Kompresi dan Dekompresi. Rancangan halaman tersebut dapat dilihat pada Gambar 3.14

Gambar 3.14 Rancangan Halaman Utama

Keterangan :

1. JLabel untuk menampilkan judul skripsi. 2. JLabel untuk menampilkan logo usu.

3. JLabel untuk menampilkan Fakultas, Program Studi, Universitas, Kota dan Tahun.

4. Jbutton untuk menampilkan halaman pada proses pembangkit kunci. 5. Jbutton untuk menampilkan halaman pada proses enkripsi.

6. Jbutton untuk menampilkan halaman pada proses dekripsi. 7. Jbutton untuk menampilkan halaman pada proses kompresi. 8. Jbutton untuk menampilkan halaman pada proses dekompresi.

3.4.2 Rancangan Halaman Key Generator

Halaman Key Generator untuk mengakses nilai kunci publik dan kunci privat, memiliki empat tombol, yaitu Bangkitkan Kunci, Simpan Kunci Publik, Simpan Kunci Privat dan Kembali ke Menu Utama. Rancangan halaman tersebut dapat dilihat pada Gambar 3.15

Gambar 3.15 Rancangan Key Generator

Keterangan :

1. jLabel untuk keterangan Pembangkit Kunci.

2. jLabel untuk keterangan p.

3. jLabel untuk keterangan alpha.

4. jLabel untuk keterangan a.

5. jLabel untuk keterangan x.

6. JTextField untuk menampilkan informasi nilai p. 7. JTextField untuk menampilkan informasi nilai alpha. 8. JTextField untuk menampilkan informasi nilai a. 9. JTextField untuk menampilkan informasi nilai x. 10. jButton untuk melakukan proses bangkitkan kunci.

11. jButton untuk melakukan proses simpan kunci publik.

12. jButton untuk melakukan proses simpan kunci privat.

13. jButton untuk melakukan proses kembali ke menu utama.

3.4.3 Rancangan Halaman Enkripsi

Halaman enkripsi untuk melakukan proses penyandian file, terdapat dua panel dalam sebuah form yaitu panel untuk enkripsi file teks dan panel untuk pembangkit kunci. .

Gambar 3.16 Rancangan Halaman Enkripsi

Keterangan :

1. jPanel untuk menampilkan informasi bagian dari proses enkripsi.

2. jLabel untuk keterangan file teks.

3. JTextField untuk menampilkan informasi lokasi Browse File. 4. JButton untuk melakukan proses Browse File.

5. jLabel untuk keterangan Isi File.

6. txtArea untuk menampilkan informasi isi file yang telah diinput.

7. jButton untuk melakukan proses Enkripsi

8. jButton untuk mengembalikan system seperti semula.

9. jLabel untuk keterangan cipherteks.

10.txtArea untuk menampilkan informasi hasil proses enkripsi

11.jButton untuk melakukan proses Save File.

12.jPanel untuk menampilkan informasi bagian dari proses pembangkit kunci.

13.jLabel untuk keterangan pembangkit kunci.

14.jLabel untuk keterangan p.

15.JTextField untuk menampilkan informasi nilai p. 16.jLabel untuk keterangan alpha

17.JTextField untuk menampilkan informasi nilai alpha.

19.JTextField untuk menampilkan informasi nilai x

20.jButton untuk melakukan proses Masukkan Kunci Publik. 21.jButton untuk melakukan proses kembali ke menu utama. 3.4.4 Rancangan Halaman Dekripsi

Halaman dekripsi untuk melakukan proses pengembalian file menjadi file asli. Terdapat dua panel dalam sebuah form yaitu panel untuk dekripsi file teks dan panel untuk pembangkit kunci.Rancangan halaman enkripsi tersebut dapat dilihat pada Gambar 3.17

Gambar 3.17 Rancangan Halaman Dekripsi

Keterangan :

1. jPanel untuk menampilkan informasi bagian dari proses dekripsi.

2. jLabel untuk keterangan file teks.

3. JTextField untuk menampilkan informasi lokasi Browse File. 4. JButton untuk melakukan proses Browse File.

5. jLabel untuk keterangan cipherteks.

6. txtArea untuk menampilkan informasi isi file yang telah diinput.

7. jButton untuk melakukan proses dekripsi

8. jButton untuk mengembalikan system seperti semula.

9. jLabel untuk keterangan plainteks.

11.jButton untuk melakukan proses Save File.

12.jPanel untuk menampilkan informasi bagian dari proses pembangkit kunci.

13.jLabel untuk keterangan pembangkit kunci.

14.jLabel untuk keterangan p.

15.JTextField untuk menampilkan informasi nilai p. 16.jLabel untuk keterangan a.

17.JTextField untuk menampilkan informasi nilai a.

18.jButton untuk melakukan proses Masukkan Kunci Privat. 19.jButton untuk melakukan proses kembali ke menu utama. 3.4.5 Rancangan Halaman Kompresi

Halaman kompresi untuk melakukan proses pemampatan file menjadi ukuran lebih kecil dari file sebelumnya. Rancangan halaman kompresi tersebut dapat dilihat pada Gambar 3.18

Gambar 3.18 Rancangan Halaman Kompresi

Keterangan :

1. jPanel untuk menampilkan informasi bagian dari proses kompresi.

2. jLabel untuk menampilkan keterangan File Teks Kompresi.

3. JTextField untuk menampilkan informasi lokasi Browse File. 4. JButton untuk melakukan proses Browse File.

6. txtArea untuk menampilkan informasi isi file yang telah diinput.

7. jButton untuk melakukan proses kompresi

8. jButton untuk mengembalikan sistem seperti semula. 9. jButton untuk melakukan proses kembali ke menu utama.

3.4.6 Rancangan Halaman Dekompresi

Halaman dekompresi untuk melakukan proses pengembalian file yang telah dimampatkan. Rancangan halaman dekompresi tersebut dapat dilihat pada Gambar 3.19

Gambar 3.19 Rancangan Halaman Dekompresi

Keterangan :

1. jPanel untuk menampilkan informasi bagian dari proses dekompresi.

2. jLabel untuk menampilkan keterangan File Teks Dekompresi.

3. JTextField untuk menampilkan informasi lokasi Browse File. 4. JButton untuk melakukan proses Browse File.

5. jLabel untuk keterangan isi file.

6. txtArea untuk menampilkan informasi isi file yang telah diinput.

7. jButton untuk melakukan proses dekompresi

8. jButton untuk mengembalikan sistem seperti semula. 9. jButton untuk melakukan proses kembali ke menu utama.

BAB 4

Dokumen terkait