1.
Latar Belakang masalah Pemakaian teknologi komputer sebagai salah satu aplikasi dari teknologi informasi sudah menjadi suatu kebutuhan, karena banyak pekerjaan yang dapat diselesaikan dengan cepat, akurat, dan efisien. Kemajuan teknologi memicu kebutuhan informasi yang semakin besar. Sayangnya kebutuhan informasi yang besar ini berdampak pada kebutuhan storage (media penyimpanan) yang semakin besar pula. Storage yang besar tentu saja membutuhkan cost (harga) yang besar dan kecepatan akses data yang semakin lambat. Untuk mengatasi masalah storage dan kecepatan akses, salah satunya dengan mengkompresi informasi yang disimpan. Kompresi file adalah sebuah cara yang bertujuan untuk menulis ulang suatu file supaya menjadi lebih ringkas namun informasi yang terdapat di dalam file aslinya tidak mengalami kerusakan atau pengurangan. Salah satu algoritma yang dapat digunakan untuk mengkompresi suatu file adalah algoritma Huffman Tree Perkembangan teknik telekomunikasi dan sistem pengolahan data berkaitan erat dengan komunikasi antar pengguna komputer yang satu dengan komputer yang lain yang berfungsi untuk menyalurkan data sehingga masalah keamanan merupakan salah satu aspek penting dari suatu informasi. Dalam komunikasi data terdapat sebuah metode pengamanan data yang dikenal dengan nama kriptografi. Kriptografi merupakan salah satu metode pengamanan data yang dapat digunakan untuk menjaga kerahasiaan data, keaslian data, serta keaslian pengirim. Salah satu jenis algoritma yang dapat digunakan untuk menyandikan pesan teks adalah algoritma GOST. GOST merupakan singkatan dari “Gosudarstvennyi Standard” atau “Government Standard”. Algoritma GOST memiliki jumlah proses sebanyak 32 round dan menggunakan 64 bit block cipher dengan panjang kunci 256 bit. Metoda GOST juga menggunakan 8 buah S-Box yang permanen dan operasi XOR serta Rotate Left Shift. Berdasarkan uraian tersebut, akan dibuat suatu aplikasi dengan Algoritma GOST untuk melakukan proses enkripsi dan dekripsi data. Penelitian mengambil topik “Perancangan dan Implementasi Aplikasi Kriptosistem Data File Terkompresi Menggunakan Algoritma GOST”. 2. Tinjauan Pustaka Penelitian sebelumnya yang terkait dalam penelitian ini, dengan judul “Perancangan Program Aplikasi Pengamanan Data Menggunakan Algoritma GOST 34.11, GOST 28147, dan Steganografi GLM”, menyatakan bahwa algoritma GOST 34.11 yang dapat menghasilkan message digest sebagai sidik jari pesan, akan menyediakan otentikasi, untuk mengetahui apakah pesan yang diterima adalah pesan yang asli, dan belum diubah selama proses pengiriman, Algoritma GOST 28147 dimana kunci yang digunakan pada proses enkripsi sama dengan kunci dekripsi. Sedangkan, steganografi GLM digunakan untuk melakukan proses embedd dan extract kunci simetris [1]. Penelitian lainnya membahas “Perancangan Perangkat Lunak Pembelajaran Kriptografi Untuk Pengamanan Record dengan Metode GOST”. Aplikasi yang dibuat adalah dengan merancang aplikasi pengamanan record dengan metode GOST, merancang aplikasi pembelajaran dengan metode CAI (Computer Assisted Instucion). Pengujian pada penelitian ini adalah dengan data text dan record [2].
2
Berdasarkan penelitian yang pernah dilakukan tentang penerapan algoritma GOST, maka dilakukan penelitian yang membahas perancangan dan implementasi algoritma GOST. Dalam penelitian ini, sebelum penerapan algoritma GOST, yaitu proses enkripsi data teks dan data image, terlebih dahulu data dikompresi dengan algoritma Huffman. Penelitian ini akan menganalisis ukuran file setelah mengalami proses kompresi dan dekompresi, serta proses enkripsi dan dekripsi. Algoritma GOST GOST merupakan singkatan dari “Gosudarstvennyi Standard” atau “Government Standard”. Metoda GOST merupakan suatu algoritma block cipher yang dikembangkan oleh seorang berkebangsaan Uni Soviet. Metoda ini dikembangkan oleh pemerintah Uni Soviet pada masa perang dingin untuk menyembunyikan data atau informasi yang bersifat rahasia pada saat komunikasi. Algoritma GOST merupakan suatu algoritma enkripsi sederhana yang memiliki jumlah proses sebanyak 32 round (putaran) dan menggunakan 64 bit block cipher dengan 256 bit key. Metoda GOST juga menggunakan 8 buah S-Box yang berbeda-beda dan operasi XOR serta Left Circular Shift [3]. Proses Pembentukan Kunci Proses pembentukan kunci dapat dilihat pada penjabaran berikut ini : Input key berupa 256 bit key dengan perincian k1, k2, k3, k4, …, k256. Input key tersebut dikelompokkan dan dimasukkan ke dalam 8 buah KSU dengan aturan seperti berikut, K1 = (k32, …, k1) K2 = (k64, …, k33) K3 = (k96, …, k65) K4 = (k128, …, k97) K5 = (k160, …, k129) K6 = (k192, …, k161) K7 = (k224, …, k193) K8 = (k256, …, k225) Proses Enkripsi Proses enkripsi dengan metoda GOST untuk satu putaran (iterasi), dapat dilihat pada penjabaran berikut ini, 1. 64 bit plaintext dibagi menjadi 2 buah bagian 32 bit, yaitu Li dan Ri. Caranya : Input a1(0), a2(0), …, a32(0), b1(0), …, b32(0) R0 = a32(0), a31(0), …, a1(0) L0 = b32(0), b31(0), …, b1(0) 2. (Ri + Ki) mod 232. Hasil dari penjumlahan modulo 232 berupa 32 bit. 3. Hasil dari penjumlahan modulo 232 dibagi menjadi 8 bagian, dimana masingmasing bagian terdiri dari 4 bit. Setiap bagian dimasukkan ke dalam tabel SBox yang berbeda, 4 bit pertama menjadi input dari S-Box pertama, 4 bit kedua menjadi S-Box kedua, dan seterusnya. S-Box yang digunakan pada metoda GOST terlihat pada Tabel 1.
3
Tabel 1 S-Box dari Metoda GOST [3] Tabel S-Box
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
S-Box 0 S-Box 1 S-Box 2 S-Box 3 S-Box 4 S-Box 5 S-Box 6 S-Box 7
4 14 5 7 6 4 13 1
10 11 8 13 12 11 11 15
9 4 1 10 7 10 4 13
2 12 13 1 1 0 1 0
13 6 10 0 5 7 3 5
8 13 3 8 15 2 15 7
0 15 4 9 13 1 5 10
14 10 2 15 8 13 9 4
6 2 14 14 4 3 0 9
11 3 15 4 10 6 10 2
1 8 12 6 9 8 14 3
12 1 7 12 14 5 7 14
7 0 6 11 0 9 6 6
15 7 0 2 3 12 8 11
5 5 9 5 11 15 2 8
3 9 11 3 2 14 12 12
Cara melihat dari S-Box yaitu input biner diubah menjadi bilangan desimal dan hasilnya menjadi urutan bilangan dalam S-Box. Posisi S-Box 1
0 4
1 10
Tabel 2 Penjelasan Cara Kerja S-Box dari Metoda GOST [3] 2 3 4 5 6 7 8 9 10 11 12 9 2 13 8 0 14 6 11 1 12 7
13 15
14 5
15 3
Contoh, jika data input ke S-Box adalah 5 maka dicari data pada posisi ke5. Output yang dihasilkan adalah 8. 4. Hasil yang didapat dari substitusi ke S-Box dan digabungkan kembali menjadi 32 bit dan kemudian dilakukan rotasi left shift sebanyak 11 bit. 5. Ri+1 = Ri (hasil dari rotate left shift) XOR Li. 6. Li+1 = Ri sebelum dilakukan proses. Proses Dekripsi Proses dekripsi merupakan proses kebalikan dari proses enkripsi. Penggunaan kunci pada masing-masing putaran pada proses dekripsi adalah sebagai berikut, Putaran 1 – 8 : K1, K2, K3, …, K8 Putaran 9 – 16 : K8, K7, K6, …, K1 Putaran 17 – 24 : K8, K7, K6, …, K1 Putaran 25 – 32 : K8, K7, K6, …, K1 Algoritma yang digunakan untuk proses dekripsi sama dengan proses enkripsi dengan aturan untuk langkah 5 dan 6 pada putaran ke-31 adalah sebagai berikut, R32 = R31 sebelum dilakukan proses. L32 = R31 XOR L31. Plaintext yang dihasilkan pada proses dekripsi adalah, L32 = b(32), b(31), …, b(1) R32 = a(32), a(31), …, a(1) P = a(1), …, a(32), b(1), …, b(32) Kompresi Data Kompresi data (pemampatan data) merupakan pengurangan ukuran suatu data menjadi ukuran yang lebih kecil dari aslinya. Kompresi data ini sangat menguntungkan manakala terdapat suatu data yang berukuran besar dan di dalamnya mengandung banyak pengulangan karakter. Adapun teknik dari kompresi ini adalah dengan mengganti karakter yang berulang-ulang tersebut
4
dengan suatu pola tertentu sehingga berkas tersebut dapat meminimalisasi ukurannya. Kompresi data umumnya diterapkan pada mesin komputer, hal ini dilakukan karena setiap simbol yang dimunculkan pada komputer memiliki nilai bit-bit yang berbeda. Kompresi data digunakan untuk mengurangkan jumlah bitbit yang dihasilkan dari setiap simbol yang muncul. Dengan kompresi ini diharapkan dapat mengurangi (memperkecil ukuran data) dalam ruang penyimpanan [4]. Algoritma Huffman Algoritma Huffman termasuk ke dalam kelas yang menggunakan metode statik. Metode statik adalah metode yang selalu menggunakan peta kode yang sama, metode ini membutuhkan dua fase (two-pass): fase pertama untuk menghitung probabilitas kemunculan tiap simbol/karakter dan menentukan peta kodenya, fase kedua untuk mengubah pesan menjadi kumpulan kode yang akan ditransmisikan. Sedangkan berdasarkan teknik pengkodean simbol yang digunakan, algoritma Huffman menggunakan metode symbolwise. Metoda symbolwise adalah metode yang menghitung peluang kemunculan dari setiap simbol dalam satu waktu, dimana simbol yang lebih sering muncul diberi kode lebih pendek dibandingkan simbol yang jarang muncul [5]. Pembentukan Pohon Huffman Kode Huffman pada dasarnya merupakan kode prefiks (prefix code). Kode prefiks adalah himpunan yang berisi sekumpulan kode biner, dimana pada kode prefiks ini tidak ada kode biner yang menjadi awal bagi kode biner yang lain. Kode prefiks biasanya direpresentasikan sebagai pohon biner yang diberikan nilai atau label. Untuk cabang kiri pada pohon biner diberi label 0, sedangkan cabang kanan pada pohon biner diberi label 1. Rangkaian bit yang terbentuk pada setiap lintasan dari akar ke daun merupakan kode prefiks untuk karakter yang berpadanan. Pohon biner ini biasa disebut pohon Huffman [6]. 3. Metode dan Perancangan Sistem Prototype Model adalah metode pengembangan perangkat lunak yang banyak digunakan. Metode ini memungkinkan adanya interaksi antara pengembang sistem dengan pengguna sistem nantinya, sehingga dapat mengatasi ketidakserasian antara pengembang dan pengguna. Bagan mengenai prototype model dapat dilihat pada Gambar 4.
Gambar 4 Bagan Prototype Model [7]
5
Tahap-tahap dalam Prototype Model adalah sebagai berikut: Listen to Costumer ; Pada tahap ini dilakukan analisis terhadap permasalahan yang ada, yaitu mendapatkan data dan literatur yang terkait dengan proses kompresi, enkripsi, dekripsi dan dekompresi terhadap data teks dan gambar, menggunakan algoritma GOST; melalui dokumen dan referensi yang ada. 2. Build ; Selanjutnya setelah memperoleh data dan mengetahui proses kompresi dan dekompresi dengan metode Huffman serta proses enkripsi dan dekripsi dengan GOST, langkah berikutnya adalah membuat perancangan dengan menggunakan Data Flow Diagram (DFD) mengenai sistem yang akan dibangun nantinya, perancangan algoritma Huffman dan algoritma GOST. Selain itu dilakukan pula perancangan pada user interface berupa prototype sistem. 3. Costumer Test ; Pada Tahap ini dilakukan pengujian sistem, yaitu menjalankan proses implementasi sistem, dengan menguji data teks dan data gambar, serta melihat hasil yang diberikan apakah sudah sesuai dengan konsep Kompresi, Kriptosistem dan algoritma GOST. Proses Kompresi dengan Algoritma Huffman Algoritma Huffman yang diterapkan dalam program aplikasi ini adalah tipe statik, dimana dilakukan dua kali pembacaan (two-pass) terhadap file yang akan dikompresi. Proses kompresi dengan algoritma huffman, dapat dijelaskan sebagai berikut : Algoritma kompresi huffman dimulai dengan input file. Selanjutnya file tersebut diproses dengan perhitungan karakter yang muncul. Kemudian dilanjutkan dengan pembentukan huffman tree. Pembentukan Huffman tree ini membaca karakter di dalam teks untuk menghitung frekuensi kemunculan setiap karakter. Setiap karakter penyusun teks dinyatakan sebagai pohon bersimpul tunggal. Setelah pembentukan huffman tree selesai, maka akan dilakukan pengolahan pengkodean data. Berdasarkan setiap proses yang terjadi, maka proses atau output yang keluar berbeda dengan file aslinya sebelum dikompresi. Proses kompresi dengan algoritma huffman, dalam bentuk flowchart, ditunjukkan pada Gambar 7. 1.
Gambar 7 Flowchart Proses Kompresi dengan Algoritma Huffman
Proses Dekompresi dengan Algoritma Huffman Proses dekompresi dengan algoritma huffman, dapat dijelaskan sebagai berikut : Algoritma dekompresi huffman dimulai dengan input file. Selanjutnya file tersebut diproses dengan membaca karakter yang muncul. Seperti halnya proses kompresi, dekompresi juga membentuk huffman tree. Pembentukan Huffman tree ini membaca karakter di dalam teks untuk menghitung frekuensi kemunculan setiap karakter. Kemudian membaca kode dari hasil dari kompresi.
6
Setelah membaca kode dari hasil kompresi, proses decoding berjalan untuk mengembalikan ukuran file asli. Berdasarkan setiap proses yang terjadi, maka output dari sistem adalah data asli. Proses kompresi dengan algoritma huffman, dalam bentuk flowchart, ditunjukkan pada Gambar 8.
Gambar 8 Flowchart Proses Dekompresi dengan Algoritma Huffman
Proses Enkripsi dengan Algoritma GOST Proses enkripsi dengan algoritma GOST, dapat dijelaskan sebagai berikut : Proses enkripsi file dimulai dengan input file (plaintext). Selanjutnya input key sebagai perhitungan manual S-box dalam proses enkripsi. Setelah proses input selesai, maka selanjutnya proses enkripsi dijalankan. Proses enkripsi melakukan langkah-langkah proses enkripsi, perhitungan manual S-box, dan lain-lain. Setelah proses selesai dijalankan, user mendapatkan hasil output (ciphertext). Proses enkripsi dengan algoritma GOST, dalam bentuk flowchart, ditunjukkan pada Gambar 9.
Gambar 9 Flowchart Proses Enkripsi dengan Algoritma GOST
Proses Dekripsi dengan Algoritma GOST Proses dekripsi dengan algoritma GOST, dapat dijelaskan sebagai berikut : Proses dekripsi file dimulai dengan input file (ciphertext). Selanjutnya input key sebagai perhitungan manual S-box dalam proses enkripsi. Setelah proses input selesai, maka selanjutnya proses dekripsi dijalankan. Proses dekripsi melakukan langkah-langkah proses dekripsi, perhitungan manual S-box, kunci yang diterapkan dan lain-lain. Setelah proses selesai dijalankan, user mendapatkan hasil output yaitu file asli (plaintext). Proses dekripsi dengan algoritma GOST, dalam bentuk flowchart, ditunjukkan pada Gambar 10.
7
Gambar 10 Flowchart Proses Dekripsi dengan Algoritma GOST
4. Implementasi dan Pembahasan Antarmuka untuk Proses Enkripsi File yang akan dienkripsi dalam kriptosistem yang dibangun adalah file hasil kompresi.
Gambar 11 Antarmuka Proses Enkripsi
Gambar 11 menunjukkan antarmuka dari proses enkripsi. Untuk menjalankan proses enkripsi, user membuka file yang akan dienkripsi, berupa teks dan gambar (plaintext/plain image), dengan memilih tombol Select File. File yang akan dienkripsi merupakan file hasil kompresi. Selanjutnya user melakukan beberapa proses berikut, memilih tombol Save Compressed File As, untuk menentukan tempat penyimpanan file hasil kompresi; memasukkan kunci untuk enkripsi pada textbox Encryption 32 Bytes Key; memilih tombol Save Encrypted File As, untuk menentukan tempat penyimpanan file hasil enkripsi (ciphertext/cipher image). Untuk menjalankan proses enkripsi, user memilih tombol Compress & Encrypt. File yang akan dienkripsi, terlebih dahulu akan dikompresi, dimana proses kompresi dilakukan secara bersamaan dengan proses enkripsi, juga ditampilkan waktu yang dibutuhkan untuk proses kompresi dan proses enkripsi. Proses enkripsi yang dilakukan menghasilkan file hasil kompresi dan file hasil enkripsi. Proses dan perintah yang digunakan dalam proses Enkripsi akan dijelaskan sebagai berikut. Proses enkripsi yang dilakukan, diawali dengan proses kompresi menggunakan metode Huffman. Plaintext (bisa berupa .doc, .txt, atau .jpg) dikompresi menjadi plaintext (ekstensi file (.huff)). Selanjutnya proses enkripsi dengan metode GOST, dilakukan dengan cara berikut, plaintext (berupa file hasil kompresi) diubah dalam bentuk biner (ciphertext), lalu plaintext di-XOR dengan nilai pembentukan kunci, dan didapat hasil akhir berupa ciphertext dalam bentuk biner, yaitu file GOST (.gst). Jadi setelah memilih tombol ’Compress & Encrypt’, maka kompresi dengan enkripsi berjalan secara bersamaan, memberikan hasil 2 (dua) file, yaitu file hasil kompresi dan file hasil enkripsi.
8
Implementasi Proses Enkripsi Kode Program 1 merupakan perintah untuk melakukan proses kompresi data, yang dipanggil dan dijalankan pada saat tombol Compress & Encrypt dipilih. Kode Program 1 Perintah untuk Proses Kompresi class Compression { public static byte[] Compress(byte[] data) { HuffmanTree huff = new HuffmanTree(); String base64String = Convert.ToBase64String(data); //huff.Build(base64String); //String s = Encoding.Default.GetString(data); huff.Build(base64String); BitArray encoded = huff.Encode(base64String); int tambahan = 8 - (encoded.Count % 8); byte[] bytesData = ConvertToByte(encoded, tambahan); byte[] tree = Encoding.Default.GetBytes(huff.PrintFrequencies()); byte[] panjangTree = BitConverter.GetBytes((short)tree.Length); byte panjangPad = (byte)tambahan; //byte[] hasilAkhir = new byte[panjangTree.Length + 1 + tree.Length + bytesData.Length]; List
list = new List(); list.AddRange(panjangTree); list.Add(panjangPad); list.AddRange(tree); list.AddRange(bytesData); return list.ToArray(); }
Kode Program 2 merupakan perintah untuk melakukan proses enkripsi, yang dipanggil dan dijalankan pada saat tombol Compress & Encrypt dipilih. Kode Program 2 Perintah untuk Proses Enkripsi public void Encrypt(GostKey key, byte[] data) { DateTime startTime = DateTime.Now; byte[] sourceData = Utility.PadFiles(data); byte[] info = CreateInfo(sourceData.Length - data.Length); List list = new List(); list.AddRange(info); list.AddRange(sourceData); Started(this, new GostArgs() { Total = list.Count }); byte[] result = Cipher(key, list.ToArray(), Mode.Encryption); Finished(this, new GostArgs() { Mode = Mode.Encryption, Carrier = result, ElapsedTime = (DateTime.Now - startTime) }); }
Kode Program 3 Perintah Tombol Compress dan Enkripsi private void encryptButton_Click(object sender, EventArgs e) { AddLog("Process Started."); Mulai = DateTime.Now; Thread tr = new Thread(new ThreadStart(ProcessEncrypt)); tr.Start();} private void ProcessEncrypt() { byte[] data = File.ReadAllBytes(this.plainFileTextBox.Text); AddLog("Compress File " + this.plainFileTextBox.Text); AddLog("Result " + this.compressResultTextBox.Text); byte[] compressed = Compression.Compress(data); File.WriteAllBytes(this.compressResultTextBox.Text, compressed); GostKey key = new GostKey(this.encryptKeyTextBox.Text); AddLog("Encrypt File " + this.compressResultTextBox.Text); gost.Encrypt(key, compressed); }
[1] [2] [3] [4] [5] [6] [7]
Pada Kode Program 3, perintah pada baris ke-1 digunakan untuk memulai proses encrypt yang diawali dengan pemberitahuan kepada user yang menandakan 9
proses akan dilakukan. Setelah itu ditandai dengan urutan waktu terhadap proses yang akan dijalankan berikutnya. Perintah pada baris ke-2 digunakan untuk membaca ukuran file plaintext yang dimasukkan. Selanjutnya perintah pada baris ke-3, digunakan untuk menampilkan data plaintext yang telah terkompresi. Perintah pada baris ke-4 digunakan untuk melakukan proses pemanggilan fungsi kompresi, sehingga data yang dimasukkan akan melakukan proses kompresi (terlihat pada Kode Program 1). Perintah pada baris ke-5 digunakan untuk melakukan proses kompresi dan membaca ukuran file yang dimasukkan. Selanjutnya perintah pada baris ke-6, digunakan untuk menginisialisasi ukuran kunci berdasarkan karakter yang dimasukkan. Selanjutnya perintah pada baris ke7 digunakan untuk melakukan proses pemanggilan fungsi encrypt GOST (terlihat pada Kode Program 2). Gambar 12 merupakan hasil kompresi dari plaintext (.txt) menjadi plaintext (.huff), selanjutnya hasil enkrispi dari plaintext (.huff) dienkripsi menjadi ciphertext (.gst), terlihat pada Gambar 13.
Gambar 12 Form Hasil Kompresi Metode Huffman
Gambar 13 Form Hasil Enkripsi Metode GOST
Antarmuka untuk Proses Dekripsi File yang akan didekripsi dalam kriptosistem yang dibangun adalah file hasil enkripsi (.gst).
Gambar 14 Antarmuka Proses Dekripsi
Gambar 14 menunjukkan antarmuka dari proses dekripsi. Untuk menjalankan proses dekripsi, user membuka file yang akan didekripsi, berupa file hasil enkripsi (ciphertext/cipher image), dengan memilih tombol Select File. Selanjutnya user melakukan beberapa proses berikut, memilih tombol Save Decrypted File As, untuk menentukan tempat penyimpanan file hasil dekripsi; memasukkan kunci untuk dekripsi pada textbox Decryption 32 Bytes Key; memilih tombol Save Decompressed File, untuk menentukan tempat penyimpanan file hasil dekompresi (plaintext/plain image). Untuk menjalankan proses dekripsi, user memilih tombol Decrypt & Decompressed. File yang akan didekripsi, terlebih dahulu akan didekompresi, dimana proses dekompresi dilakukan secara bersamaan dengan proses dekripsi, juga ditampilkan waktu yang dibutuhkan untuk proses dekompresi dan proses dekripsi. Proses dekripsi yang
10
dilakukan menghasilkan file hasil dekompresi dan file hasil dekripsi. Proses dan perintah yang digunakan dalam proses dekripsi dengan algoritma GOST akan dijelaskan sebagai berikut. Proses dekripsi yang dilakukan, diawali dengan proses mengembalikan ciphertext (.gst) ke data asli dalam bentuk plaintext (ekstensi file (.huff)), lalu ciphertext di-XOR dengan nilai pembentukan kunci, akan diperoleh hasil akhir berupa plaintext dalam bentuk file (.huff). Selanjutnya proses dekompresi, mengembalikan data file plaintext (ekstensi file (.huff)) menjadi data plaintext asli (bisa berupa .doc, .txt, atau .jpg), dengan ukuran file yang sama sebelum terjadi proses kompresi. Jadi setelah memilih tombol ’Decrypt & Decompress’, maka proses dekripsi dan proses dekompresi akan dijalankan secara bersamaan, dimana proses ini akan memberikan output, berupa file hasil dekripsi dan file hasil dekompresi. Implementasi Proses Dekripsi Kode Program 4 merupakan perintah untuk melakukan proses dekripsi, yang dipanggil dan dijalankan pada saat tombol Decrypt & Deompress dipilih. Kode Program 4 Perintah Proses Dekripsi public void Decrypt(GostKey key, byte[] data) { DateTime startTime = DateTime.Now; Started(this, new GostArgs() { Total = data.Length }); byte[] result = Cipher(key, data, Mode.Decryption); byte[] info = GetInfo(result); byte[] original = new byte[result.Length - info.Length - (int)info[0]]; Array.Copy(result, info.Length, original, 0, original.Length); Finished(this, new GostArgs() { Mode = Mode.Decryption, Carrier = original, ElapsedTime = (DateTime.Now - startTime) }); }
Kode Program 5 merupakan perintah untuk melakukan proses dekompresi, yang dipanggil dan dijalankan pada saat tombol Decrypt & Deompress dipilih. Kode Program 5 Perintah Proses Dekompresi public static byte[] Extract(byte[] data) { byte[] panjangTree = new byte[] {data[0], data[1] }; byte panjangPad = data[2]; byte[] tree = new byte[BitConverter.ToInt16(panjangTree, 0)]; Array.Copy(data, 3, tree, 0, tree.Length); byte[] bytesData = new byte[data.Length - tree.Length - 1 panjangTree.Length]; int panjangHeader = panjangTree.Length+1+tree.Length; Array.Copy(data, panjangHeader, bytesData, 0, bytesData.Length); BitArray bits = ConvertToBitArray(bytesData, panjangPad); string treeString = Encoding.Default.GetString(tree); HuffmanTree huff = new HuffmanTree(); huff.LoadTree(treeString); string base64 = huff.Decode(bits); //string s = huff.Decode(bits); //byte[] hasil = Encoding.Default.GetBytes(s); byte[] hasil = Convert.FromBase64String(base64); return hasil; }
11
Kode Program 6 Perintah Proses Dekripsi dan Dekompresi private void encryptButton_Click(object sender, EventArgs e) { AddLog("Process Started."); Mulai = DateTime.Now; Thread tr = new Thread(new ThreadStart(ProcessEncrypt)); tr.Start();} [1] private void ProcessDecrypt() { byte[] data = File.ReadAllBytes(this.cipherFileTextBox.Text); [2] GostKey key = new GostKey(this.decryptKeyTextBox.Text); [3] AddLog("Decrypt File " + this.cipherFileTextBox.Text); gost.Decrypt(key, data); } [4] else //decrypt { File.WriteAllBytes(this.decryptResultFileTextBox.Text, data); [5] AddLog("Decompress File " + this.decryptResultFileTextBox.Text); [6] AddLog("Result " + this.decompressResultFileTextBox.Text); byte[] original = Compression.Extract(data); [7] File.WriteAllBytes(this.decompressResultFileTextBox.Text, original); AddLog("Result " + this.decryptResultFileTextBox.Text); } [8]
Pada Kode Program 6, perintah pada baris ke-1 digunakan untuk memulai proses decrypt yang diawali dengan pemberitahuan kepada user yang menandakan proses akan dilakukan. Setelah itu ditandai dengan urutan waktu terhadap proses yang akan dijalankan berikutnya. Perintah pada baris ke-2 digunakan untuk membaca ukuran file yang dimasukkan. Selanjutnya perintah pada baris ke-3 digunakan untuk menginisialisasi ukuran kunci berdasarkan karakter yang dimasukkan. Perintah pada baris ke-4 digunakan untuk melakukan proses pemanggilan fungsi decrypt untuk melakukan proses dekripsi (terlihat pada Kode Program 4). Selanjutnya perintah pada baris ke-5, digunakan untuk membaca ukuran file hasil dekripsi. Selanjutnya perintah pada baris ke-6 digunakan untuk melakukan proses dekompresi. Perintah pada baris ke-7 digunakan untuk melakukan proses pemanggilan fungsi decompress yang akan melakukan proses extract file dekompresi menjadi data asli kompresi (terlihat pada Kode Program 5). Perintah pada baris ke-8 digunakan untuk menampilkan hasil decrypt yang telah dilakukan. Gambar 15 merupakan hasil dekripsi dari ciphertext (.gst) menjadi Plaintext (.huff), selanjutnya data plaintext (.huff) dikompresi menjadi plaintext (data asli), terlihat seperti pada Gambar 16
Gambar 15 Hasil Dekripsi dengan Metode GOST
Gambar 16 Hasil Dekompresi dengan Algoritma Huffman
Evaluasi Prototype Sistem Evaluasi prototype sistem merupakan tahap terakhir pada metode pengembangan sistem yang digunakan, yaitu mengevaluasi apakah prototype sistem yang telah dibangun sesuai dengan kebutuhan. Pada prototype pertama, dirancang aplikasi hanya menggunakan algoritma GOST dalam kriptosistem yang dibangun. Kemudian prototype tersebut dievaluasi oleh customer, dalam hal ini adalah pembimbing. Customer memberikan masukan atau saran untuk 12
menambahkan algoritma kompresi pada aplikasi tersebut. Berdasarkan hasil evaluasi pada prototype pertama, maka dirancang prototype kedua. Pada prototype kedua, rancangan aplikasi kriptosistem yang dibangun ditambahkan penerapan metode kompresi yaitu metode huffman. Proses kompresi dikerjakan terlebih dahulu, dengan memilih tombol kompresi; selanjutnya hasil kompresi tersebut diterapkan proses enkripsi, dengan memilih tombol enkripsi. Kemudian prototype kedua dievaluasi kembali oleh customer. Customer memberikan masukan atau saran untuk menyatukan proses kompresi dan enkripsi dalam satu proses enkripsi. Berdasarkan hasil evaluasi pada prototype kedua, maka dirancang prototype ketiga. Pada prototype ketiga, rancangan aplikasi kriptosistem yang dibangun diubah bahwa dalam proses enkripsi terdapat proses kompresi, dan proses kompresi dijalankan terlebih dahulu, hasil kompresi yang akan dienkripsi, dalam satu tombol proses enkripsi. Kemudian prototype ketiga dievaluasi kembali oleh customer, dan dinyatakan bahwa prototype ketiga telah sesuai dengan kebutuhan customer. Kemudian dilanjutkan dengan melengkapi dan membenahi aplikasi yang dibuat. Pengujian Aplikasi Setelah aplikasi selesai dibuat, dilakukan pengujian terhadap 3 (tiga) jenis file berbeda; yaitu file data text, data document, dan data gambar (image). 1. Pengujian pada file text (.txt). Hasil Pengujian pada file text (.txt), terlihat pada Tabel 3. Tabel 3 Hasil Pengujian Kriptosistem Pada Data Text
1.
Laporan_tes
4.96 KB
1
Ukuran File Hasil Kompresi (.huff) 4.78 KB
2.
metode
7.86 KB
12
6.95 KB
7.04 KB
6.95 KB
7.86 KB
3.
Permodelan
2.37 KB
123
1.82 KB
1.84 KB
1.82 KB
2.37 KB
4.
Kriptografi
5.37 KB
1234
3.84 KB
3.85 KB
3.84 KB
5.37 KB
5.
GOST
3.98 KB
12345
2.94 KB
2.95 KB
2.94 KB
3.98 KB
6.
Kompresi
3.49 KB
123456
2.59 KB
2.60 KB
2.59 KB
3.49 KB
7.
Huffman
7.71 KB
1234567
5.46 KB
5.48 KB
5.46 KB
7.71 KB
8.
Pendahuluan
6.96 KB
12345678
4.96 KB
4.98 KB
4.96 KB
6.96 KB
No.
Nama File (.txt)
Ukuran File
Kunci
Ukuran File Hasil Enkripsi (.gst) 4.79 KB
Ukuran File Hasil Dekripsi (.huff) 4.78 KB
Ukuran File Hasil Dekompresi (.txt) 4.96 KB
Berdasarkan hasil pengujian Kriptosistem pada data text pada Tabel 3, dapat disimpulkan bahwa kriptosistem dengan menggunakan algoritma kompresi Huffman dan algoritma Gost, dapat memperkecil dan mengembalikan ukuran file data text, serta dapat mengenkripsi dan mendekripsi data text dengan baik. Plaintext (.txt) dikompresi menjadi plaintext terkompresi (.huff), dengan ukuran file yang lebih kecil; serta plaintext terkompresi(.huff), dienkripsi menjadi ciphertext (.gst), dimana secara visual terlihat bahwa ciphertext yang dihasilkan tidak sama dengan plaintext, dan tidak merepresentasikan suatu tulisan yang bisa dibaca. Demikian juga sebaliknya, kriptosistem dapat mendekripsikan file ciphertext (.gst) menjadi file plaintext terkompresi (.huff), dilanjutkan dengan dekompresi file plaintext terkompresi (.huff), menjadi file plaintext asli (.txt), dimana hasil akhir sama dengan plaintext asli baik isi maupun ukuran file.
13
Hasil Pengujian pada Tabel 3, digambarkan dalam bentuk grafik, seperti terlihat pada Gambar 17.
Ukuran File (KB)
Grafik Hasil Kriptosistem Berdasarkan Ukuran File 10 8 6 4 2 0
File Asli Kompresi enkripsi dekripsi dekompresi Nama File (.txt) Gambar 17 Grafik Hasil Kriptosistem Berdasarkan Ukuran File
Tabel 4 Hasil Pengujian Kriptosistem Pada Data Text dengan Ukuran File Berbeda dan Panjang Kunci Sama Waktu Proses Waktu Proses Nama File Enkripsi Dekripsi No. Ukuran File Kunci (.txt) (second) (second) 1. 2. 3. 4. 5. 6. 7.
8.
Permodelan Kompresi GOST Laporan_tes Kriptografi
Pendahuluan Huffman metode
2.37KB 3.49 KB 3.98 KB 4.96 KB 5.37 KB 6.96 KB 7.71 KB 7.86 KB
12345678 12345678 12345678 12345678 12345678 12345678 12345678
0.749 0.175 0.367 0.692 0.608 0.496 0.948
0.500 0.093 0.154 0.301 0.223 0.221 0.47
12345678
0.904
0.407
Berdasarkan hasil Pengujian Kriptosistem Pada Data Text dengan Ukuran File Berbeda dan Panjang Kunci Sama pada Tabel 4, menunjukkan bahwa ukuran file (.txt), tidak begitu mempengaruhi waktu proses kriptosistem. Hasil pengujian ini juga menunjukkan bahwa waktu proses dekripsi lebih cepat dari waktu proses enkripsi untuk data text (.txt).
Waktu Proses
Grafik Perbandingan Ukuran File dan Waktu Proses Kriptosistem 1.5 1
Waktu Proses Dekripsi
0.5 0 2.37 3.49 3.98 4.96 5.37 6.96 7.71 7.86
Waktu Proses Enkripsi
Ukuran File Gambar 18 Grafik Perbandingan Ukuran File dan Waktu Proses Kriptosistem
14
Tabel 5 Hasil Pengujian Kriptosistem Pada Data Text dengan Ukuran File Sama dan Panjang Kunci Berbeda
No. 1. 2. 3. 4. 5. 6. 7.
8.
Nama File (.txt)
Ukuran File
Laporan_tes Laporan_tes Laporan_tes Laporan_tes Laporan_tes Laporan_tes Laporan_tes Laporan_tes
4.96 KB 4.96 KB 4.96 KB 4.96 KB 4.96 KB 4.96 KB 4.96 KB 4.96 KB
Waktu Proses Enkripsi (second)
Waktu Proses Dekripsi (second)
1 12 123 1234 12345 123456 1234567
0.723 0.708 0.722 0.726 0.717 0.725 0.735
0.374 0.406 0.343 0.353 0.355 0.354 0.369
12345678
0.719
0.371
Kunci
Berdasarkan hasil Pengujian Kriptosistem Pada Data Text dengan Ukuran File sama dan Panjang Kunci berbeda pada Tabel 5, menunjukkan bahwa panjang kunci, tidak begitu mempengaruhi waktu proses kriptosistem.
12345…
12345…
123456
12345
1234
123
12
1.5 1 0.5 0 1
Waktu Proses
Grafik Perbandingan Panjang Kunci dan Waktu Proses Kriptosistem Waktu Proses Dekripsi Waktu Proses Enkripsi
Panjang Kunci Gambar 19 Grafik Perbandingan Panjang Kunci dan Waktu Proses Kriptosistem
2. Pengujian pada file document (.doc). Hasil Pengujian file document, terlihat pada Tabel 6. Tabel 6 Hasil Pengujian Kriptosistem Pada Data Document No.
Nama File (.doc)
Ukuran File
1. 2. 3. 4. 5. 6. 7. 8.
Chaleb C Chaleb H Chaleb F Chaleb G Chaleb E Chaleb D Chaleb A Chaleb B
38.8 KB 967 KB 346 KB 428 KB 129 KB 186 KB 14.2 KB 38.3 KB
Kunci
1 12 123 1234 12345 123456 1234567 12345678
Ukuran File Hasil Kompresi (.huff) 38.6 KB 800 KB 299 KB 422 KB 126 KB 119 KB 13.7 KB 38.1 KB
Ukuran File Hasil Enkripsi (.gst) 38.6 KB 800 KB 299 KB 422 KB 126 KB 119 KB 13.7 KB 38.1 KB
Ukuran File Hasil Dekripsi (.huff) 38.6 KB 800 KB 299 KB 422 KB 126 KB 119 KB 13.7 KB 38.1 KB
Ukuran File Hasil Dekompresi (.doc) 38.8 KB 967 KB 346 KB 428 KB 129 KB 186 KB 14.2 KB 38.3 KB
Berdasarkan hasil pengujian Kriptosistem pada data document (.doc), pada Tabel 6, dapat disimpulkan bahwa kriptosistem dengan menggunakan algoritma kompresi Huffman dan algoritma Gost, dapat memperkecil dan mengembalikan ukuran file data document, serta dapat mengenkripsi dan mendekripsi data document dengan baik. Plaintext (.doc) dikompresi menjadi plaintext terkompresi (.huff), dengan ukuran file yang lebih kecil; serta plaintext terkompresi (.huff) dienkripsi menjadi ciphertext (.gst), dimana secara visual terlihat bahwa ciphertext
15
yang dihasilkan tidak sama dengan plaintext, dan tidak merepresentasikan suatu tulisan yang bisa dibaca. Demikian juga sebaliknya, kriptosistem dapat mendekripsikan file ciphertext (.gst) menjadi file plaintext terkompresi (.huff), dilanjutkan dengan dekompresi file plaintext terkompresi (.huff), menjadi file plaintext asli (.doc), dimana hasil akhir sama dengan plaintext asli baik isi maupun ukuran file. Hasil Pengujian pada Tabel 6, digambarkan dalam bentuk grafik, seperti terlihat pada Gambar 20.
Ukuran File (KB)
Grafik Hasil Kriptosistem Berdasarkan Ukuran File 1500 File Asli
1000
kompresi
500
enkripsi
0 A
B
C
D
E
F
G
H
Nama File (.doc)
dekripsi dekompresi
Gambar 20 Grafik Hasil Kriptosistem Berdasarkan Ukuran File Tabel 7 Hasil Pengujian Kriptosistem Pada Data Document dengan Ukuran File Berbeda dan Panjang Kunci Sama No.
Nama File (.doc)
Ukuran File
Kunci
Waktu Proses Enkripsi (second)
Waktu Proses Dekripsi (second)
1. 2. 3. 4. 5. 6. 7. 8.
Chaleb C Chaleb H Chaleb F Chaleb G Chaleb E Chaleb D Chaleb A Chaleb B
38.8 KB 967 KB 346 KB 428 KB 129 KB 186 KB 14.2 KB 38.3 KB
12345 12345 12345 12345 12345 12345 12345 12345
6.35 130.5 51.75 65.35 21.36 22.23 2.008 5.21
5.124 122.7 372.80 555.07 44.87 87.47 1.21 5.91
Waktu Proses
Berdasarkan hasil Pengujian Kriptosistem Pada Data Document dengan Ukuran File Berbeda dan Panjang Kunci Sama pada Tabel 7, menunjukkan bahwa panjang kunci, tidak begitu mempengaruhi waktu proses kriptosistem.
800
Grafik Perbandingan Ukuran File dan Waktu Proses Kriptosistem
600 400 Waktu Proses Dekripsi
200 0
Waktu Proses Enkripsi 14.2 38.3 38.8 186 129 346 428 967 Ukuran File Gambar 21 Grafik Perbandingan Ukuran File dan Waktu Proses Kriptosistem
16
Tabel 8 Hasil Pengujian Kriptosistem Pada Data Document dengan Ukuran File Sama dan Panjang Kunci Berbeda No.
Nama File (.doc)
Ukuran File
1. 2. 3. 4. 5. 6. 7.
Chaleb C Chaleb C Chaleb C Chaleb C Chaleb C Chaleb C Chaleb C Chaleb C
38.8 KB 38.8 KB 38.8 KB 38.8 KB 38.8 KB 38.8 KB 38.8 KB 38.8 KB
8.
Kunci
Waktu Proses Enkripsi (second)
Waktu Proses Dekripsi (second)
1 12 123 1234 12345 123456 1234567
0.717 0.708 0.708 0.725 0.739 0.721 0.723
0.534 0.539 0.487 0.596 0.543 0.527 0.523
12345678
0.731
0.508
Berdasarkan hasil Pengujian Kriptosistem Pada Data Document dengan Ukuran File Sama dan Panjang Kunci Berbeda pada Tabel 8, menunjukkan bahwa panjang kunci, tidak begitu mempengaruhi waktu proses kriptosistem.
Waktu Proses
Grafik Perbandingan Panjang Kunci dan Waktu Proses Kriptosistem 2 Waktu Proses Dekripsi
0
Waktu Proses Enkripsi
Panjang Kunci
Gambar 22 Grafik Perbandingan Panjang Kunci dan Waktu Proses Kriptosistem
3. Pengujian pada file Image (.jpg). Hasil pengujian file image, terlihat pada Tabel 9. Tabel 9 Hasil Pengujian Kriptosistem Pada Data Image No.
Nama File (.jpg)
Ukuran File
Kunci
6096
Ukuran File Hasil Kompresi (.huff) 339 KB
Ukuran File Hasil Enkripsi (.gst) 339 KB
Ukuran File Hasil Dekripsi (.huff) 339 KB
Ukuran File Hasil Dekompresi (.jpg) 341 KB
1.
IMG_6096
341 KB
2.
IMG_6097
321 KB
3.
IMG_6099
331 KB
6097
320 KB
320 KB
320 KB
321 KB
6099
329 KB
329 KB
329 KB
4.
IMG_6100
331 KB
358 KB
6100
357 KB
357 KB
357 KB
5.
358 KB
IMG_6101
368 KB
6101
367 KB
367 KB
367 KB
368 KB
6.
IMG_6102
372 KB
6102
371 KB
371 KB
371 KB
372 KB
7.
IMG_6103
342 KB
6103
341 KB
341 KB
341 KB
342 KB
8.
IMG_6104
346 KB
6104
345 KB
345 KB
345 KB
346 KB
Berdasarkan hasil pengujian Kriptosistem pada data image (.jpg) pada Tabel 9, dapat disimpulkan bahwa kriptosistem dengan menggunakan algoritma kompresi Huffman dan algoritma Gost, dapat memperkecil dan mengembalikan ukuran file data image, serta dapat mengenkripsi dan mendekripsi data image dengan baik. Plain image (.jpg) dikompresi menjadi plain image terkompresi (.huff), dengan ukuran file yang lebih kecil; serta plain image terkompresi (.huff) dienkripsi menjadi cipher image (.gst), dimana secara visual terlihat bahwa cipher image (.gst), yang dihasilkan tidak sama dengan plain image (.jpg), dan tidak 17
merepresentasikan suatu image yang bisa dikenali. Demikian juga sebaliknya, kriptosistem dapat mendekripsikan file cipher image (.gst), menjadi file plain image terkompresi (.huff), dilanjutkan dengan dekompresi file plain image terkompresi (.huff),, menjadi file plain image (.jpg), dimana hasil akhir sama dengan plain image asli baik isi maupun ukuran file. Hasil Pengujian pada Tabel 9, digambarkan dalam bentuk grafik, seperti terlihat pada Gambar 25.
Ukuran File (%)
Grafik Hasil Kriptosistem Berdasarkan Ukuran File 380 360 340 320 300 280
File Asli kompresi enkripsi dekripsi dekompresi Nama File (.jpg)
Gambar 23 Grafik Hasil Kriptosistem BerdasarkanUkuran File Tabel 10 Hasil Pengujian Kriptosistem Pada Data Image dengan Ukuran File Berbeda dan Panjang Kunci Sama
No.
Nama File (.jpg)
Ukuran File
Kunci
Waktu Proses Enkripsi (second)
Waktu Proses Dekripsi (second)
1.
IMG_6097
321 KB
123
45.93
301.22
2.
IMG_6099
331 KB
123
44.44
320.32
3.
IMG_6096
341 KB
123
41.47
443.50
4.
IMG_6103
342 KB
123
41.53
460.34
5.
IMG_6104
346 KB
123
48.50
489.56
6.
IMG_6100
358 KB
123
52.34
400.00
7.
IMG_6101
368 KB
123
50.58
447.43
8.
IMG_6102
372 KB
123
54.80
564.10
Berdasarkan hasil Pengujian Kriptosistem Pada Data Image dengan Ukuran File Berbeda dan Panjang Kunci Sama pada Tabel 10, menunjukkan bahwa ukuran file, tidak begitu mempengaruhi waktu proses kriptosistem.
Waktu Proses
Grafik Perbandingan Ukuran File dan Waktu Proses Kriptosistem 600 400 200 0
Waktu Proses Enkripsi 321 331 341 342 346 358 368 372 Ukuran File
18
Waktu Proses Dekripsi
Gambar 24 Grafik Perbandingan Ukuran File dan Waktu Proses Kriptosistem Tabel 11 Hasil Pengujian Kriptosistem Pada Data Image dengan Ukuran File Sama dan Panjang Kunci Berbeda Waktu Proses Enkripsi (second)
Waktu Proses Dekripsi (second)
6096 6097 6099 6100 6101
40.37
453.65
43.50 46.87
450.50 451.55
51.00 52.56
454.47 463.33
6102 6103 6104
52.67
455.44
43.59 45.12
444.98 449.81
Nama File (.jpg)
Ukuran File
Kunci
1. 2. 3. 4. 5.
IMG_6096 IMG_6096 IMG_6096
341 KB 341 KB 341 KB
IMG_6096 IMG_6096
341 KB 341 KB
6. 7. 8.
IMG_6096
341 KB
IMG_6096 IMG_6096
341 KB 341 KB
No.
Berdasarkan hasil Pengujian Kriptosistem Pada Data Image dengan Ukuran File Sama dan Panjang Kunci berbeda pada Tabel 11, menunjukkan bahwa panjang kunci, tidak begitu mempengaruhi waktu proses kriptosistem.
Waktu Proses
Grafik Perbandingan Panjang Kunci dan Waktu Proses Kriptosistem 600 400 200 0
Waktu Proses Hasil Enkripsi Waktu Proses Hasil Dekripsi Panjang Kunci
Gambar 25 Grafik Perbandingan Panjang Kunci dan Waktu Proses Kriptosistem
5. Simpulan Dalam penggunaan aplikasi ini dapat diambil beberapa kesimpulan, yaitu : Sistem yang dibuat merupakan kriptosistem yang mengenkripsi data berupa text, document, dan gambar, dimana data yang dimasukkan tersebut terlebih dahulu dilakukan proses kompresi, dan selanjutnya dienkripsi menjadi data yang tidak dikenali. Data hasil enkripsi dapat didekripsikan kembali menjadi plaintext dan didekompresi kembali menjadi file plaintext. Perbandingan ukuran file enkripsi lebih besar dari file asli apabila tidak melalui proses kompresi, sedangkan file enkripsi akan lebih kecil dari ukuran file asli apabila dilakukan proses kompresi. Ukuran panjang kunci yang dimasukkan tidak mempengaruhi ukuran file hasil enkripsi. Adapun saran yang dapat diberikan untuk pengembangan aplikasi ini lebih lanjut adalah penerapan algoritma GOST pada aplikasi Chatting berbasis Android.
19
6. Daftar Pustaka [1] Tiurma Airin Listya, 2005. Perancangan Program Aplikasi Pengamanan Data Menggunakan Algoritma GOST 34.11, GOST 28147, Dan Steganografi GLM, Teknik Informatika, 2005 [2] Batubara Muhammad Iqbal, 2006. Perancangan Perangkat Lunak Pembelajaran Kriptografi Untuk Pengamanan Record dengan Metode GOST [3] Munir Rinaldi, 2006. Kriptografi, Informatika, Bandung [4] Yusioktria, 2005. Simulasi Algoritma Huffman Guna Mengompresi Data Pada Ponsel yang Berbasis Sistem Operasi Symbian. garuda.dikti.go.id/jurnal/detil/id/23:1824 [5] Batubara, 2009. Implementasi Algoritma Huffman dan algoritma Cipher Substitusi Alfabet Tunggal pada Teks SMS. Ilmu computer, Medan, 2009. repository.usu.ac.id/bitstream/123456789/25384/7/Cover.pdf [6] Liliana, 2005. Pembuatan Perangkat Lunak Untuk Kompresi File Text Dengan Menggunakan Huffman Tree. Teknik Informatika, Surabaya, 2005. [7] Pressman, Roger S., 2001, Software Engineering a Practitioner’s Approach, New York ; McGraw-Hill Higher Education.
20