## Implementasi Algoritma Prediction By Partial Matching (Ppm) Pada Kompresi File Teks Terenkripsi Elgamal

## Relina Hutagalung
Program Studi Teknik Informatika, STMIK Budi Darma, Medan, Indonesia Jalan Sisingamangaraja No. 338 Medan, Indonesia
Email : Relinahutagalung1234@gmail.com

## Abstrak
Keamanan komputer merupakan suatu cabang teknologi yang dikenal dengan nama keamanan informasi yang diterapkan pada komputer.  Sasaran  keamanan  komputer  antara  lain  adalah  sebagai  perlindungan  informasi  terhadap  pencurian  informasi. Penerapan  keamanan  komputer  merupakan  sebuah  upaya  yang  dilakukan  untuk  mengamankan  kinerja  dan  proses komputerisasi  agar  tidak  digunakan,  dimodifikasi,  diinterupsi  dan  diganggu  oleh  pihak  yang  tidak  berwenang.  Sedangkan kompresi data merupakan salah satu aspek penting perkembangan teknologi informasi. Kompresi adalah pengubahan data ke dalam bentuk yang memerlukan bit yang lebih sedikit, biasanya dilakukan agar data dapat disimpan atau dikirimkan dengan lebih  efisien.  Kecepatan  dalam  proses  pengiriman  informasi  merupakan  hal  yang  sangat  diharapkan  dengan  menggunakan teknologi yang ada saat ini dan akan menjadi terhambat jika file yang berisi informasi tersebut memiliki ukuran yang besar. Tidak hanya kecepan, factor keamanan merupakan hal yang sangat penting dalam pertukaran informasi. Hal ini dikarenakan banyak  pihak-pihak  tidak  bertanggung  jawab  yang  ingin  mencuri  informasi  dan  dapat  disalahgunakan  oleh  pihak  tersebut. Teknik  kompresi  menggunakan  algoritma  Prediction  by  Partial  Matching  dapat  mengatasi  ukuran  file  yang  besar  karena dengan menggunakan algoritma tersebut ukuran file dapat diperkecil. Sedangkan untuk meningkatkan keamanan dari informasi rahasia, maka dilakukan penyandian terhadap file teks menggunakan algoritma ElGamal yang memiliki tingkat keamanan yang cukup  kuat  karena  kesulitan  dalam  menghitung  logaritma  diskrit  untuk  memecahkannya.  Hasil  akhir  yang  didapatkan merupakan sebuah file teks yang sudah tersandikan dan memiliki ukuran yang lebih kecil.
Kata Kunci : Kriptografi, Kompresi, PPM,Elgamal.

## Abstract
Computer  security  is  a  branch  of  technology  known  as  information  security  applied  to  computers.  The  goal  of  computer security is to protect information against information theft. The application of computer security is an effort made to secure performance and computerized processes so that they are not used, modified, interrupted and disturbed by unauthorized parties. While  data  compression  is  one  of  the  important  aspects  of  the  development  of  information  technology.  Compression  is converting data into forms that require fewer bits, usually done so that data can be stored or sent more efficiently. The speed in the process of sending information is something that is highly expected by using existing technology and will be hampered if  the  file  containing  the  information  has  a  large  size.  Not  only  kecepan,  security  factors  are  very  important  things  in  the exchange of information. This is because many irresponsible parties want to steal information and can be misused by that party. The compression technique using the Prediction by Partial Matching algorithm can overcome large file sizes because by using the algorithm the file size can be minimized. Whereas to improve the security of confidential information, then encoding text files using the ElGamal algorithm  which  has a level of security that is quite strong because of the difficulty  in  calculating discrete logarithms to solve them. The final result is a text file that has been encoded and has a smaller size.
Keywords: Cryptography, Compression, PPM, Elgamal.

