Perancangan Sistem ANALISIS DAN PERANCANGAN SISTEM

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