## 1. PENDAHULUAN
Keamanan  komputer  merupakan  suatu  cabang  teknologi  yang  dikenal  dengan  nama  keamanan  informasi  yang diterapkan  pada  komputer.  Sasaran  keamanan  komputer  antara  lain  adalah  sebagai  perlindungan  informasi terhadap  pencurian  informasi.  Penerapan  keamanan  komputer  merupakan  sebuah  upaya  yang  dilakukan  untuk mengamankan kinerja dan proses komputerisasi agar tidak digunakan, dimodifikasi, diinterupsi dan diganggu oleh pihak  yang  tidak  berwenang.  Sedangkan  kompresi  data  merupakan  salah  satu  aspek  penting  perkembangan teknologi informasi. Kompresi adalah pengubahan data ke dalam bentuk yang memerlukan bit yang lebih sedikit, biasanya dilakukan agar data dapat disimpan atau dikirimkan dengan lebih efisien.
File merupakan kumpulan berbagai informasi yang berhubungan dan juga tersimpan di dalam komputer. File  memiliki  beberapa tipe data  yang terdiri dari  numeric, character dan binary. File di dalam komputer pada umumnya  disimpan  di  dalam  suatu  folder  tertentu  tergantung  pemilik  komputer  menyimpannya.  Setiap  file memiliki ekstensi masing-masing tergantung jenis file itu sendiri, ada yang berbentuk teks, video dan audio. File teks merupakan kumpulan informasi yang berbentuk teks.
Kecepatan  dalam  proses  pengiriman  informasi  merupakan  hal  yang  sangat  diharapakan  dengan  menggunakan teknologi yang ada saat ini dan akan menjadi terhambat jika file yang berisi informasi tersebut memiliki ukuran yang  besar.  Tidak  hanya  kecepatan,  faktor  keamanan  merupakan  hal  yang  sangat  penting  dalam  pertukan informasi. Hal  ini dikarenakan banyak pihak-pihak tidak bertanggungjawab  yang  ingin  mencuri  informasi  dan dapat disalahgunakan oleh pihak tersebut.
Teknik  kompresi  merupakan  salah  satu  cara  dalam  mengatasi  ukuran  file  yang  besar  karena  dengan menggunakan  teknik  tersebut  ukuran  file  dapat  diperkecil.  Salah  satu  algoritma  yang  dapat  digunakan  adalah
dengan  algoritma  Prediction  by  Partial  Matching  merupakan  metode  prediksi  berbasis  konteks  yang  penting, algoritma ini menggunakan 2 tahap, tahap pertama input-an akan dipecah menjadi beberapa konteks dan dilakukan penghitungan  frekuensi  probabilitas kemunculannya. Selanjutnya tahap kedua  yaitu proses encoding dilakukan dengan menggunakan Arithmetic Coding. Algoritma ini termasuk dalam kelas lossless compression yaitu tidak menghilangkan informasi sedikitpun hanya mewakilkan beberapa informasi yang sama, ini dibantu juga dengan jurnal  internasional  sebagai  jurnal  pembantu  yaitu  “Web  Prefetching  Through  Efficient  Prediction  by  Partial Marching”.  Untuk memenuhi faktor keamanan dalam pengiriman informasi dapat digunakan teknik kriptografi yaitu  salah  satu  teknik  yang  dapat  mengubah  isi  file  menjadi  kode-kode tertentu  yang  tidak  dapat dimengerti. Salah  satu  algoritma  yang  dapat  digunakan  adalah  algoritma  ElGamal,  algoritma  ini  memiliki  keamanan  yang terletak pada kesulitan dalam menghitung logaritma diskrit.
Proses  yang  akan  dilakukan  di  dalam  penelitian  ini  adalah  file  teks  akan  dienkripsi  terlebih  dahulu menggunakan algoritma ElGamal, kemudian file yang sudah terenkripsi tersebut akan dikompresi menggunakan algoritma Prediction by Partial Matching, sehingga didapatkan sebuah file yang sudah terenkripsi dan memiliki ukuran yang lebih kecil dari ukuran aslinya.

## 2. METODE PENELITIAN

## 2.1 Algoritma Prediction by Partial Matching
Algoritma Prediction by Partial Matching (PPM) adalah sebuah teknik adaptive statistical data  compression  yang berdasarkan  pada  context  modeling dan teknik prediksi. Model PPM menggunakan seperangkat simbol pada deretan simbol yang belum dikompresi untuk memprediksikan deretan simbol selanjutnya yang akan dikompresi. Algoritma  PPM  ditemukan  dan  dikembangkan  oleh  John  Cleary  dan  Ian  Witten,  selanjutnya  algoritma  ini diimplementasikan menjadi suatu program kompresi oleh Alistair Moffat pada bulan Juli tahun 1987 [9].   Pada proses,  PPM  menjalankan  rangkaian  model  deret  konteks,  dari  0  hingga  nilai  maksimum  k  yang  ditetapkan sebelumnya,  untuk  memprediksi  karakter-karakter  berikutnya.  Untuk tiap  statistik  model  konteks  order  i  yang memuat semua simbol yang telah tersusun, setiap panjang i berikutnya dalam input dan berapa kali kejadiannya. Peluang kemungkinan dihitung dari statistik-statistik dengan cara setiap model, deret 0 hingga deret k, diperoleh dari distribusi peluang kemungkinan yang terpisah dan secara efektif disatukan ke dalam satu bagian. Model deret terbesar adalah salah satu model  yang secara default, digunakan untuk memprediksi  simbol awal.  Namun,  jika suatu simbol yang tidak diketahui terhubung dengan suatu simbol “lepas”, maka model lebih kecil akan digunakan untuk prediksi. Proses akan berlanjut hingga salah satu model deret tertentu memprediksikan simbol berikutnya [9].
Masalah utama dalam pembentukan string adalah membangun struktur data dimana semua konteks saling berhubungan  dari  setiap  simbol  ke  simbol  lainnya.  Struktur  yang  digambarkan  disini  adalah  suatu jenis  pohon tertentu disebut juga sebagai tree. Tree adalah pohon dimana struktur bercabang dari setiap tingkat ditentukan oleh sebagian  item data, tidak oleh keseluruhan  item. Dalam proses  ini, deretan konteks N adalah suatu string  yang mencakup semua konteks dengan deret-deret N-1 hingga 0, sehingga setiap konteks secara efektif menambahkan satu simbol pada pohon [9].
Berikut langkah-langkah dalam sebuah pembentukan pohon string dalam algoritma PPM [9]:
1. Masukkan sebuah karakter pada kalimat yang akan di-input  ke  dalam  pohon PPM sebagai node baru pada level 1.
2. Masukkan karakter selanjutnya pada kalimat yang akan di-input. Periksa pohon PPM tersebut, apakah ada node jembatan atau tidak pada pohon PPM, jika ya tambahkan karakter sebagai anak node dari jembatan dan jika tidak, tambahkan karakter sebagai node baru pada level 1.
3. Periksa node baru yang ditambahkan pada pohon PPM, apakah node tersebut terletak pada level 1, jika ya, maka proses telah  selesai dan  jika tidak, cari  node terakhir pada pohon PPM  yang  mengalami perubahan pada level 1 kemudian tambahkan node yang di-input sebagai anak dari node tersebut.
4. Periksa node-node pada level 1, apakah ada karakter yang sama dengan karakter node yang di-input, jika ya, tambahkan node. Jika tidak, buat node baru pada level 1.
5. Ulangi  langkah  no  2,  3  dan  4  sampai  karakter-karakter  yang  ada  pada  kalimat  yang  akan  di-input  telah digunakan pada pohon PPM.

## 2.2   Algoritma ElGamal
Algoritma ElGamal merupakan algoritma dalam kriptografi yang termasuk dalam kategori algoritma asimetris. Keamanan algoritma ElGamal terletak pada kesulitan penghitungan logaritma diskrit pada bilangan modulo prima yang  besar sehingga upaya untuk menyelesaikan masalah logaritma ini menjadi sangat  sukar. Algoritma ElGamal mempunyai  kunci  publik  berupa  tiga  pasang  bilangan  dan  kunci  rahasia  berupa  satu  bilangan.  Algoritma  ini mempunyai kerugian pada cipherteksnya yang mempunyai panjang dua kali lipat dari plainteksnya. Akan tetapi, algoritma  ini  mempunyai  kelebihan  pada  enkripsi.  Untuk  plainteks  yang  sama,  algoritma  ini  memberikan
cipherteks yang berbeda (dengan kepastian yang dekat) setiap kali plainteks di enkripsi. Algoritma ElGamal terdiri dari tiga proses, yaitu proses pembentukan kunci, proses enkripsi dan proses dekripsi. Algoritma ini merupakan cipher blok,  yaitu  melakukan  proses  enkripsi  pada  blok-blok  plainteks  dan  menghasilkan  blok-blok  cipherteks yang kemudian dilakukan proses dekripsi dan hasilnya digabungkan [10].
Pembentukan kunci terdiri atas pembentukan kunci publik dan kunci rahasia. Pada proses ini dibutuhkan sebuah bilangan prima ( p ) yang digunakan untuk membentuk grup Zp*, elemen primitive α dan sembarang a  { 0,1,…., p -2}. Kunci publik algoritma ElGamal terdiri atas pasangan 3 bilangan ( p , α, β) di mana: β = α a mod p .......................................................................................................................................... (1) Sedangkan  kunci  rahasianya  adalah  bilangan a tersebut.  Proses  pembentukan  kunci  untuk  algoritma ElGamal terdiri atas [10]:
1. Penentuan bilangan prima aman yang bernilai besar
2. Penentuan elemen primitif.
3. Pembentukan kunci berdasarkan bilangan prima aman dan elemen primitif.
Tujuan  penentuan  bilangan  prima  aman  ini  adalah  untuk  mempermudah  dalam  penentuan  elemen  primitif. Digunakan bilangan prima p sehingga: p = 2. q + 1............................................................................................................................................. (2) Dengan q adalah bilangan prima sehingga nilai minimal p adalah  5  dan q adalah  2.  Bilangan  prima p tersebut  disebut  sebagai  bilangan  prima  aman.  Langkah  penentuan  bilangan  prima tersebut dinyatakan sebagai berikut [10]:
1. Tentukan bilangan prima p ≥ 5
2. Hitung q dengan persamaan p = 2. q +1 3. Jika q merupakan bilangan prima, maka p merupakan bilangan prima aman. 4. Jika q bukan merupakan bilangan prima, maka p bukan merupakan bilangan prima aman. Untuk  menguji  keprimaan  suatu  bilangan,  digunakan  suatu  metode  yang  disebut  Teorema  Fermat  yaitu  jika x adalah bilangan prima dan y adalah bilangan bulat yang tidak habis dibagi dengan x , yaitu PBB( y,x ) = 1, maka: y x- 1 = 1 (mod p ) Proses enkripsi menggunakan kunci publik ( p,α,β ) dan sebuah bilangan integer acak k ( k ϵ {0,1,…, p -1}) yang dijaga kerahasiannya oleh penerima yang mengenkripsi pesan. Untuk setiap karakter dalam pesan dienkripsi dengan  menggunakan  bilangan  k  yang  berbeda-beda.    Satu    karakter    yang    direpresentasikan  dengan menggunakan bilangan bulat ASCII akan  menghasilkan  kode  dalam bentuk blok yang terdiri atas dua nilai ( r, t ). Langkah-langkah dalam proses enkripsi[11], adalah sebagai berikut:
1. Ambil sebuah karakter dalam pesan yang akan dienkripsi dan ditransformasi karakter tersebut ke dalam kode ASCII sehingga diperoleh bilangan bulat M .
2. Hitung nilai r dan t dengan persamaan berikut: r = α k (mod p ) t = β k M (mod p ) 3. Diperoleh cipherteks untuk karakter M tersebut dalam blok ( r , t ) 4. Lakukan proses di atas untuk seluruh karakter dalam pesan termasuk karakter spasi.
Dekripsi dari cipherteks ke plainteks menggunakan kunci rahasia a yang disimpan kerahasiaannya oleh penerima pesan.
Teorema : Diberikan  ( p,  α,  β )  sebagai  kunci  public  dan a sebagai  kunci  rahasia  pada  algoritma ElGamal .  Jika  diberikan cipherteks ( r , t ), maka: M = t ( r a ) -1 mod p Dengan M adalah plainteks. Di mana nila: ( r a ) -1 = r -a = r p-1-a mod p . Langkah-langkah proses dekripsi algoritma ElGamal [10], adalah sebagai berikut:
1. Ambil sebuah blok cipherteks dari pesan yang telah dienkripsikan pengirim.
2. Dengan  menggunakan a yang  dirahasiakan  oleh  penerima,  hitung  nilai  plainteks  dengan  menggunakan persamaan M = t ( r a ) -1 mod p dan persamaan ( r a ) -1 = r -a = r p-1-a mod p.

## 3. ANALISA DAN PEMBAHASAN
Sistem yang akan dirancang terdiri dari empat proses secara garis besar, yaitu proses enkripsi dan dekripsi serta kompresi dan dekompresi. Proses enkripsi dan dekripsi menggunakan algoritma El Gamal, panjang plainteks yang akan dienkripsi maksimal 128 bit dan kunci yang digunakan maksimal 64 bit.  Kemudian hasil proses enkripsi akan  dikompresi  menggunakan  algoritma  Prediction  by  Partial  Matching.  File  yang  akan  dienkripsi  dan dikompresi adalah file yang berformat txt dan ukuran maksimal yang akan dikompresi maksimal adalah 5 MB.

## 3.1 Penerapan Algoritma El Gamal
Algoritma El Gamal terdiri dari tiga proses, yaitu proses pembentukan kunci, proses enkripsi dan proses dekripsi. Algoritma  ini  merupakan cipheri  block yaitu    melakukan  proses  enkripsi  pada  blok-blok plaintext dan menghasilkan blok-blok ciphertext yang kemudian hasilnya digabungkan. Langkah-langkah dalam proses enkripsi algoritma El Gamal dapat dilihat pada contoh berikut:
Plaintext : RELINAHUTAGALUNG Bilangan Prima (p) : 257 Bilangan random g : 17 Bilangan random x
: 11 1. Pembentukan kunci Setelah mengetahui bilangan prima (p) dan memilih dua buah bilangan acak g = 17 yang memenuhi syarat g < p dan x = 11 yang memenuhi syarat 1 ≤ x ≤ p – 2, kemudian hitung y dengan rumus: y   = g x mod p = 17 11 mod 257 = 34271896307633 mod 257 = 223
2. Penentuan bilangan prima aman besar
Langkah penentuan bilangan prima dapat dinyatakan sebagai berikut:
a. Tentukan bilangan prima p ≥ 5 p = 23 ≥ 5, memenuhi syarat
b. Hitung q dengan persamaan p = 2. q +1 q = 257 2 – 1 = 127
c. 127 adalah bilangan prima, maka 257 merupakan sebuah bilangan prima aman.
3. Potong plainteks jadi blok-blok M dan ubah ke dalam kode nilai decimal sebagai berikut:
M 0 = R = 82 M 8 = T = 84 M 1 = E = 69 M 9 = A = 65 M 2 = L = 76 M 10 = G = 71 M 3 = I = 73 M 11 = A = 65 M 4 = N = 78 M 12 = L = 76 M 5 = A = 65 M 13 = U = 85 M 6 = H = 72 M 14 = N = 78 M 7 = U = 85 M 15 = G = 71
4. Kemudian menentukan bilangan acak dan dimasukkan ke dalam blok-blok nilai m secara berurutan, sehingga menjadi:
k 0 = 27
k 4 = 23 k 8 = 75 k 12 = 66
k 1 = 105 k 5 = 90 k 9 = 27 k 13 = 56
k 2 = 13 k 6 = 41 k 10 = 67 k 14 = 45
k 3 = 117 k 7 = 55 k 11 = 78 k 15
= 70 5. Hitung a dengan rumus:
a = g k mod p Nilai M 0 : a 0 = 17 27 mod 257 = 1.6677113221686882875135357274155e+33 mod 257 = 34 a 1 = 17 105 mod 257 = 1.5744785367384051185939718625673e+129 mod 257 = 15 a 2 = 17 13 mod 257 = 9904578032905937 mod 257 = 197 a 3 = 17 117 mod 257 = 9.1732620754477003708702287973727e+143 mod 257 = 68 a 4 = 17 23 mod 257 = 19967568900859523802559065713 mod 257 = 120 a 5 = 17 90 mod 257 = 5.5005095627214485219420489181039e+110 mod 257
= 2 Lakukan perhitungan sampai  nilai a15
6. Hitung b dengan rumus: b i = y k .m mod p b 0 = 223 27 . 82 mod 257 = 2.0799129296138953806079199962524e+65 mod 257 = 202 b 1 = 223 105 . 69 mod 257 = 2.5754890679603413295540548639563e+248 mod 257 = 14 b 2 = 223 13 . 76 mod 257 = 2.5631664621994905228893406919071e+32 mod 257 = 56 b 3 = 223 117 . 73 mod 257 = 4.1208977315205257437750778933075e+276 mod 257 = 235 b 4 = 223 23 . 78 mod 257 = 8.0003033171097310686964030293703e+55 mod 257 = 54 b 5 = 223 90 . 65 mod 257 = 1.4466085612089014209224773974142e+213 mod 257 = 251
Lakukan perhitungan sampai  nilai b15
7. Setelah mendapatkan nilai a dan b, hasil perhitungan tersebut disusun dengan pola sebagai berikut:
a 0, b 0, a 1, b 1, a 2, b 2, a 3, b 3, a 4, b 4, a 5, b 5, a 6, b 6, a 7, b 7, a 8, b 8, a 9, b 9, a 10, b 10, a 11, b 11, a 12, b 12, a 13, b 13. Sehingga membentuk ciphertext : 34, 202, 15, 14, 197, 56, 68, 235, 120, 54, 2, 251, 15, 104, 120, 217, 223, 198, 34, 204, 30, 179, 8, 130, 32, 219, 241, 75, 197, 71, 129, 216 Jika dikonversi ke dalam karakter menjadi: "Ø¿Å}DÓxÜ `ôxKß:"`[30] sõ[32]Lñ?Ål[129]œ
3.2 Proses Kompresi Prediction By Partial Matching
Biasanya,  algoritma  kompresi  data  melakukan  penggantian  satu  atau  lebih  simbol input dengan  kode  tertentu. Berbeda  dengan  cara  tersebut,  algoritma  kompresi Prediction  by  partial  matching menggantikan  satu  deretan simbol input dengan  sebuah  bilangan floating point .  Semakin  panjang  dan  semakin  kompleks  pesan  yang dikodekan, semakin banyak bit yang diperlukan untuk keperluan tersebut. Output dari algoritma kompresi PPM ini adalah satu angka yang lebih kecil dari 1 dan lebih besar atau sama dengan 0. Angka ini secara unik dapat di- decode sehingga menghasilkan deretan simbol yang  dipakai  untuk  menghasilkan angka tersebut.
Untuk  menghasilkan  angka output tersebut,  tiap  simbol  yang  akan  di- encode diberi  satu  set    nilai probabilitas. Ciphertext yang  sudah  didapatkan  dari  proses enkripsi menerapkan algoritma ElGamal , kemudian  akan dibuatkan tabel probabilitas dari kemunculan karakter, sebagai berikut:
Tabel 1. Tabel Probabilitas untuk Ciphertext Karakter Probabilitas " 2/32 Ø 1/32 [15] 2/32 ¿ 1/32 Å 2/32 } 1/32 D 1/32 Ó 1/32 x 2/32 Ü 1/32 [2] 1/32 ` 2/32 ô 1/32
K 1/32 ß 1/32 : 1/32 [30] 1/32 s 1/32 [34] 1/32 õ 1/32 [32] 1/32 L 1/32 ñ 1/32 ? 1/32 1 1/32 [129] 1/32 œ 1/32
Setelah probabilitas tiap karakter diketahui, karakter akan diberikan range tertentu yang nilainya berkisar antara 0  dan  1,  sesuai  dengan  probabilitas  yang  ada.  Dalam  hal  ini  tidak  ada  urut-urutan  penentuan  segmen,  asalkan antara encoder dan decoder melakukan hal yang sama. Perlu dicatat bahwa tiap karakter melingkupi range yang disebutkan kecuali bilangan yang memiliki nilai yang tinggi.
Tabel 2. Range Simbol untuk Kata Karakter Probabilitas Range " 2/32 0.94 – 1.00 Ø 1/32 0.91 – 0.94 [15] 2/32 0.85 – 0.91 ¿ 1/32 0.82 – 0.85 Å 2/32 0.76 – 0.82 } 1/32 0.73 – 0.76 D 1/32 0.70 – 0.73 Ó 1/32 0.67 – 0.70 x 2/32 0.61 – 0.67 Ü 1/32 0.58 – 0.61 [2] 1/32 0.55 – 0.58 ` 2/32 0.48 – 0.55 ô 1/32 0.45 – 0.48 K 1/32 0.42 – 0.45 ß 1/32 0.39 – 0.42 : 1/32 0.36 – 0.39 [30] 1/32 0.33 – 0.36 s 1/32 0.27 – 0.3 [34] 1/32 0.24 – 0.27 õ 1/32 0.21 - 0.24 [32] 1/32 0.18 – 0.21 L 1/32 0.15 – 0.18 ñ 1/32 0.12 – 0.15 ? 1/32 0.09 -  0.12 1 1/32 0.06 – 0.09 [129] 1/32 0.03 – 0.06 œ 1/32 0.00 – 0.03
Langkah-langkah algoritma prediction by partial matching adalah sebagai berikut: 1. Pembentukan pohon string
Berikut langkah-langkah dalam pembentukan pohon string algoritma PPM:
a. Masukkan sebuah karakter dalam kalimat yang akan di- input dalam pohon PPM sebagai node baru pada level 1.
Karakter : "Ø¿Å}DÓxÜ `ôxKß:"`[30] sõ[32]Lñ?Ål[129]œ
b. Masukkan karakter selanjutnya pada kalimat yang akan  di- input . "
Periksa pohon PPM tersebut, apakah ada node jembatan atau tidak pada pohon PPM, jika ya tambahkan karakter  sebagai  anak node dari  jembatan  dan  jika  tidak,  tambahkan  karakter  sebagai node baru  pada level 1.
c. Periksa node baru yang ditambahkan pada pohon PPM, apakah node tersebut terletak pada level 1, jika ya, maka proses selesai dan jika tidak, cari node terakhir pada pohon PPM yang mengalami perubahan pada level 1 kemudian tambahkan node yang di- input sebagai anak dari node tersebut. d. Periksa node-node pada level 1, apakah ada karakter yang sama dengan karakter node yang di- input , jika ya, tambahkan node . Jika tidak, buat node baru pada level 1.
e. Ulangi langkah no 2, 3 dan 4 sampai karakter-karakter yang ada pada kalimat yang akan di- input telah digunakan pada pohon PPM.
2. Proses encoding
Untuk melakukan proses encoding menggunakan rumus sebagai berikut: CR = High – low High = low + CR* High range Low = low + CR * low range Low merupakan output dari proses algoritma Prediction by Partia Matching Untuk ciphertext di atas, pertama ambil karakter ". High range (") = 1.00, Low range (") = 0.94 Nilai CR = 1-0.94 = 0.06 kemudian didapatkan nilai: High = 0.94 + 0.06*1.00 = 1.00 Low = 0.94 + 0.06*0.94 = 0.9964 kemudian diambil karakter Ø High range (Ø) = 0.94, Low range (Ø) = 0.91 Nilai CR = 0.94 – 0.91 = 0.03 kemudian didapatkan nilai: High = 0.91 + 0.03*0.94 = 0.9382 Low = 0.91 + 0.03*0.91 = 0.9373
dan seterusnya sampai semua karakter dihitung, sehingga didaptkan nilai encoding sebagai berikut:
Tabel 3. Hasil Proses Encoding PPM Karakter Low High CR " 0.9964 1.00 0.06 Ø 0.9373 0.9382 0.03 [15] 0.901 0.9046 0.06 ¿ 0.8446 0.8455 0.03 Å 0.8056 0.8092 0.06 } 0.7519 0.7528 0.03 D 0.721 0.7219 0.03 Ó 0.6901 0.691 0.03 x 0.6466 0.6502 0.06 Ü 0.5974 0.5983 0.03 [2] 0.5665 0.5674 0.03 ` 0.5088 0.513 0.06 ô 0.4635 0.4644 0.03 K 0.4326 0.4335 0.03 ß 0.4017 0.4026 0.03 : 0.3708 0.3717 0.03 [30] 0.3399 0.3408 0.03 s 0.2781 0.279 0.03 [34] 0.2472 0.2481 0.03 õ 0.2163 0.2172 0.03 [32] 0.1854 0.1863 0.03 L 0.1545 0.1554 0.03 ñ 0.1236 0.1245 0.03 ? 0.0927 0.0936 0.03 1 0.0618 0.0627 0.03 " " Ø
[129] 0.0309 0.0318 0.03 œ 0.0009 0.0009 0.03
Low =  0.0009,  nilai  inilah  yang  ditransmisikan  untuk  membawa  pesan  "Ø¿Å}DÓxÜ `ôxKß:"`[30] sõ[32]Lñ?Ål[129]œ.

## 3.3 Proses Dekompresi Prediction By Partial Matching
Untuk  melakukan decoding simbol  habis  bisa  ditandai  dengan  simbol  khusus  ( End  of  Message )  atau  dengan menyertakan  panjang  pesan  waktu  dilakukan  transmisi.  Untuk  pesan  yang  di- encode (ES  =  0.0009)  dilakukan proses decoding sebagai berikut:
Didapatkan range simbol yang melingkupi ES adalah simbol atau karakter œ. Low range = 0.00, High range = 0.03 CR = 0.03 – 0.00 = 0.03 ES  = 0.0009 – low range = 0.0009 – 0.00 = 0.0009 ES  = 0.0009/CR = 0.0009/0.03 = 0.03 Begitu seterusnya hingga semua nilai ES karakter didapatkan, karena algoritma Prediction by partial matching membaca nilai floating point dari tiap-tiap karakter, sehingga ukuran kembali seperti semula dan menghasilkan teks sebagai berikut: "Ø¿Å}DÓxÜ `ôxKß:"`[30] sõ[32]Lñ?Ål[129]œ
3.4 Proses Dekripsi Algoritma El Gamal
Proses dekripsi merupakan proses pengembalian ciphertext menjadi plaintext sebagai berikut: Ciphertext : "Ø¿Å}DÓxÜ `ôxKß:"`[30] sõ[32]Lñ?Ål[129]œ Langkah – langkah dalam proses dekripsi El Gamal adalah sebagai berikut:
1. Konversi ciphertext menjadi bilangan desimal Ciphertext : 34, 202, 15, 14, 197, 56, 68, 235, 120, 54, 2, 251, 15, 104, 120,  217, 223, 198, 34, 204, 30, 179, 8, 130, 32, 219, 241, 75, 197, 71, 129, 216
2. Hitung nilai m i sebagai nilai plaintext dengan rumus sebagai berikut: m i = bi.ai (p-1-x) mod p m 0 = 202.34 (257-1-11) mod 257 = 3.2937152059902716134013803341476e+377 mod 257 = 82 m 1 = 14.15 (257-1-11) mod 257 = 1.9430613103547394828961302526375e+289 mod 257 = 69 m 2 = 56.197 (257-1-11) mod 257 = 7.8057284116297956628315447415541e+563 mod 257 = 76 m 3 = 235.68 (257-1-11) mod 257 = 2.1664639925879811248493436710376e+451 mod 257 = 73 m 4 = 54.120 (257-1-11) mod 257 = 1.3545624786544176888442743532504e+511 mod 257 = 78 m 5 = 251.2 (257-1-11) mod 257 = 1.4191315624299982935213045525967e+76 mod 257
= 65
3. Kemudian nilai tersebut digabung kembali sehingga menghasilkan nilai sebagai berikut: 82, 69, 76, 73, 78, 65, 72, 85, 84, 65, 71, 65, 76, 85, 78, 71
4. Konversi nilai tersebut menjadi karakter sehingga menghasilkan kembali plaintext sebagai berikut: RELINAHUTAGALUNG

## 4. IMPLEMENTASI
Pengujian aplikasi dilakukan untuk mengetahui apakah aplikasi sudah berjalan dengan baik dan benar. Pengujian terhadap aplikasi dilakukan dengan meng- input -kan file teks yang bernama Relina.txt yang memiliki isi yang dapat dilihat dari gambar berikut:
Gambar 1. File Relina.Txt
Proses dekripsi file relinaenkrip.Txt dapat dilihat dari gambar sebagai berikut:
Gambar 2 . Proses Dekripsi
File relinaenkrip.Txt yang berukuran 3514 Bit berhasil dikompresi menjadi 2681 bit . Kemudian file akan disimpan dan ekstensi file tersebut akan berubah menjadi relinakompres.PPM, dapat dilihat dari gambar sebagai berikut:
Pengujian  dekompresi  dilakukan  terhadap file relinakompres.PPM  untuk  mengembalikan  ukuran  dari file relinaenkrip.Txt sebagai berikut:
Gambar 3. Pengujian Dekompresi Pada  pengujian  dekompresi,  diketahui file relinakompres.PPM  berukuran  2683 Bit dikembalikan  keukuran awalnya yaitu 3515 Bit .

## 5. KESIMPULAN
Dari hasil rancangan dan penerapan yang dilakukan, penulis dapat menyimpulkan
1. Peneraoan  algoritma ElGamal melakukan  plainteks  dengan  membangkitkan  kunci  publik  terlebih  dahulu kemudian  membagi  plainteks  menjadi  blok cipher untuk  dienkripsi  dan  menggabungkan  kembali  blok tersebut menjadi cipherteks begitu  juga sebaliknya. Keamanan algoritma ElGamal terletak pada kesulitan penghitungan  logaritma  diskrit  pada  bilangan  modulo  prima  yang  besar,  sehingga  upaya  untuk menyelesaikan masalah logaritma ini menjadi sangat sukar.
2. Kompresi  algoritma Prediction  by  Partial  Mathcing apabila  diimplementasikan  pada file yang  belum mengalami kompresi sebelumnya, akan menghasilkan nilai rasio yang kecil. Kompresi dengan menggunakan algoritma Prediction by Partial Matching ini juga sangat baik diimplementasikan pada file teks.
3. Aplikasi  penyandian file teks  menggunakan  algoritma ElGamal dan  kompresi  menggunakan  algoritma Prediction by Partial Matching , dapat dirancang menggunakan tools pemrograman Visual Studio 2008

## REFERENCES
[1] Noviana  Eka  P,  Sari  Widya  Sihwi,  Rini  Anggraningsih,  "Sistem  Penunjang  Keputusan  untuk  Menentukan  Lokasi  Usaha  dengan Metode Simple Additive Weighting (SAW)", Jurnal ITSMAR, Vol 3, 1 juni 2014, ISSN: 2301-7201.
[2] Dwi Citra Hartini, Endang  Lestari Ruska, Ali Ibrahim, "Sistem Pendukung  Keputusan Pemilihan Hotel di  Kota Palembang dengan Metode Simple Additive Weighting (SAW)", Jurnal Sistem Informasi (JSI), Vol 5, 1 April 2013.
[3] Mustofa,  "Analisis  dan  Perancangan  Sistem  Informasi  E-Education  Berbasis  Web  di  SMA  Pembangunan  Mranggen", A11.2006.03130.
[4] Wulandari, "Penerapan Metode System Development Life Cycle pada Pembuatan Sistem Informasi Penjualan Produk Batik Kurowo Jakart", Jurnal Khatulistiwa Informatika, Vol 3, 2 Desember 2015.
[5] Liza  Yulianti,  Herlina  Latipa  Sari,  Herawan  Hayadi,  "Sistem  Pendukung  Keputusan  Program  KB  Teladan  di  BKKBN  Bengkulu Menggunakan Programan Visual Basic 6.0" , Jurnal Media Informatik, Vol 8, 2 September 2012.
[6] Murti, Dyah, Ayu,  "Sistem Pendukung  Keputusan Pemilihan  Siswa atau Siswi Terbaik di  SMA Masehi I PSAK Semarang  dengan Metode Analitycal Hierarchy Process (AHP)".
[7] Rizky  Erdianto,  Eneng  Tita  Tosida,  Aries  Maesya,  "Penentuan  Jenis  Bibit  Ayam  Broiler  Menggunakan  Metode Multi  Objective Optimization on the basis of Ratio Analysis ( MOORA)".
[8] Drs. Lamhot Sitorus, M.Kom, " Algoritma dan Pemograman" , 2015.
[9] Suryasari, Astrid Callista, Juwita Sari, "Perancangan Aplikasi Customer Service pada PT. Lancar Makmur Bersama". Jurnal Sistem Informasi (JSI), Vol 4, 2 Oktober 2012.
[10]  Herry Raditya Wibowo, "Belajar Visual Basic 2008" , Jakarta, Indonesia, PT. Elex Media Komputindo,  2012.
[11]  Meita Riestiana, Sukadi, "Sistem Pendukung Informasi Penggajian Karyawan pada Commenditaire Vennontschap (CV) RGL Bordir dan Konveksi Pacitan", Journal Speed, Vol 6, 2014.