Anda di halaman 1dari 159

MODUL I

PENGENALAN JAVA NETBEANS/J2ME

A. Pengertian Java Secara Umum


Java adalah bahasa pemrograman yang
dapat dijalankan di berbagai komputer
termasuk telepon genggam. Bahasa ini
awalnya dibuat oleh James Gosling saat
masih bergabung di Sun Microsystems saat
ini merupakan bagian dari Oracle dan dirilis
tahun 1995. Bahasa ini banyak mengadopsi
sintaksis yang terdapat pada C dan C++ namun dengan sintaksis model objek yang
lebih sederhana serta dukungan rutin-rutin aras bawah yang minimal. Aplikasi-aplikasi
berbasis java umumnya dikompilasi ke dalam p-code (bytecode) dan dapat dijalankan
pada berbagai Mesin Virtual Java (JVM).
Java merupakan bahasa pemrograman yang bersifat umum/non-spesifik (general
purpose), dan secara khusus didisain untuk memanfaatkan dependensi implementasi
seminimal mungkin. Karena fungsionalitasnya yang memungkinkan aplikasi java
mampu berjalan di beberapa platform sistem operasi yang berbeda, java dikenal pula
dengan slogannya, "Tulis sekali, jalankan di mana pun". Saat ini java merupakan
bahasa pemrograman yang paling populer digunakan, dan secara luas dimanfaatkan
dalam pengembangan berbagai jenis perangkat lunak aplikasi ataupun aplikasi
berbasis web.
Mengapa Mempelajari JAVA?
Berdasarkan white paper resmi dari SUN, Java memiliki karakteristik berikut :
 Sederhana (Simple)
Bahasa pemrograman Java menggunakan Sintaks mirip dengan C++ namun sintaks
pada Java telah banyak diperbaiki terutama menghilangkan penggunaan pointer

Modul Praktikum Kriptografi 2014 1


yang rumit dan multiple inheritance. Java juga menggunakan automatic memory
allocation dan memory garbage collection.
 Berorientasi objek (Object Oriented)
Java mengunakan pemrograman berorientasi objek yang membuat program
dapat dibuat secara modular dan dapat dipergunakan kembali. Pemrograman
berorientasi objek memodelkan dunia nyata kedalam objek dan melakukan
interaksi antar objek- objek tersebut.
 Terdistribusi (Distributed)
Java dibuat untuk membuat aplikasi terdistribusi secara mudah dengan
adanya libraries networking yang terintegrasi pada Java.
 Interpreted
Program Java dijalankan menggunakan interpreter yaitu Java Virtual Machine
(JVM). Hal ini menyebabkan source code Java yang telah dikompilasi menjadi Java
bytecodes dapat dijalankan pada platform yang berbeda-beda.
 Robust
Java mempuyai reliabilitas yang tinggi. Compiler pada Java mempunyai
kemampuan mendeteksi error secara lebih teliti dibandingkan bahasa pemrograman
lain. Java mempunyai runtime-Exception handling untuk membantu mengatasi
error pada pemrograman.
 Secure
Sebagai bahasa pemrograman untuk aplikasi internet dan terdistribusi, Java
memiliki beberapa mekanisme keamanan untuk menjaga aplikasi tidak
digunakan untuk merusak sistem komputer yang menjalankan aplikasi tersebut.
 Architecture Neutral
Program Java merupakan platform independent. Program cukup mempunyai satu
buah versi yang dapat dijalankan pada platform berbeda dengan Java Virtual

Modul Praktikum Kriptografi 2014 2


 Portable
Source code maupun program Java dapat dengan mudah dibawa ke platform yang
berbeda-beda tanpa harus dikompilasi ulang.
 Performance
Performance pada Java sering dikatakan kurang tinggi. Namun performance Java
dapat ditingkatkan menggunakan kompilasi Java lain seperti buatan Inprise,
Microsoft ataupun Symantec yang menggunakan Just In Time Compilers (JIT).
 Multithreaded
Java mempunyai kemampuan untuk membuat suatu program yang dapat
melakukan beberapa pekerjaan secara sekaligus dan simultan.
 Dynamic
Java didesain untuk dapat dijalankan pada lingkungan yang dinamis. Perubahan
pada suatu class dengan menambahkan properties ataupun method dapat dilakukan
tanpa menggangu program yang menggunakan class tersebut.

1. Fase Pemrograman Java


Gambar dibawah ini menjelaskan aliran proses kompilasi dan eksekusi
sebuah program Java :

Modul Praktikum Kriptografi 2014 3


Langkah pertama dalam pembuatan sebuah program berbasis Java adalah
menuliskan kode program pada text editor. Contoh text editor yang dapat
digunakan antara lain : notepad, vi, emacs dan lain sebagainya. Kode
program yang dibuat kemudian tersimpan dalam sebuah berkas berekstensi
.java.
Setelah membuat dan menyimpan kode program, kompilasi file yang berisi
kode program tersebut dengan menggunakan Java Compiler. Hasil dari adalah
berupa berkas bytecode dengan ekstensi .class.
Berkas yang mengandung bytecode tersebut kemudian akan
dikonversikan oleh Java Interpreter menjadi bahasa mesin sesuai dengan jenis
dan platform yang digunakan.
Pro Tool H
Menulis kode Text editor Berkas berekstensi .java
ses a
Kompilasi program Java Compiler Berkas berekstensi .class(Java
program
Menjalankan Java Interpreter Program Output s
Bytecodes)
program i
Macam-macam Text Editor / Tool yang umum digunakan luntuk
menuliskan source code Java, antara lain :
 NotePad
 JCreator (http://www.jcreator.com)
 Edit Plus (http://www.editplus.com)
 D. Gel (http://gexperts.com)
 JFrameBuilder (http://www.mars3000.com)
 NetBeans (www.netbeans.org)
 Eclipse (http://www.eclipse.org)
 Borland JBuilder (www.borland.com)
 JDeveloper (http://www.oracle.com/technology/jdev), dan lain-lain.

Modul Praktikum Kriptografi 2014 4


2. Klasifikasi Pemrograman Java
Java menurut definisi dari Sun Microsystem adalah nama untuk sekum-
pulan teknologi yang membuat perangkat lunak dan menjalankan perangkat
lunak pada komputer standalone ataupun pada lingkungan jaringan. Java2 adalah
generasi kedua dari Java platform. Java berdiri di atas sebuah mesin intepreter
yang diberi nama Java Virtual Machine (JVM). JVM inilah yang akan membaca
bytecode dalam file .class dari suatu program sebagai representasi langsung
program yang berisi bahasa mesin. Oleh karena itu bahasa Java disebut sebagai
bahasa pemrograman yang portable, karena dapat dijalankan pada berbagai
sistem operasi, asalkan pada sistem operasi tersebut terdapat JVM.
Platform Java terdiri dari sekumpulan library, compiler, debugger dan alat
lain yang dipaket dalam Java Development Kit (JDK). Java 2 adalah generasi
yang sekarang sedang berkembang dari platform Java. Agar sebuah program Java
dapat dijalankan, maka file dengan ekstensi .java harus dikompilasi menjadi file
bytecode. Untuk menjalankan file byte-code tersebut dibutuhkan JRE (Java
Runtime Environment) yang memungkinkan pemakai untuk menjalankan
program Java, hanya menjalankan tidak membuat kode baru lagi. JRE terdiri dari
JVM dan library Java yang digunakan. Platform Java memiliki tiga buah edisi
yang berbeda :
 J2EE (Java 2 Enterprise Edition)
J2EE adalah kelompok dari beberapa API (Application Programming
Interface) dari Java dan teknologi selain Java. J2EE dirancang untuk membuat
aplikasi yang rumit. J2EE sering dianggap sebagai middle-ware atau
teknologi yang berjalan di server, namun sebenarnya J2EE tidak hanya
terbatas untuk itu. Faktanya J2EE juga mencakup teknologi yang dapat
digunakan di semua lapisan dari sebuah sistem informasi. Implementasi J2EE
menyediakan kelas dasar dan API dari Java yang mendukung pengembangan

Modul Praktikum Kriptografi 2014 5


dan rutin standard untuk aplikasi client maupun server, termasuk aplikasi yang
berjalan di web browser.

 J2SE (Java 2 Second Edition)


J2SE adalah inti/ dasar dari bahasa pemrograman Java. JDK (Java
Development Kit) adalah salah satu tool dari J2SE untuk mengkom-pilasi dan
menjalankan program Java. Tool J2SE yang salah satunya adalah JDK 1.5
dapat diunduh pada http://java.sun.com/j2se/, dimana JDK merupakan tool
open source dari Sun.
 J2ME (Java 2 Micro Edition)
J2ME adalah lingkungan pengembangan yang dirancang untuk mele-
takan perangkat lunak Java pada barang elektronik beserta perangkat
pendukungnya. Pada J2ME, jika perangkat lunak berfungsi baik pada sebuah
perangkat, maka belum tentu juga berfungsi baik pada perang-kat yang
lainnya. J2ME membawa Java ke dunia informasi, komunikasi, dan perangkat
komputasi selain perangkat komputer desktop yang biasanya lebih kecil
dibandingkan perangkat komputer desktop. J2ME biasa digunakan pada
telepon selular, pager, personal digital assistants (PDA) dan sejenisnya. J2ME
adalah bagian dari J2SE, karena itu tidak semua librabry yang ada pada J2SE
dapat digunakan pada J2ME. Tetapi J2ME mempunyai beberapa library
khusus yang tidak dimiliki J2SE. Arsitektur J2ME dapat dilihat seperti pada
gambar berikut ini
Profile
Kumpulan

Configuration Library

JVM

Sistem Operasi

Modul Praktikum Kriptografi 2014 6


Teknologi J2ME juga memiliki beberapa keterbatasan, terutama jika
diaplikasikan pada ponsel. J2ME sangat tergantung pada perangkat (device)
yang digunakan, bisa dari segi merek ponsel dan dukungan terhadap teknologi
J2ME. Misalnya, jika sebuah ponsel tidak memiliki kamera, maka jelas J2ME
pada ponsel tersebut tidak dapat mengakses kamera. Keterbatasan lainnya
adalah pada ukuran aplikasi, karena memori pada ponsel sangat terbatas.
Sebagian ponsel tidak mengijin-kan aplikasi J2ME menulis pada file, karena
alasan keamanan.
Configuration merupakan Java Library minimum dan kemampuan
yang dimiliki oleh para pengembang J2ME, maksudnya adalah sebuah
moblile device dengan kemampuan Java akan dioptimalkan agar sesuai.
Configuration hanyalah mengatur hal-hal tentang kesamaan sehingga dapat
dijadikan ukuran kesesuaian antar device. Misalnya sebuah lampu sepeda
dapat digunakan oleh berjenis-jenis sepeda. Dalam J2ME telah didefinisikan
dua buah konfigurasi yaitu :
 CLDC (Connected Limited Device Configuration) untuk perangkat
kecil.
 CDC (Connected Device Configuration) untuk perangkat yang lebih
besar.
Profile berbeda dengan configuration, profile membahas sesuatu yang
spesifik untuk sebuah perangkat. Sebagai contoh misalnya, sebuah sepeda
dengan merek tertentu tentu mempunyai ciri spesifik dari sepeda lainnya.
Dalam J2ME terdapat dua buah profile yaitu MIDP (Mobile Information
Device Profile) dan Foundation Profile. Keterhubungan antara configuration
dan profile yang ada pada J2ME beserta jenis mesin virtualnya dapat dilihat
pada gambar dibawah ini.

Modul Praktikum Kriptografi 2014 7


Aplikasi J2ME Aplikasi J2 ME Applet/ Aplikasi
(MIDlet) J2SE

KVM CVM JVM

MDP Foundation J2SE


Profile
CLDC
CDC

CLDC (Connected Limited Device Configuration) adalah perangkat


dasar dari J2ME berupa library dan API yang diimplementasikan pada J2ME,
seperti yang digunakan pada telepon selular, pager dan PDA. Perangkat
tersebut sangat terbatas pada memori, sumber daya dan kemampuan
memproses. Spesifikasi CLDC pada J2ME adalah spesifikasi minimal dari
package, kelas, dan sebagian fungsi JVM yang dikurangi agar dapat
diimplemen-tasikan dengan keterbatasan sumber daya pada alat-alat tersebut.
JVM yang digunakan disebut KVM (Kilobyte Virtual Machine).
CDC (Connected Device Configuration) merupakan komunitas proses
Kompleks
pada Java yang memiliki standardisasi. CDC terdiri dari virtual machine dan
library dasar untuk dipergunakan pada profile industri. Implementasi CDC
pada J2ME adalah source code yang menyediakan sambungan dengan
macam-macam platform. Perbandingan antara CLDC dengan CDC sebagai
berikut :

Modul Praktikum Kriptografi 2014 8


CLDC CDC
 Mengimplementasikan seba gian  Mengimplementasikan selu-ruh
dari J2SE fitur J2SE
 JVM yang digunakan adalah  JVM yang digunakan adalah
KVM CVM
 Digunakan pada perangkat  Digunakan pada perangkat
genggam (handphone, two-way genggam (internet TV, Nokia
pager, dan PDA) denga memori communicator, car TV) dgn
terbatas antara 160-512KB memori minimal 2MB
 Prosessor : 16/ 32 bit  Prosessor : 32 bit

MIDP (Mobile Information Device Profile) adakal spesifikasi untuk


sebuah profil J2ME. MIDP memiliki lapisan di atas CLDC, API tam-bahan
untuk daur hidup aplikasi, antarmuka, jaringan, dan penyimpan-an persisten.
Pada saat ini terdapat MIDP 1.0 dan MIDP 2.0, fitur tambahan pada MIDP
2.0 adalah terdapat API untuk multimedia, terdapat dukungan memainkan
tone, tone sequence, dan file WAV walaupun tanpa adanya Mobile Media API
(MMAPI).
KVM (Kilobyte Virtual Machine) adalah paket JVM yang dirancang
untuk perangkat yang kecil. KVM mendukung sebagian dari fitur-fitur JVM,
tidak mendukung operasi floating-point dan finalisasi objek. KVM
diimplementasikan dengan menggunakan C, sehingga sangat mudah
beradaptasi pada tipe platform yang berbeda
CVM (C-Virtual Machine) adalah paket JVM yang digunakan pada
CDC. CVM mempunyai seluruh fitur-fitur dari virtual machine yang
dirancang untuk perangkat yang memerlukan fitur-fitur Java 2 Virtual
Machine.
MIDlet adalah aplikasi yang ditulis untuk MIDP. Aplikasi MIDlet
adalah bagian dari kelas javax.microedition.midlet. MIDlet yang didefinisikan

Modul Praktikum Kriptografi 2014 9


pada MIDP. MIDlet berupa sebuah kelas abstrak yang merupakan sub kelas
dari bentuk dasar aplikasi sehingga antaramuka antara aplikasi J2ME dan
aplikasi manajemen pada perangkat dapat terbentuk.
JAD (Java Application Descriptor) digunakan untuk mendeskripsikan
isi aplikasi untuk keperluan pemetaan. File JAD bersisi deskripsi file JAR
(Java Archive) dan pemetaan atribut MIDlet, sedangkan file JAR berisi
kumpulan kelas dan resource.
OTA (Over The Air) mengacu pada beberapa teknologi jaringan tanpa
kabel. Dengan menggunakan OTA, provider MIDlet dapat menginstal MIDlet
pada web server dan menyediakan link untuk mengunduh via WAP atau
internet microbrowser.
J2ME WTK (J2ME Wireless Tool Kit) adalah alat yang menyediakan
lingkungan emulator, dokumentasi, beserta contoh-contoh aplikasi Java untuk
perangkat kecil (small device). J2ME WTK berbasiskan pada CLDC dan
MIDP. J2ME WTK adalah program yang meniru kerja ponsel yang
mendukung MIDP atau yang biasa disebut emulator. Oleh karena itu, belum
tentu MIDlet yang berjalan di emulator juga berjalan pada ponsel yang
sebenarnya, karena juga tergantung pada kemampuan dan kapasitas ponsel
yang digunakan.

Modul Praktikum Kriptografi 2014 10


3. Java Netbeans
NetBeans mengacu pada dua hal, yakni platform untuk pengembangan
aplikasi desktop java, dan sebuah Integrated Development Environment (IDE)
yang dibangun menggunakan platform NetBeans.
Platform NetBeans memungkinkan aplikasi dibangun dari sekumpulan
komponen perangkat lunak moduler yang disebut 'modul'. Sebuah modul adalah
suatu arsip Java (Java archive) yang memuat kelas-kelas Java untuk
berinetraksi dengan NetBeans Open API dan file manifestasi yang
mengidentifikasinya sebagai modul. Aplikasi yang dibangun dengan modul-
modul dapat dikembangkan dengan menambahkan modul- modul baru. Karena
modul dapat dikembangkan secara independen, aplikasi berbasis platform
NetBeans dapat dengan mudah dikembangkan oleh pihak ketiga secara
mudah dan powerful.
a. Platform NetBeans
Platform NetBeans adalah framework yang dapat digunakan
kembali (reusable) untuk menyederhanakan pengembangan aplikasi
desktop. Ketika aplikasi berbasis platform NetBeans dijalankan, kelas
Main dari platform dieksekusi. Modul-modul yang tersedia ditempatkan

Modul Praktikum Kriptografi 2014 11


di sebuah registry di dalam memori, dan tugas startup modul dijalankan.
Secara umum, kode modul dimuatkan ke dalam memori hanya ketika ia
diperlukan.
Aplikasi dapat menginstal modul secara dinamis. Aplikasi dapat
memasukkan modul Update Center untuk mengijinkan pengguna
aplikasi men-download digitally-signed upgrade dan fitur-fitur baru
secara langsung ke dalam aplikasi yang berjalan. Penginstalan kembali
sebuah upgrade atau rilis baru tidak memaksa pengguna untuk men-
download keseluruhan aplikasi lagi.
Platform NetBeans menawarkan layanan-layanan yang umum
bagi aplikasi desktop, mengijinkan pengembang untuk fokus ke logika
yang spesifik terhadap aplikasi. Fitur- fitur yang disediakan oleh
platform NetBeans:
 Manajemen antarmuka (misal: menu & toolbar)
 Manajemen pengaturan pengguna
 Manajemen penyimpanan (menyimpan dan membuka berbagai
macam data)
 Manajemen jendela
 Wizard framework (mendukung dialog langkah demi langkah)

b. NetBeans IDE
NetBeans IDE adalah IDE ( integrated development environment )
open source yang ditulis sepenuhnya dengan bahasa pemrograman
Java menggunakan platform NetBeans. NetBeans IDE mendukung
pengembangan semua tipe aplikasi Java (J2SE, web, EJB, dan aplikasi
mobile). Fitur lainnya adalah sistem proyek berbasis Ant, kontrol versi,
dan refactoring.

Modul Praktikum Kriptografi 2014 12


c. Paket-paket tambahan NetBeans
NetBeans Mobility Pack adalah alat untuk mengembangkan
aplikasi yang berjalan pada perangkat bergerak (mobile), umumnya
telepon seluler, tetapi juga mencakup PDA, dan lain-lain. NetBeans
Mobility Pack dapat digunakan untuk menulis, menguji, dan debugging
aplikasi untuk perangkat bergerak yang menggunakan teknologi
berplatform Java Micro Edition (platform Java ME). Paket ini
mengintegrasikan dukungan terhadap Mobile Information Device Profile
(MIDP) 2.0, Connected Limited Device Configuration (CLDC) 1.1, dan
Connected Device Configuration (CDC). Emulator dari pihak ketiga
dapat diintegrasikan dengan mudah untuk lingkungan pengujian yang
lebih kokoh. NetBeans Mobility Pack saat ini tersedia dalam dua klaster
yang berbeda, yang satu memuat CDC dan yang lainnya CLDC.
NetBeans Profiler adalah alat untuk mengoptimalkan aplikasi Java,
membantu menemukan kebocoran memori dan mengoptimalkan
kecepatan. Profiler ini berdasarkan sebuah proyek riset Sun Laboratories
yang dahulu bernama Jfluid. Riset tersebut mengungkap teknik tertentu
yang dapat digunakan untuk menurunkan overhead proses profiling
aplikasi Java. Salah satu dari teknik tersebut adalah instrumentas i kode
byte dinamis, yang berguna untuk profiling aplikasi Java yang besar.
Dengan menggunakan instrumentasi kode byte dinamis dan algoritma-
algoritma tambahan, Netbeans Profiler mampu mendapatkan informasi
runtime aplikasi yang terlalu besar atau kompleks bagi profiler lain.
NetBeans IDE 6.0 akan mendukung Profiling Point yang memungkinkan
kita memprofilkan titik yang tepat dari eksekusi dan mengukur waktu
eksekusi.
NetBeans C/C++ Pack menambahkan dukungan terhadap
pengembang C/C++ ke NetBeans IDE 5.5. Paket ini memperbolehkan
pengembang menggunakan sekumpulan kompiler dan alat sendiri bersama

Modul Praktikum Kriptografi 2014 13


dengan NetBeans IDE untuk membangun aplikasi native untuk MS
Windows, Linux, dan Solaris. Paket ini membuat editor mengenali bahasa
C/C++ dan menyediakan project template, browser kelas yang dinamis,
dukungan pembuatan file dan fungsionalitas debugger. Para pengembang
juga dapat mengembangkan paket tersebut dengan fungsionalitas
tambahan mereka sendiri. NetBeans Enterprise Pack memperluas
dukungan terhadap pengembangan aplikasi perusahaan dan web service
mulai NetBeans IDE 5.5. Enterprise Pack ini mengembangkan
kemampuan untuk menulis, menguji, dan debug aplikasi dengan arsitektur
berorientasi layanan (Service-Oriented Architecture) menggunakan XML,
BPEL, dan Java web service. Paket ini menambahkan alat desain visual
untuk pemodelan UML, skema XML, dan web service orchestration, juga
dukungan untuk web service dengan menggunakan identitas yang aman.
Paket ini juga menginstal dan mengkonfigurasi runtime yang diperlukan,
termasuk mesin BPEL dan server manajemen identitas yang terintegrasi
dengan Sun Java System Application Server.
Versi NetBeans 6.0 mengijinkan pengembangan IDE menggunakan
Ruby dan Jruby, sebagaimana Rails untuk dua implementasi Ruby yang
lain. Preview NetBeans Ruby Pack tersedia sejak rilis Milestone 7
NetBeans 6. Ruby Pack memasukkan fungsionalitas editor seperti:
 Pengeditan dasar
 Pewarnaan sintaks untuk Ruby
 Pelengkapan kode
 Occurence highlighting
 Pop-up dokumentasi yang terintegrasi untuk pemanggilan Ruby API

NetBeans JavaScript Editor menyediakan perluasan dukungan


terhadap JavaScript dan CSS. Fitur-fiturnya antara lain:
 Editor JavaScript

Modul Praktikum Kriptografi 2014 14


- syntax highlighting
- pelengkapan kode untuk objek dan fungsi native
- semua fitur dalam editor NetBeans
- pembuatan kerangka kelas JavaScript secara otomatis
- pembuatan pemanggilan AJAX dari template
 Ekstensi editor CSS
- pelengkapan kode untuk nama-nama style
- navigasi cepat melalui panel navigator
- penampilan deklarasi aturan CSS di List View
- penampilan struktur file di Tree View
- mengurutkan outline view berdasarkan nama, tipe, atau urutan
deklarasi (List & Tree)
- pembuatan deklarasi aturan (hanya Tree)
- pemfaktoran kembali sebagian nama rule (hanya Tree)

d. Membuat Program di NetBeans

Untuk menjalankan aplikasi NetBeans, Start  Programs 


NetBeans  NetBeans. IDE X.X (x.x adalah Versi NetBeans yang sudah
terinstall). Untuk memulai aplikasi, buatlah Project baru dengan cara File
 New Project …..

Modul Praktikum Kriptografi 2014 15


Pada tampilan Jendela New project, pilih categories ‘Java’ dan
Project ‘Java Appl ication’  Next.

Pada Jendela New Java Application, isikan: Project Name: Latihan.


Project Location : C:\Lat_java. Selanjutnya klik tombol Finish.

Modul Praktikum Kriptografi 2014 16


Hasil Proses diatas akan menghasilkan terbentuknya directory
‘Latihan’ di dalam directory ‘C:\Lat_java’. Directory Latihan ini adalah
Project / Program aplikasi java di NetBeans.

Dan Struktur program yang dihasilkan di NetBeans adalah :

Modul Praktikum Kriptografi 2014 17


Nama Project

Group Package

Nama Package

Nama class aplikasi java

Library Project

Nama project adalah nama program executable yang jadi nantinya.


Berbeda dengan program yang lain, executable yang dihasilkan program
java bukan bertype .Exe tetapi bertype .Jar.

Modul Praktikum Kriptografi 2014 18


File Jar ini membutuhkan Java Runtime Environment (JRE)
untuk bisa berjalan dengan baik. Cara menjalankan file jar ini adalah :
java -jar file_jar.jar

e. Membuat Class
Untuk membuat class baru adalah dengan cara:
Klik kanan pada Package class baru yang dituju dan pilih Java class… 
Isi class.
Name dengan nama class baru anda  Finish.
Contoh : Buat class baru dengan nama “Hello.java” pada package
Latihan. Caranya klik kanan pada package LatihanJava Class …

Source code yang terbentuk dari proses diatas adalah :


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package latihan;

Modul Praktikum Kriptografi 2014 19


/
*
*
*
* @author ichwan
*/
public class Hello {

Selanjutnya lengkapi source code diatas menjadi :

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package latihan;

/
*
*
*
* @author ichwan
*/
public class Hello {
public static void main(String[] args) {
System.out.print("Hallo Dunia ....!");
}
}

f. Membuat Package
Untuk membuat package baru adalah dengan cara klik kanan pada
Source Packages  New  Java Package

Modul Praktikum Kriptografi 2014 20


Isi package Name dengan nama package baru yang akan anda buat
misalnya : “coba” Finish

g. Mengubah mengisikan judul Form jFrame,


Klik pada halaman Form jFrame  Klik tombol kiri mouse  Pilih
Properties

Modul Praktikum Kriptografi 2014 21


Pada bagian [jFrame]-Properties, pilih title : isikan seperti pada gambar
berikut :

h. Merancang Tampilan
Sebelum meletakan poses maka dibuat dulu rancangan tampilan
yang, diletakan pada komponen jFarame. Mengabil komponen Pallete:

Klik dan pilih Swing Control  Pilih dan Klik jLabel tarik mouse
letakkan pada halaman Form, Seperti terlihat pada gambar.

Modul Praktikum Kriptografi 2014 22


i. Mengubah teks tampilan jLabel
Klik tombol kiri mouse  Pilih Edit Text. Ubahlah jLabel menjadi
“Masukan”

j. Mengubah nama variabel jTextFiled menjadi jTextField


Masukan
Klik tombol kiri mouse  Pilih Change Variabel Name. Isi seperti
pada gambar berkut :

Modul Praktikum Kriptografi 2014 23


Masukan lewat kotak dialog Rename

Sehingga di bagian Navigator seperti pada gambar berikut :

Lakukan cara yang sama sehingga membetuk suatu form sebagai


berikut :

Modul Praktikum Kriptografi 2014 24


k. Memasukan kode program
Program akan dikalan berdasarkan kejadian (event). Event
mengosongkan isi Form saat pertama kali program dijalankan, caranya
adalah Klik pada halama Form  Klik tombol kiri mouse  Pilih dan Klik
Events  Pilih dan klik Window  Pilih dan klik windowOpened. Seperti
terlihat pada gambar

private void
formWindowOpened(java.awt.event.WindowEvent evt) {

// ketikan prigram disini


jTextFieldMasukan.setText("");
jTextFieldKeluaran.setText("");

Penjelasan jTextFieldMasukan.setText(""); adalah berasal dari


methode dari javax.swing.text.JTextComponent dengan parameter
String. Bentuk methode sebuah fungsi void dengan parameter variabel
String.
public void setText(String t)jTextFieldKeluaran menampikan isi
dari jTextFieldMasukan

Modul Praktikum Kriptografi 2014 25


l. Meletakan program pada tombol Proses
Tombol proses akan berjalan ketika tombol mouse di klik dengan
cara arahkan dan klik pada tombol Proses  Klik tombol kiri mouse 
Pilih dan klik Events, seperti gambar berikut

Masukkan kode program berikut :


private void
jButtonProsesMouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

jTextFieldKeluaran.setText(jTextFieldMasukan.getText());}

Penjelasan:
jTextFieldMasukan.getText(); mengambil atau membaca nilai isi dari
isian jTextFieldMasukan, memberikan nilainya ke
jTextFieldKeluaran.setText(…..)

Modul Praktikum Kriptografi 2014 26


m. Menjalanakan Program

Pilih dan klik menu Run atau tekan toolbar  Masukkan :


Sesuai dengan keinginan  Klik tombol Proses. Lihat gambar berikut:

Modul Praktikum Kriptografi 2014 27


MODUL II
SANDI AFFINE DENGAN PEMOGRAMAN JAVA

A. Sandi Affine
Affine Cipher pada metode affine adalah perluasan dari metode Sandi Chaesar,
yang mengalihkan plainteks dengan sebuah nilai dan menambahkannya dengan sebuah
pergeseran P menghasilkan cipherteks C dinyatakan dengan fungsi kongruen
𝐶 ≡ 𝑚𝑃 + 𝑏(𝑚𝑜𝑑 𝑛)
Dimana n adalah ukuran alphabet, m adalah bilangan bulat yang harus relative
prima dengan n (jika tidak relative prima, maka deskripsi tidak bisa dilakukan) dan b
adalah jumlah pergeseran (Caesar Chiper adalah khusus dari affine chipper dengan
m=1). Untuk melakukan deskripsi, persamaan di atas harus dipecahkan untuk
memperoleh P. Solusi kekongruenan tersebut hanya ada jika invers m(mod n)
dinyatakan dengan 𝑚−1 . Jika 𝑚−1 ada maka deskripsi dilakukan dengan persamaan
sebagai berikut:
𝑃 ≡ 𝑚−1 (𝐶 − 𝑏)(𝑚𝑜𝑑 𝑛)

B. Aplikasi Java

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package vigenere;

/**
*
* @author Guest
*/
public class Main {

Modul Praktikum Kriptografi 2014 28


/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
new vig().setVisible(true);
}
public String merdeka (String plain, String key) {

int m = key.length();
plain = plain.toUpperCase().trim();
key = key.toUpperCase();
byte[] bytePlainText = plain.getBytes();
byte[] byteCipherText = new byte[plain.length()];
byte[] byteKey = key.getBytes();

for (int i=0; i < m; i++) byteKey[i] -= 64;


for (int i=0; i < plain.length(); i++) {
bytePlainText[i] -= 65;
// abaikan selain alfabet
if (bytePlainText[i]>-1 && bytePlainText[i]< 26) {

byteCipherText[i] = (byte)((bytePlainText[i] + byteKey[i %


m]-1) % 26);
byteCipherText[i] += 65;
}
else byteCipherText[i] = (byte)(bytePlainText[i] + 65);
}
return new String (byteCipherText);
}
public String indraadi (String sandi, String kunci) {
int m = kunci.length();
sandi = sandi.toUpperCase().trim();
kunci = kunci.toUpperCase();
byte[] bytesandiText = sandi.getBytes();
byte[] byteterangText = new byte[sandi.length()];
byte[] bytekunci = kunci.getBytes();
for (int i=0; i < m; i++) bytekunci[i] -= 64;
for (int i=0; i < sandi.length(); i++) {

Modul Praktikum Kriptografi 2014 29


bytesandiText[i] -= 65;
// abaikan selain alfabet
if (bytesandiText[i]<-1 && bytesandiText[i]< 26)
{
byteterangText[i] = (byte)((bytesandiText[i] - bytekunci[i
% m]+1) % 26);
byteterangText[i] += 65;
if (byteterangText[i]&<65)
{
byteterangText[i] += 26;
}
}
else byteterangText[i] = (byte)(bytesandiText[i] + 65 );
}
return new String (byteterangText); } }

**Contoh program Sandi Affine pada saat running

Modul Praktikum Kriptografi 2014 30


MODUL III
SANDI VIGENERE DENGAN PEMOGRAMAN JAVA

A. Sandi Vigenere
Sandi Vigenère sebenarnya merupakan pengembangan dari sandi Caesar. Pada
sandi Caesar, setiap huruf teks terang digantikan dengan huruf lain yang memiliki
perbedaan tertentu pada urutan alfabet. Misalnya pada sandi Caesar dengan geseran 3,
A menjadi D, B menjadi E and dan seterusnya. Sandi Vigenère terdiri dari beberapa
sandi Caesar dengan nilai geseran yang berbeda. Untuk menyandikan suatu pesan,
digunakan sebuah tabel alfabet yang disebut tabel Vigenère (gambar). Tabel Vigenère
berisi alfabet yang dituliskan dalam 26 baris, masing-masing baris digeser satu urutan
ke kiri dari baris sebelumnya, membentuk ke-26 kemungkinan sandi Caesar. Setiap
huruf disandikan dengan menggunakan baris yang berbeda-beda, sesuai kata kunci
yang diulang
Misalnya, teks terang yang hendak disandikan adalah perintah "Serbu Berlin":

serbuberlin

Sedangkan kata kunci antara pengirim dan tujuan adalah "Pizza". "PIZZA"
diulang sehingga jumlah hurufnya sama banyak dengan teks terang:

PIZZAPIZZAP

Huruf pertama pada teks terang, S, disandikan dengan menggunakan baris


berjudul P, huruf pertama pada kata kunci. Pada baris P dan kolom S di tabel Vigenère,
terdapat huruf H. Demikian pula untuk huruf kedua, digunakan huruf yang terletak
pada baris I (huruf kedua kata kunci) dan kolom E (huruf kedua teks terang), yaitu
huruf M. Proses ini dijalankan terus sehingga

Modul Praktikum Kriptografi 2014 31


Teks terang: Serbuberlin
Kata kunci: PIZZAPIZZAP
Teks bersandi: HMQAUQMQKIC

Proses sebalinya (disebut dekripsi), dilakukan dengan mencari huruf teks


bersandi pada baris berjudul huruf dari kata kunci. Misalnya, pada contoh di atas, untuk
huruf pertama, kita mencari huruf H (huruf pertama teks tersandi) pada baris P (huruf
pertama pada kata kunci), yang terdapat pada kolom S, sehingga huruf pertama adalah
S. Lalu M terdapat pada baris I di kolom E, sehingga diketahui huruf kedua teks terang
adalah E, dan seterusnya hingga didapat perintah "serbuberlin".
Enkripsi (penyandian) dengan sandi Vigenère juga dapat dituliskan secara
matematis, dengan menggunakan penjumlahan dan operasi modulus, yaitu:

atau C = P + K kalau jumlah dibawah 26 & - 26 kalau hasil jumlah di atas 26 dan
dekripsi,

atau P = C - K kalau hasilnya positif & + 26 kalau hasil pengurangan minus


Dimana:
Ci = nilai desimal karakter ciphertext ke-i
Pi = nilai desimal karakter plaintext ke-i
Ki = nilai desimal karakter kunci ke-i
Nilai desimal karakter: A=0 B=1 C=2 ... Z=25

Modul Praktikum Kriptografi 2014 32


Sebagai contoh, jika plaintext adalah STIKOMBALI dan kunci adalah
KAMPUS maka proses enkripsi yang terjadi adalah sebagai berikut:
Plaintext: STIKOMBALI

Key: KAMPUSKAMP

Ciphertext: CTUZIELAXX

Pada contoh diatas kata kunci KAMPUS diulang sedemikian rupa hingga
panjang kunci sama dengan panjang plainteksnya. Jika dihitung dengan rumus enkripsi
vigenere plainteks huruf pertama S (yang memiliki nilai Pi=18) akan dilakukan
pergeseran dengan huruf K (yang memiliki Ki=10) maka prosesnya sebagai berikut:
Ci = ( Pi + Ki ) mod 26
= (18 + 10) mod 26
= 28 mod 26
=2

Ci = 2 maka huruf ciphertext dengan nilai 2 adalah C . Begitu seterusnya


dilakukan pergeseran sesuai dengan kunci pada setiap huruf hingga semua plainteks
telah terenkripsi menjadi ciphertext. Setelah semua huruf terenkripsi maka proses
dekripsinya dapat dihitung sebagai berikut:
Pi = ( Ci – Ki ) + 26
= ( 2 – 10 ) + 26
= –8 + 26
= 18
Pi = 18 maka huruf plainteks dengan nilai 18 adalah S. Begitu seterusnya
dilakukan pergeseran sesuai dengan kunci pada setiap huruf hingga semua ciphertext
telah terdekripsi menjadi plainteks.

Modul Praktikum Kriptografi 2014 33


B. Program Java

char mapPesanCr []
={'_','A','B','C','D','E','F','G','H','I','J','K','L','M','N
','O','P','Q','R','S','T','U','V','W','X','Y','Z','∑'};

char chPesan;
char chPass;

int nilaiPesan = 0;
int nilaiPass=0;
int [] hasilEnkrip;
int hasilDekripsi[];

String hasilEnkripsiStr;
String hasilDekripsiStr;

public void ekstrakEnkripsi(String pesan, String pswd){


hasilEnkrip=new int[pesan.length()];
for(int i=0;i<pesan.length();i++){
chPesan=pesan.charAt(i);
chPass=pswd.charAt(i);
for (int j = 0; j < mapPesanCr.length; j++) {
if(chPesan==mapPesanCr[j]){
nilaiPesan=j;
System.out.println("Nilai pesan :
"+chPesan+" : "+j);
}
if(chPass==mapPesanCr[j]){
nilaiPass=j;
System.out.println("Nilai pass :
"+chPass+" : "+j);

Modul Praktikum Kriptografi 2014 34


}
}
hasilEnkrip[i]=nilaiPesan+nilaiPass;
System.out.println("Nilai : "+hasilEnkrip[i]);
if(hasilEnkrip[i] > mapPesanCr.length){
hasilEnkrip[i]=hasilEnkrip[i]-
mapPesanCr.length;
System.out.println("Nilai if benar :
"+hasilEnkrip[i]);
}else if(hasilEnkrip[i]<mapPesanCr.length){
hasilEnkrip[i]=hasilEnkrip[i];
System.out.println("Nilai if salah :
"+hasilEnkrip[i]);
}

System.out.println("\n==============================");
}
}

public void hasilEnkripsi(){


hasilEnkripsiStr="";
for(int i=0; i<hasilEnkrip.length; i++){
for(int j =0; j<mapPesanCr.length;j++){
if(j==hasilEnkrip[i]){

hasilEnkripsiStr+=Character.toString(mapPesanCr[j]);
}
}
}
}

public String getHasilEnkripsiStr() {

Modul Praktikum Kriptografi 2014 35


return hasilEnkripsiStr;
}

public void ekstrakDekripsi(String pswd){


hasilDekripsi=new int[hasilEnkripsiStr.length()];
for(int i=0;i<hasilEnkripsiStr.length();i++){
chPesan=hasilEnkripsiStr.charAt(i);
chPass=pswd.charAt(i);
for (int j = 0; j < mapPesanCr.length; j++) {
if(chPesan==mapPesanCr[j]){
nilaiPesan=j;
System.out.println("Nilai pesan :
"+chPesan+" : "+j);
}
if(chPass==mapPesanCr[j]){
nilaiPass=j;
System.out.println("Nilai pass :
"+chPass+" : "+j);
}
}
hasilDekripsi[i]=nilaiPesan-nilaiPass;
System.out.println("Nilai : "+hasilDekripsi[i]);
if(hasilDekripsi[i] < 0){

hasilDekripsi[i]=hasilDekripsi[i]+mapPesanCr.length;
System.out.println("Nilai if benar :
"+hasilDekripsi[i]);
}else if(hasilDekripsi[i]>0){
hasilDekripsi[i]=hasilDekripsi[i];
System.out.println("Nilai if salah :
"+hasilDekripsi[i]);
}

Modul Praktikum Kriptografi 2014 36


System.out.println("\n==============================");
}
}

public void hasilDekripsi(){


hasilDekripsiStr="";
for(int i=0; i<hasilDekripsi.length; i++){
for(int j =0; j<mapPesanCr.length;j++){
if(j==hasilDekripsi[i]){

hasilDekripsiStr+=Character.toString(mapPesanCr[j]);
}
}
}
}

public String getHasilDekripsiStr() {


return hasilDekripsiStr;
}
}

Modul Praktikum Kriptografi 2014 37


**Contoh program Sandi Vigenere pada saat running

Modul Praktikum Kriptografi 2014 38


MODUL IV
SANDI RSA DENGAN PEMOGRAMAN JAVA

A. Sandi RSA
Algoritma kunci-publik yang paling terkenal dan paling banyak aplikasinya.
Ditemukan oleh tiga peneliti dari MIT (Massachussets Institute of Technology), yaitu
Ron Rivest, Adi Shamir, dan Len Adleman, pada tahun 1976. Keamanan algoritma
RSA terletak pada sulitnya memfaktorkan bilangan yang besar menjadi faktor-faktor
prima.
 p dan q bilangan prima (rahasia)
 n=pq (tidak rahasia)
 (n) = (p – 1)(q – 1) (rahasia)
 e (kunci enkripsi) (tidak rahasia)
Syarat: PBB(e, (n)) = 1

 d (kunci dekripsi) (rahasia)


d dihitung dari d  e-1 mod ((n) )

 m (plainteks) (rahasia)
 c (cipherteks) (tidak rahasia)

1. Enkripsi
Nyatakan pesan menjadi blok-blok plainteks: m1, m2, m3, … ( syarat: 0 <
mi < n – 1). Hitung blok cipherteks ci untuk blok plainteks pi dengan
persamaan ci = mie mod n yang dalam hal ini, e adalah kunci publik.
2. Dekripsi
Proses dekripsi dilakukan dengan menggunakan persamaan mi = cid mod
n, yang dalam hal ini, d adalah kunci privat.

Modul Praktikum Kriptografi 2014 39


3. CONTOH
Misalkan dipilih p = 47 dan q = 71 (keduanya prima), maka dapat dihitung:
n = p  q = 3337
(n) = (p – 1)(q – 1) = 3220.
Pilih kunci publik e = 79 (yang relatif prima dengan 3220 karena pembagi
bersama terbesarnya adalah 1). Nilai e dan n dapat dipublikasikan ke
umum. Selanjutnya akan dihitung kunci privat d dengan kekongruenan:
e  d  1 (mod (n))
atau

1  (k  3220)
d
79

dengan mencoba nilai-nilai k = 1, 2, 3, …, diperoleh nilai d yang bulat


adalah 1019. Ini adalah kunci privat (untuk dekripsi).
Misalkan plainteks M = ‘HARI INI’ atau dalam ASCII:
7265827332737873
Pecah M menjadi blok yang 3 digit:
m1 = 726 m4 = 273
m2 = 582 m5 = 787
m3 = 733 m6 = 003
(Perhatikan, mi masih terletak antara 0 sampai n – 1 = 3337)
Enkripsi setiap blok:
c1 = 72679 mod 3337 = 215
c2 = 58279 mod 3337 = 776
dst

Hasil: C = 215 776 1743 933 1731 158.

Modul Praktikum Kriptografi 2014 40


Dekripsi (menggunakan kunci privat d = 1019)
m1 = 2151019 mod 3337 = 726
m2 =7761019 mod 3337 = 582 dst untuk sisi blok lainnya

Plainteks M = 7265827332737873 yang dalam ASCII adalah ‘HARI INI’.

B. Aplikasi Java

RSA Algorithm
/* C program for the Implementation Of RSA Algorithm */

#include< stdio.h>
#include< conio.h>

int phi,M,n,e,d,C,FLAG;

int check()
{
int i;
for(i=3;e%i==0 && phi%i==0;i+2)
{
FLAG = 1;
return;
}
FLAG = 0;
}

void encrypt()
{
int i;
C = 1;

Modul Praktikum Kriptografi 2014 41


for(i=0;i< e;i++)
C=C*M%n;
C = C%n;
printf("\n\tEncrypted keyword : %d",C);
}

void decrypt()
{
int i;
M = 1;
for(i=0;i< d;i++)
M=M*C%n;
M = M%n;
printf("\n\tDecrypted keyword : %d",M);
}

void main()
{
int p,q,s;
clrscr();
printf("Enter Two Relatively Prime Numbers\t: ");
scanf("%d%d",&p,&q);
n = p*q;
phi=(p-1)*(q-1);
printf("\n\tF(n)\t= %d",phi);
do
{
printf("\n\nEnter e\t: ");
scanf("%d",&e);
check();
}while(FLAG==1);
d = 1;

Modul Praktikum Kriptografi 2014 42


do
{
s = (d*e)%phi;
d++;
}while(s!=1);
d = d-1;
printf("\n\tPublic Key\t: {%d,%d}",e,n);
printf("\n\tPrivate Key\t: {%d,%d}",d,n);
printf("\n\nEnter The Plain Text\t: ");
scanf("%d",&M);
encrypt();
printf("\n\nEnter the Cipher text\t: ");
scanf("%d",&C);
decrypt();
getch();
}

/*************** OUTPUT *****************

Enter Two Relatively Prime Numbers : 7 17


F(n) = 96
Enter e : 5
Public Key : {5,119}
Private Key : {77,119}
Enter The Plain Text : 19
Encrypted keyword : 66
Enter the Cipher text : 66
Decrypted keyword : 19 */

Modul Praktikum Kriptografi 2014 43


**Contoh program Sandi RSA pada saat running

Modul Praktikum Kriptografi 2014 44


MODUL V
SANDI PELABELAN GRAF DENGAN PEMOGRAMAN JAVA

A. Sandi Pelabelan graf


Sandi Pelabelan Graf merupakan pengembangan ilmu kriptografi yang
diaplikasikan dengan menggunakan graf matematika dalam memproses pola sandinya.
Ada banyak jenis graf, tetapi dalam sandi pelabelan graf adalah graf lintasan (Path).
Pelabelan graf total sisi ajaib pada graf lintasan adalah sebagai berikut:

Memiliki pola:

B. Aplikasi Java

package Program;
public class DeskripsiPanel extends javax.swing.JPanel {
String mem;

public DeskripsiPanel() {
initComponents();
}
private void DeqActionPerformed(java.awt.event.ActionEvent
evt) {

//==========================================================
============
mem=pesanok.getText();
for (int fix = 0; fix <= 20; fix++) {
hsilensq.setText(null);

Modul Praktikum Kriptografi 2014 45


String pesan1 = "";
String car = "";
String pesan = pesanok.getText();
int simpul2 = 0;
int panjangpesan = pesan.length();
int nilai[] = new int[panjangpesan + 1];
int moduluspesan = panjangpesan % 2;

//==========================================================
============
//menentukan banyak simpul untuk karekter ganjil dan
genap

//==========================================================
============
if (moduluspesan > 0) {
simpul2 = (panjangpesan + 1) / 2;
System.out.println("Kita masuk mode ganjil");
}
if (moduluspesan == 0) {
simpul2 = (panjangpesan + 2) / 2;
System.out.println("Kita masuk mode genap");
}

//==========================================================
============
System.out.println("Jumlah karakter " +
panjangpesan);
int a = -4;
int b = -2;
int c = -1;
int mem1 = simpul2 - 1; //menghitung banyak sisi

//==========================================================
============
//menghitung hasil simpul genap untuk banyak simpul
ganjil atau genap

//==========================================================
============
if (simpul2 % 2 > 0) {

Modul Praktikum Kriptografi 2014 46


for (int x = 2; x <= simpul2; x = x + 2) {
b = b + 4;
int hasilsimpulgenap = (simpul2 + 1 + x) /
2;
nilai[b] = hasilsimpulgenap;
}
}
if (simpul2 % 2 == 0) {
for (int x = 2; x <= simpul2; x = x + 2) {
b = b + 4;
int hasilsimpulgenap = (simpul2 + x) / 2;
nilai[b] = hasilsimpulgenap;
}
}

//==========================================================
============
for (int x = 1; x <= simpul2; x = x + 2) {
a = a + 4;
int hasilsimpulganjil = (1 + x) / 2;
nilai[a] = hasilsimpulganjil;
}

//==========================================================
============
for (int y = 1; y <= mem1; y++) {
c = c + 2;
int sisi = (2 * simpul2) - y;
nilai[c] = sisi;
}

//==========================================================
============
//menampilkan simpul ganjil,genap dan sisi

//==========================================================
============
System.out.println("pasword " + (nilai[1] + nilai[0]
+ nilai[2]));

if (moduluspesan == 1) {

Modul Praktikum Kriptografi 2014 47


for (int d = 0; d < panjangpesan; d++) {
System.out.println(nilai[d]);
}
}
if (moduluspesan == 0) {
for (int d = 0; d <= panjangpesan; d++) {
System.out.println(nilai[d]);
}
}

//==========================================================
============
//enskripsi

//==========================================================
============
System.out.println("Hasil deq");
//for (int fix=0;fix<=10;fix++){
for (int d = 0; d < panjangpesan; d++) {
String t = pesan.substring(d, d + 1);
int ty
=nilai[0]+nilai[1]+nilai[panjangpesan-1];
String gracias=String.valueOf(ty);
String order=gracias+"49";
ty=Integer.parseInt(order);
int zaraa=Integer.parseInt(pass.getText());

//==========================================================
============
if(zaraa==ty)
{
char[] arrCharStr = t.toCharArray();
for (char adi : arrCharStr) {
int k = (int) adi;
k = k - 32;
if (d % 2 == 0) {
int enq = ((48 * (k - nilai[d])) %
95);
if (enq >= 0) {
enq = enq + 32;

Modul Praktikum Kriptografi 2014 48


char ok = (char) enq;
System.out.println("nilai a
invrs: 48 | nilai asci :"+k+" |nilai bil ajaib :"+nilai[d]+"
|"+enq);
System.out.println("eroor
positif" + enq + "|" + (char) enq);
//if
(String.valueOf(ok).equals("`") == true){ok='\n';}

hsilensq.append(String.valueOf(ok));
}
else {
enq = enq + 95 + 32;
char ok = (char)enq;
System.out.println("eroor
negatif" + enq + "|" + (char) enq);
//if
(String.valueOf(ok).equals("`") == true){ok='\n';}

hsilensq.append(String.valueOf(ok));
}

}
if (d % 2 == 1) {
int enq = ((93 * (k - nilai[d])) %
95);
if (enq >= 0) {
enq = enq + 32;
char ok = (char)enq;
System.out.println("nilai a
invrs: 93 | nilai asci :"+k+" |nilai bil ajaib :"+nilai[d]+"
|"+enq);
System.out.println("eroor
positif" + enq + "|" + (char) enq);
// if
(String.valueOf(ok).equals("`") == true){ok='\n';}

hsilensq.append(String.valueOf(ok));

}
else {

Modul Praktikum Kriptografi 2014 49


enq = enq + 95 + 32;
char ok = (char)enq;
System.out.println("eroor
negatif" + enq + "|" + (char) enq);
//if
(String.valueOf(ok).equals("`") == true){ok='\n';}

hsilensq.append(String.valueOf(ok));

}
}
}
else{hsilensq.setText(pesanok.getText());
}
}pesanok.setText(hsilensq.getText());}
hsilensq.setText(null);
String pesan1 = "";
String car = "";
String pesan = pesanok.getText();
int simpul2 = 0;
int panjangpesan = pesan.length();
int nilai[] = new int[panjangpesan + 1];
int moduluspesan = panjangpesan % 2;

//==========================================================
============
//menentukan banyak simpul untuk karekter ganjil dan
genap

//==========================================================
============
if (moduluspesan > 0) {
simpul2 = (panjangpesan + 1) / 2;
System.out.println("Kita masuk mode ganjil");
}
if (moduluspesan == 0) {
simpul2 = (panjangpesan + 2) / 2;
System.out.println("Kita masuk mode genap");
}

Modul Praktikum Kriptografi 2014 50


//==========================================================
============
System.out.println("Jumlah karakter " +
panjangpesan);
int a = -4;
int b = -2;
int c = -1;
int mem1 = simpul2 - 1; //menghitung banyak sisi

//==========================================================
============
//menghitung hasil simpul genap untuk banyak simpul
ganjil atau genap

//==========================================================
============
if (simpul2 % 2 > 0) {
for (int x = 2; x <= simpul2; x = x + 2) {
b = b + 4;
int hasilsimpulgenap = (simpul2 + 1 + x) /
2;
nilai[b] = hasilsimpulgenap;
}
}
if (simpul2 % 2 == 0) {
for (int x = 2; x <= simpul2; x = x + 2) {
b = b + 4;
int hasilsimpulgenap = (simpul2 + x) / 2;
nilai[b] = hasilsimpulgenap;
}
}

//==========================================================
============
for (int x = 1; x <= simpul2; x = x + 2) {
a = a + 4;
int hasilsimpulganjil = (1 + x) / 2;
nilai[a] = hasilsimpulganjil;
}

Modul Praktikum Kriptografi 2014 51


//==========================================================
============
for (int y = 1; y <= mem1; y++) {
c = c + 2;
int sisi = (2 * simpul2) - y;
nilai[c] = sisi;
}

//==========================================================
============
//menampilkan simpul ganjil,genap dan sisi

//==========================================================
============
System.out.println("pasword " + (nilai[1] + nilai[0]
+ nilai[2]));

if (moduluspesan == 1) {
for (int d = 0; d < panjangpesan; d++) {
System.out.println(nilai[d]);
}
}
if (moduluspesan == 0) {
for (int d = 0; d <= panjangpesan; d++) {
System.out.println(nilai[d]);
}
}

//==========================================================
============
//enskripsi

//==========================================================
============
System.out.println("Hasil deq");
//for (int fix=0;fix<=10;fix++){
for (int d = 0; d < panjangpesan; d++) {
String t = pesan.substring(d, d + 1);
int ty
=nilai[0]+nilai[1]+nilai[panjangpesan-1];

Modul Praktikum Kriptografi 2014 52


String gracias=String.valueOf(ty);
String order=gracias+"49";
ty=Integer.parseInt(order);
int zaraa=Integer.parseInt(pass.getText());

//==========================================================
============
if(zaraa==ty)
{
char[] arrCharStr = t.toCharArray();
for (char adi : arrCharStr) {
int k = (int) adi;
k = k - 32;
if (d % 2 == 0) {
int enq = ((48 * (k - nilai[d])) %
95);
if (enq >= 0) {
enq = enq + 32;
char ok = (char) enq;
System.out.println("nilai a
invrs: 48 | nilai asci :"+k+" |nilai bil ajaib :"+nilai[d]+"
|"+enq);
System.out.println("eroor
positif" + enq + "|" + (char) enq);
if
(String.valueOf(ok).equals("`") == true){ok='\n';}

hsilensq.append(String.valueOf(ok));
}
else {
enq = enq + 95 + 32;
char ok = (char)enq;
System.out.println("eroor
negatif" + enq + "|" + (char) enq);
if
(String.valueOf(ok).equals("`") == true){ok='\n';}

hsilensq.append(String.valueOf(ok));
}

Modul Praktikum Kriptografi 2014 53


}
if (d % 2 == 1) {
int enq = ((93 * (k - nilai[d])) %
95);
if (enq >= 0) {
enq = enq + 32;
char ok = (char)enq;
System.out.println("nilai a
invrs: 93 | nilai asci :"+k+" |nilai bil ajaib :"+nilai[d]+"
|"+enq);
System.out.println("eroor
positif" + enq + "|" + (char) enq);
if
(String.valueOf(ok).equals("`") == true){ok='\n';}

hsilensq.append(String.valueOf(ok));

}
else {
enq = enq + 95 + 32;
char ok = (char)enq;
System.out.println("eroor
negatif" + enq + "|" + (char) enq);
if
(String.valueOf(ok).equals("`") == true){ok='\n';}

hsilensq.append(String.valueOf(ok));

}
}
}
else{hsilensq.setText(pesanok.getText());

}
}
//====================selesai disini================
pesanok.setText(mem);

Modul Praktikum Kriptografi 2014 54


**Contoh program Sandi Pelabelan Graf pada saat running

Modul Praktikum Kriptografi 2014 55


BAB VI
EDITOR SMS DENGAN PELABELAN GRAF

A. Editor SMS dengan Pelabelan Graf


Pelabelan graf adalah suatu pemberian nilai (dengan bilangan bulat) pada titik
atau sisi dari graf atau keduanya sehingga memenuhi kondisi tertentu. Pelabelan graf
pertama diperkenalkan oleh Rosa (1967). Berbagai macam pelabelan graf dikaji dan
berkembang, baik konsep itu muncul untuk keperluan aplikasi maupun teoritis.
Aplikasi pelabelan graf dapat dijumpai dalam berbagai bidang diantaranya
dekomposisi graf, kriptografi, kristalografi x-ray, teori koding (coding theory), radar,
desain sirkuit dan desain jaringan komunikasi.
Pelabelan total sisi ajaib super (TSAS) graf akan 𝑛𝑃2 ∪ 𝑃𝑛 disajikan dalam
teorema berikut :
Teorema : Untuk setiap 𝑛 ≥ 2, graf 𝑛𝑃2 ∪ 𝑃𝑛 graf memiliki pelabelan total sisi ajaib
super dengan konstanta ajaib (Sudarsana, et al., 2004: 59).

Gambar 2.3: Contoh Pelabelan TSAS Graf 3𝑃2 ∪ 𝑃3 dengan k = 22

Modul Praktikum Kriptografi 2014 56


B. Aplikasi Java
1. Kompres.java
import java.io.PrintStream;
/* */
/* */ public class Kompres
/* */ {
/* 5 */ static String[] cc = new String['€'];
/* 6 */ static String ccSISANYA = "1111110";
/* 7 */ static String ccDIPESAN = "1111111";
/* 8 */ static boolean udahInit = false;
/* */
/* */ static void init() {
/* 11 */ if (udahInit) return;
/* */
/* 13 */ udahInit = true;
/* */
/* 15 */ cc[32] = "1011";
/* 16 */ cc[33] = "1100011";
/* 17 */ cc[34] = "1100110";
/* 18 */ cc[39] = "1100100";
/* 19 */ cc[40] = "11111010";
/* 20 */ cc[41] = "11111011";
/* 21 */ cc[44] = "1100001";
/* 22 */ cc[45] = "1100101";
/* 23 */ cc[46] = "1100000";
/* 24 */ cc[47] = "1111011";
/* 25 */ cc[48] = "1110000";
/* 26 */ cc[49] = "1110001";
/* 27 */ cc[50] = "1110010";
/* 28 */ cc[51] = "1110011";
/* 29 */ cc[52] = "1110100";

Modul Praktikum Kriptografi 2014 57


/* 30 */ cc[53] = "1110101";
/* 31 */ cc[54] = "1110110";
/* 32 */ cc[55] = "1110111";
/* 33 */ cc[56] = "1111000";
/* 34 */ cc[57] = "1111001";
/* 35 */ cc[58] = "1111100";
/* 36 */ cc[63] = "1100010";
/* 37 */ cc[64] = "1111010";
/* 38 */ cc[65] = "1000000";
/* 39 */ cc[66] = "10000101";
/* 40 */ cc[67] = "1001101";
/* 41 */ cc[68] = "10001011";
/* 42 */ cc[69] = "1100111";
/* 43 */ cc[70] = "10011001";
/* 44 */ cc[71] = "10010101";
/* 45 */ cc[72] = "1001000";
/* 46 */ cc[73] = "1000001";
/* 47 */ cc[74] = "100110001001";
/* 48 */ cc[75] = "1001100011";
/* 49 */ cc[76] = "1001001";
/* 50 */ cc[77] = "10010100";
/* 51 */ cc[78] = "1000110";
/* 52 */ cc[79] = "1000100";
/* 53 */ cc[80] = "10010110";
/* 54 */ cc[81] = "1001100010000";
/* 55 */ cc[82] = "1000111";
/* 56 */ cc[83] = "1000011";
/* 57 */ cc[84] = "100111";
/* 58 */ cc[85] = "10010111";
/* 59 */ cc[86] = "1000101001";
/* 60 */ cc[87] = "1000101000";
/* 61 */ cc[88] = "10011000101";

Modul Praktikum Kriptografi 2014 58


/* 62 */ cc[89] = "10000100";
/* 63 */ cc[90] = "1001100010001";
/* 64 */ cc[97] = "00000";
/* 65 */ cc[98] = "000101";
/* 66 */ cc[99] = "01101";
/* 67 */ cc[100] = "001011";
/* 68 */ cc[101] = "1010";
/* 69 */ cc[102] = "011001";
/* 70 */ cc[103] = "010101";
/* 71 */ cc[104] = "01000";
/* 72 */ cc[105] = "00001";
/* 73 */ cc[106] = "0110001001";
/* 74 */ cc[107] = "01100011";
/* 75 */ cc[108] = "01001";
/* 76 */ cc[109] = "010100";
/* 77 */ cc[110] = "00110";
/* 78 */ cc[111] = "00100";
/* 79 */ cc[112] = "010110";
/* 80 */ cc[113] = "01100010000";
/* 81 */ cc[114] = "00111";
/* 82 */ cc[115] = "00011";
/* 83 */ cc[116] = "0111";
/* 84 */ cc[117] = "010111";
/* 85 */ cc[118] = "00101001";
/* 86 */ cc[119] = "00101000";
/* 87 */ cc[120] = "011000101";
/* 88 */ cc[121] = "000100";
/* 89 */ cc[122] = "01100010001";
/* */ }
/* */
/* */ static String kompresSisanya(char kar) {
/* 93 */ String s = Integer.toBinaryString(kar);

Modul Praktikum Kriptografi 2014 59


/* 94 */ s = "0000000000000000".substring(0, 16 -
s.length()) + s;
/* 95 */ return ccSISANYA + s;
/* */ }
/* */
/* */ static byte[] stringKeByteA(String st) {
/* 99 */ int lenAsli = st.length();
/* 100 */ st = st + "11111111";
/* 101 */ byte[] hs = new byte[(lenAsli + 7) / 8];
/* 102 */ for (int i = 0; i < lenAsli; i += 8) {
/* 103 */ String sebyte = st.substring(i, i + 8);
/* 104 */ byte b = (byte)Integer.parseInt(sebyte,
2);
/* 105 */ hs[(i / 8)] = b;
/* */ }
/* 107 */ return hs;
/* */ }
/* */
/* */ static String byteAKeString(byte[] ba) {
/* 111 */ String hs = "";
/* 112 */ for (int i = 0; i < ba.length; i++) {
/* 113 */ int b = ba[i];
/* 114 */ if (b < 0) b += 256;
/* 115 */ String tp = Integer.toBinaryString(b);
/* 116 */ tp = "00000000".substring(0, 8 -
tp.length()) + tp;
/* 117 */ hs = hs + tp;
/* */ }
/* 119 */ return hs;
/* */ }
/* */
/* */ public static byte[] kompres(String st) {

Modul Praktikum Kriptografi 2014 60


/* 123 */ init();
/* 124 */ String jadi = "";
/* 125 */ for (int i = 0; i < st.length(); i++) {
/* 126 */ char kar = st.charAt(i);
/* 127 */ if (kar >= '€') {
/* 128 */ jadi = jadi + kompresSisanya(kar);
/* */ }
/* 130 */ else if (cc[kar] != null)
/* 131 */ jadi = jadi + cc[kar];
/* */ else {
/* 133 */ jadi = jadi + kompresSisanya(kar);
/* */ }
/* */ }
/* */
/* 137 */ return stringKeByteA(jadi);
/* */ }
/* */
/* */ static int cariKar(String buf) {
/* 141 */ if (buf.length() > 23) {
/* 142 */ return -2;
/* */ }
/* 144 */ if ((buf.length() == 23) &&
/* 145 */ (buf.substring(0,
7).equals(ccSISANYA))) {
/* 146 */ return
Integer.parseInt(buf.substring(7), 2);
/* */ }
/* */
/* 149 */ for (int i = 0; i < 128; i++) {
/* 150 */ if ((cc[i] != null) &&
/* 151 */ (cc[i].equals(buf))) {
/* 152 */ return i;

Modul Praktikum Kriptografi 2014 61


/* */ }
/* */ }
/* */
/* 156 */ return -1;
/* */ }
/* */
/* */ public static String dekompres(byte[] ba) {
/* 160 */ init();
/* 161 */ String st = byteAKeString(ba);
/* 162 */ String hs = "";
/* 163 */ String buf = "";
/* 164 */ for (int i = 0; i < st.length(); i++) {
/* 165 */ char kar = st.charAt(i);
/* 166 */ buf = buf + kar;
/* 167 */ int c = cariKar(buf);
/* 168 */ if (c >= 0) {
/* 169 */ buf = "";
/* 170 */ hs = hs + (char)c;
/* 171 */ } else if (c == -2) {
/* 172 */ buf = "";
/* */ }
/* */ }
/* 175 */ return hs;
/* */ }
/* */
/* */ public static void main(String[] args) {
/* 179 */ String a = ";;;;;;;;Halo, apa kabar
dunia, tetep asik bukan? Aku sedang di kamar mandi. Eh,
tapi that's not what I wanted to tell you. It is, that
it works correctly! Beberapa karakter lagi biar penuh
sekalian, harusnya ga cukup.";
/* 180 */ byte[] b = kompres(a);

Modul Praktikum Kriptografi 2014 62


/* 181 */ String c = dekompres(b);
/* 182 */ System.out.println(c);
/* */ }
/* */ }

2. EditorSMS.java
import javax.microedition.midlet.*;
import com.sun.cldc.i18n.uclc.DefaultCaseConverter;
import java.util.Date;
import javax.wireless.messaging.*;
import javax.microedition.io.Connector;
import javax.microedition.io.PushRegistry;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.wireless.messaging.MessageConnection;
import javax.wireless.messaging.MessageListener;
import java.io.*;
import java.util.TimeZone;
import javax.microedition.media.Manager;
import javax.microedition.media.Player;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;
/**
* @author Rahma
*/
public class EditorSMS extends MIDlet implements
CommandListener ,MessageListener,Runnable {
//deklarasi variabel
private Kompres ackomp;
Font hrf;
char sttsdecrypt;

Modul Praktikum Kriptografi 2014 63


int [] indeks;
int jmlPsnBrIn;
Form
FormLogin,about,IsiKontak,bukaPesanCrypt,textSmsMasuk,t
extSmsKeluar,hslCrypt,teksCrypt;
TextBox teks;
TextField noHp,key,keybuka,tTxtMasuk,tTxtKeluar,infoi;
List plhMenu,PilihKontak,PesanMasuk,PesanKeluar;
Command
plh,kembali,keluar,kirim,balas,hapusTeks,hapusNomor,kem
baliMenuUtama,hapus,Decrypt,Enkrip, Kompres, KomEnkrip;
Display display;
Thread thread;
String [] connections;
boolean done;
Message msg;
String
port,isiSmsMasuk,senderAddress,noBls,noEnc,SmsEnc,tglEn
c,teruskan;
MessageConnection smsconn;
Ticker tekstick;
Image
iTlsPsn,InfoSmsMasuk,iKtkMsk,iKtkKlr,iHpsKtkMsk,iHpsKtk
Klr,iSmsSdh,iSmsBlm,smskel,iMnz,hpsPsn,FotoQ,mn_abt;
Alert
infoMasuk,TdkTerkrm,KonfirHapus,KonfirHapusKel,tunggu,t
ekKsg,InfoKunci,konfirKel,konfirHpsKey;
Date waktuSms;
Displayable currentDisplay;
RecordStore SMS,SMSKeluar;
char ktk;
ImageItem iHpsPsn;

Modul Praktikum Kriptografi 2014 64


InputStream suara=null;
Player explode=null;
private int bitASCII=7;
private Object Pesan;
//konstruktor
public EditorSMS(){
hrf=Font.getFont(Font.FONT_STATIC_TEXT,
Font.STYLE_BOLD, Font.SIZE_LARGE);
display = Display.getDisplay(this);
loadGambar();

plhMenu = new List("Menu Utama", 3);


about = new Form("Tentang Aplikasi");
FormLogin = new Form("Silahkan Login");
IsiKontak = new Form("Masukkan No. Telp");
bukaPesanCrypt = new Form("Info");

noHp = new TextField("Nomor Telp : "+"\n", null, 32,


TextField.PHONENUMBER);
teks = new TextBox("Tulis Pesan", "", 1000,
TextField.PLAIN);
key = new TextField("Kunci Enkripsi : "+"\n", null, 7,
TextField.NUMERIC);
keybuka = new TextField("Kunci Dekripsi :"+"\n", null,
7, TextField.NUMERIC);
infoi = new TextField("\nINFO KOMPRESI\\nJumlah Bit
(asli) :" + "\nJumlah Bit (kompres) : ", null, 32,
TextField.ANY);
plh = new Command("Pilih", Command.SCREEN, 2);
keluar = new Command("Keluar", Command.STOP, 4);
kembali = new Command("Kembali", Command.BACK, 2);

Modul Praktikum Kriptografi 2014 65


kembaliMenuUtama = new Command("Ke Menu Utama",
Command.SCREEN, 4);
kirim = new Command("Kirim", Command.SCREEN, 2);
balas = new Command("Balas", Command.SCREEN, 2);
hapusNomor = new Command("Hapus Nomor", Command.SCREEN,
3);
hapusTeks = new Command("Hapus Teks", Command.SCREEN,
3);
hapus = new Command("Hapus", Command.SCREEN, 2);
Decrypt = new Command("Dekripsi Pesan", Command.SCREEN,
1);
Kompres = new Command ("Kompresi Pesan",
Command.SCREEN,2);
Enkrip = new Command ("Enkripsi Pesan",
Command.SCREEN,2);
KomEnkrip = new Command ("Kompresi+Ekripsi Pesan",
Command.SCREEN,2);
infoMasuk = new Alert("Pesan Masuk", null,
InfoSmsMasuk, AlertType.INFO);
TdkTerkrm = new Alert("Info", "Pesan Tidak Terkirim",
null, AlertType.WARNING);
KonfirHapus = new Alert("Konfirmasi", "Yakin semua
pesan masuk akan dihapus?", null,
AlertType.CONFIRMATION);
KonfirHapusKel = new Alert("Konfirmasi", "Yakin semua
pesan keluar akan dihapus?", null,
AlertType.CONFIRMATION);
tunggu = new Alert("Proses", null, hpsPsn,
AlertType.ALARM);
InfoKunci = new Alert("Info", null, null,
AlertType.WARNING);
InfoKunci.setTimeout(1500);

Modul Praktikum Kriptografi 2014 66


tekKsg = new Alert("Info", "Pesan tdk boleh kosong",
null, AlertType.WARNING);
tekKsg.setTimeout(1500);

konfirKel = new Alert("Konfirmai", "Apakah yakin akan


keluar ?", null, AlertType.CONFIRMATION);
konfirKel.addCommand(new Command("Ya", Command.OK, 2));
konfirKel.addCommand(new Command("Tidak",
Command.CANCEL, 4));
konfirKel.setCommandListener(this);

port="4321";
tekstick = new Ticker("Aplikasi Kriptografi SMS");
PesanMasuk = new List("Pesan Masuk", List.IMPLICIT);
PesanKeluar = new List("Pesan Keluar", List.IMPLICIT);

//Isi Objek
menuUtama();
FormAbout();
tulisSms();
hasilEncrypt();
IsiNoTelp();
formKotakMasuk();
formKotakKeluar();
tmplSmsCrypt();
AlertInfoSmsMasuk();
alertTdkTerkrm();
MkonfirHapus();
MkonfirHapusKeluar();
BukaPesanCrypt();
LoadSuara();
}

Modul Praktikum Kriptografi 2014 67


private void LoadSuara(){
try {
suara =
getClass().getResourceAsStream("/Suara/message.mid");
String type = "audio/midi";
explode = Manager.createPlayer(suara,type);
} catch (Exception e) {
}
}

//memasukkan gambar
private void loadGambar(){
try {
InfoSmsMasuk =
Image.createImage("/Gambar/sms_masuk.png");
iTlsPsn =
Image.createImage("/Gambar/mn_tls_sms.png");
iKtkMsk =
Image.createImage("/Gambar/mn_sms_msk.png");
iKtkKlr =
Image.createImage("/Gambar/mn_sms_klr.png");
iHpsKtkMsk =
Image.createImage("/Gambar/mn_sms_hps_msk.png");
iHpsKtkKlr =
Image.createImage("/Gambar/mn_sms_hps_klr.png");
iSmsSdh =
Image.createImage("/Gambar/sms_msk_sdh.png");
iSmsBlm =
Image.createImage("/Gambar/sms_msk_blm.png");
smskel = Image.createImage("/Gambar/sms_kel.png");
iMnz = Image.createImage("/Gambar/mnmz_app.png");

Modul Praktikum Kriptografi 2014 68


mn_abt = Image.createImage("/Gambar/mn_about.png");
FotoQ = Image.createImage("/Gambar/FotoQ.jpg");
} catch (Exception e) {
Alert erorGbr = new Alert("Error", "Gagal Load
Gambar"+e, null, AlertType.ALARM);
display.setCurrent(erorGbr);
}

private void menuUtama(){


plhMenu.addCommand(plh);
plhMenu.append("Tulis Pesan", iTlsPsn);
plhMenu.append("Kotak Masuk", iKtkMsk);
plhMenu.append("Pesan Terkirim", iKtkKlr);
plhMenu.append("Hapus Kotak Masuk", iHpsKtkMsk);
plhMenu.append("Hapus Pesan Terkirim", iHpsKtkKlr);
plhMenu.append("Tentang Editor SMS", mn_abt);
plhMenu.append("Keluar Editor SMS", iMnz);
plhMenu.setFont(0, hrf);
plhMenu.setFont(1, hrf);
plhMenu.setFont(2, hrf);
plhMenu.setFont(3, hrf);
plhMenu.setFont(4, hrf);
plhMenu.setFont(5, hrf);
plhMenu.setFont(6, hrf);
plhMenu.setCommandListener(this);
}

private void FormAbout(){


about.append(FotoQ);
about.append("Aplikasi "+"\n"

Modul Praktikum Kriptografi 2014 69


+ " "+"\n"+
""+"\n"+"");
about.addCommand(new Command("Kembali", Command.BACK,
2));
about.setCommandListener(this);
}

private void tulisSms( ){


teks.addCommand(kirim);
teks.addCommand(Kompres);
teks.addCommand(Enkrip);
teks.addCommand(KomEnkrip);
teks.addCommand(new Command("Batal", Command.BACK, 2));
teks.addCommand(hapusTeks);
teks.setCommandListener(this);
}

private void hasilEncrypt(){


hslCrypt = new Form("SMS Terenkripsi");
hslCrypt.addCommand(new Command("Ok", Command.OK, 1));
hslCrypt.setCommandListener(this);
}

public void IsiNoTelp(){


IsiKontak.addCommand(kirim);
IsiKontak.addCommand(kembali);
IsiKontak.addCommand(hapusNomor);
IsiKontak.append(noHp);
IsiKontak.append(key);
IsiKontak.append("Tentukan kunci dari 1-999999 jika
ingin mengenkripsi SMS ini");

Modul Praktikum Kriptografi 2014 70


IsiKontak.append("INFO KOMPRESI\nJumlah Bit (asli)
: "+ " ("+" karakter)" +
"\nJumlah Bit (kompres) : " + " ("+"
karakter)" +
"\nJumlah Message :"+"\nRatio Kompresi
: "+"%");
IsiKontak.setCommandListener(this);
}

private void AlertInfoSmsMasuk(){


infoMasuk.addCommand(new Command("Baca", Command.OK,
1));
infoMasuk.addCommand(new Command("Tidak", Command.EXIT,
2));
}

private void alertTdkTerkrm(){


TdkTerkrm.setTimeout(2000);
TdkTerkrm.addCommand(new Command("Ok", Command.OK, 3));
TdkTerkrm.setCommandListener(this);
}

private void InfoSmsMasuk(String no){


if(jmlPsnBrIn>1){
infoMasuk.setString("("+jmlPsnBrIn+")"+" SMS
Baru");
} else {
infoMasuk.setString("SMS Baru : "+no);
}

infoMasuk.setCommandListener(this);
display.setCurrent(infoMasuk);

Modul Praktikum Kriptografi 2014 71


}

private void formKotakMasuk(){


PesanMasuk.addCommand(new Command("Baca",
Command.SCREEN, 1));
PesanMasuk.addCommand(kembali);
PesanMasuk.setCommandListener(this);
}

private void MkonfirHapus(){


KonfirHapus.addCommand(new Command("Ya", Command.OK,
2));
KonfirHapus.addCommand(new Command("Tidak",
Command.CANCEL, 4));
KonfirHapus.setCommandListener(this);
}

private void formKotakKeluar(){


PesanKeluar.addCommand(new Command("Baca",
Command.SCREEN, 1));
PesanKeluar.addCommand(kembali);
PesanKeluar.setCommandListener(this);
}

private void MkonfirHapusKeluar(){


KonfirHapusKel.addCommand(new Command("Ya", Command.OK,
2));
KonfirHapusKel.addCommand(new Command("Tidak",
Command.CANCEL, 4));
KonfirHapusKel.setCommandListener(this);
}

Modul Praktikum Kriptografi 2014 72


private void BukaPesanCrypt(){
bukaPesanCrypt.addCommand(new Command("Ok",
Command.OK, 2));
bukaPesanCrypt.addCommand(new Command("Batal",
Command.CANCEL, 4));
bukaPesanCrypt.append(keybuka);
bukaPesanCrypt.setCommandListener(this);
}

//<<<< GUI

private void Koneksi(){


port = "4321";
String SmsConnection = "sms://:"+port;
done=true;
thread=null;
try {
smsconn=(MessageConnection)
Connector.open(SmsConnection);
smsconn.setMessageListener(this);
} catch (Exception e) {
}
connections=PushRegistry.listConnections(true);
done=false;
thread=new Thread(this);
thread.start();
}

private void tutupKoneksi() { //untuk menutup koneksi


sms
try {
smsconn.close();

Modul Praktikum Kriptografi 2014 73


} catch (Exception e) {
}
}

public void run() {//menangkap pesan yg masuk


try {
msg = smsconn.receive();
senderAddress = msg.getAddress();
senderAddress = fixNomer(senderAddress);
waktuSms = msg.getTimestamp();
if (msg instanceof TextMessage) {
isiSmsMasuk = ((TextMessage) msg).getPayloadText();
currentDisplay=display.getCurrent();
simpanSms(senderAddress, waktuSms.toString(),
isiSmsMasuk);
if (currentDisplay==plhMenu){
InfoSmsMasuk(senderAddress);
display.vibrate(1000);
} else
if(currentDisplay==infoMasuk){
InfoSmsMasuk(senderAddress);
currentDisplay=PesanMasuk;
display.vibrate(1000);
} else {
display.vibrate(1000);
}

}
tutupKoneksi();
Koneksi();
} catch (IOException e) {
}

Modul Praktikum Kriptografi 2014 74


}

private void simpanSms(String nmbr, String tgl, String


sms){
boolean s;
s=false;
try {
ByteArrayOutputStream baos = new
ByteArrayOutputStream();
DataOutputStream dos = new
DataOutputStream(baos);
dos.writeUTF(nmbr);
dos.writeUTF(tgl);
dos.writeUTF(sms);
dos.writeBoolean(s);
byte[] b = baos.toByteArray();
SMS.addRecord(b, 0, b.length);
baos.close();
dos.close();
tampilDataKotakMasuk();
} catch (Exception e) {
}
}

private void simpanSmsKeluar(String no, String smskel){


try {
Date tgl = new Date();
tgl.getTime();
ByteArrayOutputStream baos = new
ByteArrayOutputStream();
DataOutputStream dos = new
DataOutputStream(baos);

Modul Praktikum Kriptografi 2014 75


dos.writeUTF(no);
dos.writeUTF(tgl.toString());
dos.writeUTF(smskel);
byte[] b = baos.toByteArray();
SMSKeluar.addRecord(b, 0, b.length);
baos.close();
dos.close();
tampilDataKotakKeluar();
} catch (Exception e) {
}
}

private void tampilDataKotakMasuk(){


PesanMasuk.deleteAll();
byte [] tmpTampil;
RecordEnumeration re;
int jmlPsnBr=0;
int jmlPsn=0;
try {
re = SMS.enumerateRecords(null, null, false);
while(re.hasNextElement()){
int i = re.nextRecordId();
tmpTampil=SMS.getRecord(i);
ByteArrayInputStream bis = new
ByteArrayInputStream(tmpTampil);
DataInputStream dis = new
DataInputStream(bis);
String no = dis.readUTF();
String tgl = dis.readUTF();
String sms = dis.readUTF();
boolean s = dis.readBoolean();
if(s==false){

Modul Praktikum Kriptografi 2014 76


PesanMasuk.append(no, iSmsBlm);
} else{
PesanMasuk.append(no, iSmsSdh);
}
if(s==false){
jmlPsnBr++;
}
jmlPsn++;
bis.close();
dis.close();
}
} catch (Exception e) {
}
plhMenu.set(1, "Kotak Masuk
"+"("+jmlPsnBr+"/"+jmlPsn+")", iKtkMsk);
jmlPsnBrIn=0;
int p=0;
//Fokus Pointer ke sms belum dibaca
while(p<jmlPsn){
if(PesanMasuk.getImage(p)==iSmsBlm){
PesanMasuk.setSelectedIndex(p, true);
jmlPsnBrIn++;
}
p++;
}
///////////////////
}

private void tampilDataKotakKeluar(){


PesanKeluar.deleteAll();
byte [] tmpTampil;
RecordEnumeration re;

Modul Praktikum Kriptografi 2014 77


int jmlPsn=0;
try {
re = SMSKeluar.enumerateRecords(null, null,
false);
while(re.hasNextElement()){
int i = re.nextRecordId();
tmpTampil=SMSKeluar.getRecord(i);
ByteArrayInputStream bis = new
ByteArrayInputStream(tmpTampil);
DataInputStream dis = new
DataInputStream(bis);
String no = dis.readUTF();
String tgl = dis.readUTF();
String sms = dis.readUTF();
PesanKeluar.append(no, smskel);
jmlPsn++;
bis.close();
dis.close();
}
} catch (Exception e) {
}
plhMenu.set(2, "Pesan Terkirim "+"("+jmlPsn+")",
iKtkKlr);
}

private void tmplSmsCrypt(){


teksCrypt = new Form(null);
teksCrypt.addCommand(new Command("Read",
Command.OK, 1));
teksCrypt.addCommand(new Command("Batal",
Command.EXIT, 3));

Modul Praktikum Kriptografi 2014 78


teksCrypt.setCommandListener(this);
}

private void terima(String no, String tgl, String isi)


{ //ini untuk tempat membaca sms yang masuks
textSmsMasuk = new Form(no);
textSmsMasuk.append(isi+"\n");
textSmsMasuk.append("\n"+tgl);
textSmsMasuk.addCommand(balas);
textSmsMasuk.addCommand(hapus);
textSmsMasuk.addCommand(kembali);
textSmsMasuk.addCommand(kembaliMenuUtama);
textSmsMasuk.setCommandListener(this);
display.setCurrent(textSmsMasuk);
}

private void terimaKeluar(String no, String tgl, String


isi) { //ini untuk tempat membaca sms yang keluar
textSmsKeluar = new Form(no);
textSmsKeluar.append(isi+"\n");
textSmsKeluar.append("\n"+tgl);
textSmsKeluar.addCommand(new Command("Teruskan",
Command.OK, 1));
textSmsKeluar.addCommand(hapus);
textSmsKeluar.addCommand(kembali);
textSmsKeluar.addCommand(kembaliMenuUtama);
textSmsKeluar.setCommandListener(this);
display.setCurrent(textSmsKeluar);
}

private void mengirim(final String Chipertext) {


new Thread(new Runnable() {

Modul Praktikum Kriptografi 2014 79


//perhatiin ya
public void run() {
try {
getTextSMS(teks.getString());;
String isiSms = Chipertext;
String noTujuan = noHp.getString();
String address = "sms://" + noTujuan + ":" + port;
MessageConnection smsConnKir = null;
Message isiSmsNya;
smsConnKir = (MessageConnection)
Connector.open(address);
TextMessage txtmessage =
(TextMessage)
smsConnKir.newMessage(MessageConnection.TEXT_MESSAGE);
txtmessage.setAddress(address);
txtmessage.setPayloadText(isiSms);
isiSmsNya = txtmessage;
smsConnKir.send(isiSmsNya);
//Simpan SMS Keluar
simpanSmsKeluar(noTujuan, isiSms);
if(isiSms.startsWith("☼"+"\n")){
hslCrypt.deleteAll();
hslCrypt.append(isiSms.substring(2));
display.setCurrent(hslCrypt);
} else {
display.setCurrent(plhMenu);
}
noHp.setString(null);
teks.setString(null);
} catch (Throwable t) {
display.setCurrent(TdkTerkrm);
}

Modul Praktikum Kriptografi 2014 80


}
}).start();
}
private String fixNomer(String no) {
String hs = null;
hs = no.substring(6, no.length());
return hs;
}
public void getTextSMS(String Pesan){
int jumKar = Pesan.length();
teks.setTitle("Karakter : "+jumKar);
}
public void notifyIncomingMessage(MessageConnection
conn) {
if (thread == null) {
done = false;
thread = new Thread(this);
thread.start();
}try {
msg = smsconn.receive();
boolean dibaca = false;
Date smsTime = msg.getTimestamp();
String textIn =null;
String senderAddress = null;
if (msg instanceof TextMessage) {
senderAddress =
fixNomer(msg.getAddress());
textIn = ((TextMessage)
msg).getPayloadText();
}
if (msg instanceof BinaryMessage){
BinaryMessage bm = (BinaryMessage)msg;

Modul Praktikum Kriptografi 2014 81


byte[] binMsg = bm.getPayloadData();
senderAddress =
fixNomer(msg.getAddress());
//Dekompres dekomp = new
Dekompres(binMsg);
Kompres dekomp2 = new Kompres();
//textIn = dekomp.getHasilDekomp();
textIn = dekomp2.dekompres(binMsg);

}
try{
InfoSmsMasuk(senderAddress);
} catch (Exception e){}
closeConn();
openConn();
} catch (IOException e) {
System.out.println("salah di
penerimaan"+e);
}
}
public void openConn() {
String smsConnection = "sms://:" + port;
done = true;
thread = null;
try {
smsconn = (MessageConnection)
Connector.open(smsConnection);
smsconn.setMessageListener(this);
} catch (IOException ioe) {
ioe.printStackTrace();
}

Modul Praktikum Kriptografi 2014 82


connections =
PushRegistry.listConnections(true);
done = false;
thread = new Thread(this);
thread.start();
}
public void closeConn() { //untuk menutup koneksi
sms
try {
smsconn.close();
} catch (IOException e) {
}
}
private void BacaSmsMasuk(){
int bts=PesanMasuk.getSelectedIndex();
int ind=0;
try {
RecordEnumeration x = SMS.enumerateRecords(null, null,
false);
int i=0;
while(i<=bts){
ind=x.nextRecordId();
i++;
}
int sel = PesanMasuk.getSelectedIndex();
byte [] tmpTampil;
tmpTampil=SMS.getRecord(ind);
ByteArrayInputStream bis = new
ByteArrayInputStream(tmpTampil);
DataInputStream dis = new DataInputStream(bis);
String no = dis.readUTF();
String tgl = dis.readUTF();

Modul Praktikum Kriptografi 2014 83


String sms = dis.readUTF();
boolean s = dis.readBoolean();
noBls=no;
if(sms.startsWith("☼"+"\n")){
noEnc = no;
tglEnc = tgl;
SmsEnc = sms.substring(2);
sttsdecrypt='m';
teksCrypt.setTitle(no);
teksCrypt.deleteAll();
teksCrypt.append(SmsEnc);
display.setCurrent(teksCrypt);
} else {
terima(no, tgl, sms);
}
if(s==false){
ByteArrayOutputStream baos = new
ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeUTF(no);
dos.writeUTF(tgl);
dos.writeUTF(sms);
dos.writeBoolean(true);
byte[] b = baos.toByteArray();
SMS.setRecord(ind, b, 0, b.length);
tampilDataKotakMasuk();
PesanMasuk.setSelectedIndex(sel,true);
}
bis.close();
dis.close();
} catch (Exception e) {
}

Modul Praktikum Kriptografi 2014 84


}

private void BacaSmsKeluar(){


int bts=PesanKeluar.getSelectedIndex();
int ind=0;
try {
RecordEnumeration x =
SMSKeluar.enumerateRecords(null, null, false);
int i=0;
while(i<=bts){
ind=x.nextRecordId();
i++;
}
byte [] tmpTampil;
tmpTampil=SMSKeluar.getRecord(ind);
ByteArrayInputStream bis = new
ByteArrayInputStream(tmpTampil);
DataInputStream dis = new DataInputStream(bis);
String no = dis.readUTF();
String tgl = dis.readUTF();
String sms = dis.readUTF();
if(sms.startsWith("☼"+"\n")){
noEnc = no;
tglEnc = tgl;
SmsEnc = sms.substring(2);
sttsdecrypt='k';
teksCrypt.setTitle(no);
teksCrypt.deleteAll();
teksCrypt.append(SmsEnc);
display.setCurrent(teksCrypt);
} else {
teruskan=null;

Modul Praktikum Kriptografi 2014 85


teruskan=sms;
terimaKeluar(no, tgl, sms);
}
bis.close();
dis.close();
} catch (Exception e) {
}
}

private int hrftoank(char x){


int angka;
switch(x){
case ' ': angka=1;break;
case 'a': angka=2;break;
case 'b': angka=3;break;
case 'c': angka=4;break;
case 'd': angka=5;break;
case 'e': angka=6;break;
case 'f': angka=7;break;
case 'g': angka=8;break;
case 'h': angka=9;break;
case 'i': angka=10;break;
case 'j': angka=11;break;
case 'k': angka=12;break;
case 'l': angka=13;break;
case 'm': angka=14;break;
case 'n': angka=15;break;
case 'o': angka=16;break;
case 'p': angka=17;break;
case 'q': angka=18;break;
case 'r': angka=19;break;
case 's': angka=20;break;

Modul Praktikum Kriptografi 2014 86


case 't': angka=21;break;
case 'u': angka=22;break;
case 'v': angka=23;break;
case 'w': angka=24;break;
case 'x': angka=25;break;
case 'y': angka=26;break;
case 'z': angka=27;break;
case '\n': angka=28;break;
case 'A': angka=29;break;
case 'B': angka=30;break;
case 'C': angka=31;break;
case 'D': angka=32;break;
case 'E': angka=33;break;
case 'F': angka=34;break;
case 'G': angka=35;break;
case 'H': angka=36;break;
case 'I': angka=37;break;
case 'J': angka=38;break;
case 'K': angka=39;break;
case 'L': angka=40;break;
case 'M': angka=41;break;
case 'N': angka=42;break;
case 'O': angka=43;break;
case 'P': angka=44;break;
case 'Q': angka=45;break;
case 'R': angka=46;break;
case 'S': angka=47;break;
case 'T': angka=48;break;
case 'U': angka=49;break;
case 'V': angka=50;break;
case 'W': angka=51;break;
case 'X': angka=52;break;

Modul Praktikum Kriptografi 2014 87


case 'Y': angka=53;break;
case 'Z': angka=54;break;
case'.': angka=55;break;
case',': angka=56;break;
case'\'': angka=57;break;
case'?': angka=58;break;
case'!': angka=59;break;
case'"': angka=60;break;
case'-': angka=61;break;
case'(': angka=62;break;
case')': angka=63;break;
case'@': angka=64;break;
case'/': angka=65;break;
case':': angka=66;break;
case'_': angka=67;break;
case';': angka=68;break;
case'+': angka=69;break;
case'&': angka=70;break;
case'%': angka=71;break;
case'*': angka=72;break;
case'=': angka=73;break;
case'<': angka=74;break;
case'>': angka=75;break;
case'£': angka=76;break;
case'€': angka=77;break;
case'$': angka=78;break;
case'¥': angka=79;break;
case'¤': angka=80;break;
case'[': angka=81;break;
case']': angka=82;break;
case'{': angka=83;break;
case'}': angka=84;break;

Modul Praktikum Kriptografi 2014 88


case'\\': angka=85;break;
case'~': angka=86;break;
case'^': angka=87;break;
case'`': angka=88;break;
case'¡': angka=89;break;
case'¿': angka=90;break;
case'§': angka=91;break;
case'#': angka=92;break;
case'|': angka=93;break;
case'0': angka=94;break;
case'1': angka=95;break;
case'2': angka=96;break;
case'3': angka=97;break;
case'4': angka=98;break;
case'5': angka=99;break;
case'6': angka=100;break;
case'7': angka=101;break;
case'8': angka=102;break;
case'9': angka=103;break;
default: angka=0;
}
return angka;
}

private char anktohrf(int x){


char huruf;
while(x<1){
x=x+103;
}
switch(x){
case 1:huruf=' ';break;
case 2:huruf='a';break;

Modul Praktikum Kriptografi 2014 89


case 3:huruf='b';break;
case 4:huruf='c';break;
case 5:huruf='d';break;
case 6:huruf='e';break;
case 7:huruf='f';break;
case 8:huruf='g';break;
case 9:huruf='h';break;
case 10:huruf='i';break;
case 11:huruf='j';break;
case 12:huruf='k';break;
case 13:huruf='l';break;
case 14:huruf='m';break;
case 15:huruf='n';break;
case 16:huruf='o';break;
case 17:huruf='p';break;
case 18:huruf='q';break;
case 19:huruf='r';break;
case 20:huruf='s';break;
case 21:huruf='t';break;
case 22:huruf='u';break;
case 23:huruf='v';break;
case 24:huruf='w';break;
case 25:huruf='x';break;
case 26:huruf='y';break;
case 27:huruf='z';break;
case 28:huruf='\n';break;
case 29:huruf='A';break;
case 30:huruf='B';break;
case 31:huruf='C';break;
case 32:huruf='D';break;
case 33:huruf='E';break;
case 34:huruf='F';break;

Modul Praktikum Kriptografi 2014 90


case 35:huruf='G';break;
case 36:huruf='H';break;
case 37:huruf='I';break;
case 38:huruf='J';break;
case 39:huruf='K';break;
case 40:huruf='L';break;
case 41:huruf='M';break;
case 42:huruf='N';break;
case 43:huruf='O';break;
case 44:huruf='P';break;
case 45:huruf='Q';break;
case 46:huruf='R';break;
case 47:huruf='S';break;
case 48:huruf='T';break;
case 49:huruf='U';break;
case 50:huruf='V';break;
case 51:huruf='W';break;
case 52:huruf='X';break;
case 53:huruf='Y';break;
case 54:huruf='Z';break;
case 55:huruf='.';break;
case 56:huruf=',';break;
case 57:huruf='\'';break;
case 58:huruf='?';break;
case 59:huruf='!';break;
case 60:huruf='"';break;
case 61:huruf='-';break;
case 62:huruf='(';break;
case 63:huruf=')';break;
case 64:huruf='@';break;
case 65:huruf='/';break;
case 66:huruf=':';break;

Modul Praktikum Kriptografi 2014 91


case 67:huruf='_';break;
case 68:huruf=';';break;
case 69:huruf='+';break;
case 70:huruf='&';break;
case 71:huruf='%';break;
case 72:huruf='*';break;
case 73:huruf='=';break;
case 74:huruf='<';break;
case 75:huruf='>';break;
case 76:huruf='£';break;
case 77:huruf='€';break;
case 78:huruf='$';break;
case 79:huruf='¥';break;
case 80:huruf='¤';break;
case 81:huruf='[';break;
case 82:huruf=']';break;
case 83:huruf='{';break;
case 84:huruf='}';break;
case 85:huruf='\\';break;
case 86:huruf='~';break;
case 87:huruf='^';break;
case 88:huruf='`';break;
case 89:huruf='¡';break;
case 90:huruf='¿';break;
case 91:huruf='§';break;
case 92:huruf='#';break;
case 93:huruf='|';break;
case 94:huruf='0';break;
case 95:huruf='1';break;
case 96:huruf='2';break;
case 97:huruf='3';break;
case 98:huruf='4';break;

Modul Praktikum Kriptografi 2014 92


case 99:huruf='5';break;
case 100:huruf='6';break;
case 101:huruf='7';break;
case 102:huruf='8';break;
case 103:huruf='9';break;
default:huruf =' ';
}
return huruf;
}

private void hapusPesan(char ktk){


if(ktk=='m'){
RecordEnumeration re;
try {
re = SMS.enumerateRecords(null, null,
false);
while(re.hasNextElement()){
int i = re.nextRecordId();
SMS.deleteRecord(i);
}
tampilDataKotakMasuk();
plhMenu.setSelectedIndex(0, true);
display.setCurrent(plhMenu);
} catch (Exception e) {
}
ktk=' ';
}
if(ktk=='k'){
RecordEnumeration re;
try {
re =
SMSKeluar.enumerateRecords(null, null, false);

Modul Praktikum Kriptografi 2014 93


while(re.hasNextElement()){
int i = re.nextRecordId();
SMSKeluar.deleteRecord(i);
}
tampilDataKotakKeluar();
plhMenu.setSelectedIndex(0, true);
display.setCurrent(plhMenu);
} catch (Exception e) {
}
ktk=' ';
}
}

private int inversKey(int key){


int r = 103;
int ki;
while ((r+1) % key !=0){
r=r+103;
}
return ki=(r+1)/key;
}

private void Pelabelan(String pesan,int key){


indeks = new int[pesan.length()];
int i =pesan.length()-1;
int l =pesan.length()+1;
while (i>-1){
indeks[i]=l;
i=i-2;
l=l-1;
}
i=pesan.length()-1;

Modul Praktikum Kriptografi 2014 94


int s = indeks[2]+indeks[i];
i=pesan.length()-2;
while(i>0){
indeks[i]=s;
i=i-2;
s=s+2;
}
StringBuffer tmp = new StringBuffer("☼"+"\n");
char c;
int x=0;
for(int id=0;id<pesan.length();id++){
c=pesan.charAt(x);
tmp.append(anktohrf(Encrypt(hrftoank(c),
indeks[id], key)));
x++;
}
mengirim(tmp.toString());
}
private void pelabelanBaca(String pesan,int keyin){
indeks = new int[pesan.length()];
int i =pesan.length()-1;
int l =pesan.length()+1;
while (i>-1){
indeks[i]=l;
i=i-2;
l=l-1;
}
i=pesan.length()-1;
int s = indeks[2]+indeks[i];
i=pesan.length()-2;
while(i>0){
indeks[i]=s;

Modul Praktikum Kriptografi 2014 95


i=i-2;
s=s+2;
}
StringBuffer tmp = new StringBuffer();
char c;
int x=0;
for(int id=0;id<pesan.length();id++){
c=pesan.charAt(x);
tmp.append(anktohrf(Decrypt(hrftoank(c),
indeks[id], keyin)));
x++;
}
terima(noEnc, tglEnc, tmp.toString());
}

private void pelabelanBacaKeluar(String pesan,int


keyin){
indeks = new int[pesan.length()];
int i =pesan.length()-1;
int l =pesan.length()+1;
while (i>-1){
indeks[i]=l;
i=i-2;
l=l-1;
}
i=pesan.length()-1;
int s = indeks[2]+indeks[i];
i=pesan.length()-2;
while(i>0){
indeks[i]=s;
i=i-2;
s=s+2;

Modul Praktikum Kriptografi 2014 96


}
StringBuffer tmp = new StringBuffer();
char c;
int x=0;
for(int id=0;id<pesan.length();id++){
c=pesan.charAt(x);
tmp.append(anktohrf(Decrypt(hrftoank(c),
indeks[id], keyin)));
x++;
}
terimaKeluar(noEnc, tglEnc, tmp.toString());
}

private int Encrypt(int x, int y,int k){


return (k*x+y) % 103;
}

private int Decrypt(int x, int y, int k){


return k*(x-y) % 103;
}
public void startApp() {
Koneksi();
display.setCurrent(plhMenu);
try {
SMS = RecordStore.openRecordStore("smsDB.db",
true);
} catch (Exception e) {
}
tampilDataKotakMasuk();
try {
SMSKeluar =
RecordStore.openRecordStore("smsKel.db", true);

Modul Praktikum Kriptografi 2014 97


} catch (Exception e) {
}
tampilDataKotakKeluar();
plhMenu.setSelectedIndex(0, true);
}

public void pauseApp() {


}

public void destroyApp(boolean unconditional) {


tutupKoneksi();
try {
SMS.closeRecordStore();
SMSKeluar.closeRecordStore();
} catch (Exception e) {
}
}

public void commandAction (Command c, Displayable


d){
if (d==plhMenu){
if(plhMenu.isSelected(0)){
noBls=null;
noHp.setString(null);
display.setCurrent(teks);
}
if(plhMenu.isSelected(1)){
display.setCurrent(PesanMasuk);
}
if(plhMenu.isSelected(2)){
display.setCurrent(PesanKeluar);
}

Modul Praktikum Kriptografi 2014 98


if(plhMenu.isSelected(3)){
display.setCurrent(KonfirHapus);
}
if(plhMenu.isSelected(4)){
display.setCurrent(KonfirHapusKel);
}
if(plhMenu.isSelected(5)){
display.setCurrent(about);
}
if(plhMenu.isSelected(6)){
display.setCurrent(konfirKel);
}
}
if(d==teks){
if(c==kirim){
if (teks.getString().equals("")){
display.setCurrent(tekKsg);
} else {
display.setCurrent(IsiKontak);
noHp.setString(noBls);
noBls=null;
}
}
if(c.getLabel()=="Batal"){
display.setCurrent(plhMenu);
teks.setString("");
}
if(c==hapusTeks){
teks.setString(null);
}
}
if(d==IsiKontak){

Modul Praktikum Kriptografi 2014 99


if(c==kembali){
display.setCurrent(teks);
noHp.setString("");
}
if(c==hapusNomor){
noHp.setString(null);
}
}
if(d==teks){
if(c==Kompres){
if (teks.getString().equals("")){
display.setCurrent(tekKsg);
} else {
display.setCurrent(IsiKontak);
noHp.setString(noBls);
noBls=null;
}
}
if(c.getLabel()=="Batal"){
display.setCurrent(plhMenu);
teks.setString("");
}
if(c==hapusTeks){
teks.setString(null);
}
}
if(d==IsiKontak){
if(c==kembali){
display.setCurrent(teks);
noHp.setString("");
}
if(c==hapusNomor){

Modul Praktikum Kriptografi 2014 100


noHp.setString(null);
}
}
if(d==teks){
if(c==Enkrip){
if (teks.getString().equals("")){
display.setCurrent(tekKsg);
} else {
display.setCurrent(IsiKontak);
noHp.setString(noBls);
noBls=null;
}
}
if(c.getLabel()=="Batal"){
display.setCurrent(plhMenu);
teks.setString("");
}
if(c==hapusTeks){
teks.setString(null);
}
}
if(d==IsiKontak){
if(c==kembali){
display.setCurrent(teks);
noHp.setString("");
}
if(c==kirim){
if(key.getString().equals("")){
mengirim(teks.getString());
} else {
int
tmpKey=Integer.parseInt(key.getString());

Modul Praktikum Kriptografi 2014 101


if(tmpKey==0){
InfoKunci.setString("Kunci
tidak boleh nol");
display.setCurrent(InfoKunci);
key.setString(null);
} else {
//System.out.println("Hasil :
"+inversKey(tmpKey));
if(inversKey(tmpKey)<0){
InfoKunci.setString("Angka
invers tidak ditemukan, kunci harus diganti");

display.setCurrent(InfoKunci);
key.setString(null);
} else {
StringBuffer fixteks = new
StringBuffer(teks.getString());
while(fixteks.length()<5){
fixteks.append(" ");
}
if(fixteks.length()%2==0){
fixteks.append(" ");
}

Pelabelan(fixteks.toString(),tmpKey);
}
}
}
}
if(c==hapusNomor){
noHp.setString(null);
}

Modul Praktikum Kriptografi 2014 102


}
if(d==hslCrypt){
if(c.getLabel()=="Ok"){
display.setCurrent(plhMenu);
}
}
if(d==teks){
if(c==KomEnkrip){
if (teks.getString().equals("")){
display.setCurrent(tekKsg);
} else {
display.setCurrent(IsiKontak);
noHp.setString(noBls);
noBls=null;
}
}
if(c.getLabel()=="Batal"){
display.setCurrent(plhMenu);
teks.setString("");
}
if(c==hapusTeks){
teks.setString(null);
}
}
if(d==IsiKontak){
if(c==kembali){
display.setCurrent(teks);
noHp.setString("");
}
if(c==kirim){
if(key.getString().equals("")){
mengirim(teks.getString());

Modul Praktikum Kriptografi 2014 103


} else {
int
tmpKey=Integer.parseInt(key.getString());
if(tmpKey==0){
InfoKunci.setString("Kunci
tidak boleh nol");
display.setCurrent(InfoKunci);
key.setString(null);
} else {
//System.out.println("Hasil :
"+inversKey(tmpKey));
if(inversKey(tmpKey)<0){
InfoKunci.setString("Angka
invers tidak ditemukan, kunci harus diganti");

display.setCurrent(InfoKunci);
key.setString(null);
} else {
StringBuffer fixteks = new
StringBuffer(teks.getString());
while(fixteks.length()<5){
fixteks.append(" ");
}
if(fixteks.length()%2==0){
fixteks.append(" ");
}

Pelabelan(fixteks.toString(),tmpKey);
}
}
}
}

Modul Praktikum Kriptografi 2014 104


if(c==hapusNomor){
noHp.setString(null);
}
}
if(d==hslCrypt){
if(c.getLabel()=="Ok"){
display.setCurrent(plhMenu);
}
}
if(d==infoMasuk){
if(c.getLabel()=="Baca"){
if(jmlPsnBrIn>1){
display.setCurrent(PesanMasuk);
} else {
BacaSmsMasuk();
}
}
if(c.getLabel()=="Tidak"){
display.setCurrent(currentDisplay);
}
}
if(d==TdkTerkrm){
if(c.getLabel()=="Ok"){
display.setCurrent(IsiKontak);
}
}
if(d==textSmsMasuk){
if(c==balas){
display.setCurrent(teks);
teks.setString(null);
}
if(c==hapus){

Modul Praktikum Kriptografi 2014 105


int bts=PesanMasuk.getSelectedIndex();
int ind=0;
try {
RecordEnumeration x =
SMS.enumerateRecords(null, null, false);
int i=0;
while(i<=bts){
ind=x.nextRecordId();
i++;
}
SMS.deleteRecord(ind);
tampilDataKotakMasuk();
display.setCurrent(PesanMasuk);
} catch (Exception e) {
}
}
if(c==kembaliMenuUtama){
display.setCurrent(plhMenu);
teks.setString(null);
noHp.setString(null);
}
if(c==kembali){

PesanMasuk.setSelectedIndex(PesanMasuk.getSelectedIndex
(), true);
display.setCurrent(PesanMasuk);
}
}
if (d==teksCrypt){
if(c.getLabel()=="Read"){
display.setCurrent(bukaPesanCrypt);
}

Modul Praktikum Kriptografi 2014 106


if(c.getLabel()=="Batal"){
if(sttsdecrypt=='m'){
display.setCurrent(PesanMasuk);
}
if(sttsdecrypt=='k'){
display.setCurrent(PesanKeluar);
}
}
}
if (d==bukaPesanCrypt){
if(c.getLabel()=="Ok"){
if(sttsdecrypt=='m'){
if(keybuka.getString().equals("")){
InfoKunci.setString("Kunci
tidak boleh Kosong");

display.setCurrent(InfoKunci);
return;
}
int
tmpKey=Integer.parseInt(keybuka.getString());
if(tmpKey==0){
InfoKunci.setString("Kunci
tidak boleh nol");

display.setCurrent(InfoKunci);
key.setString(null);
} else if(inversKey(tmpKey)<0){
InfoKunci.setString("Angka
invers tidak ditemukan, kunci harus diganti");

display.setCurrent(InfoKunci);

Modul Praktikum Kriptografi 2014 107


} else {pelabelanBaca(SmsEnc,
inversKey(tmpKey));}
}
if(sttsdecrypt=='k'){
if(keybuka.getString().equals("")){
InfoKunci.setString("Kunci
tidak boleh Kosong");

display.setCurrent(InfoKunci);
return;
}
int
tmpKey=Integer.parseInt(keybuka.getString());
if(tmpKey==0){
InfoKunci.setString("Kunci
tidak boleh nol");

display.setCurrent(InfoKunci);
key.setString(null);
} else if(inversKey(tmpKey)<0){
InfoKunci.setString("Angka
invers tidak ditemukan, kunci harus diganti");

display.setCurrent(InfoKunci);
} else {pelabelanBacaKeluar(SmsEnc,
inversKey(tmpKey));}
}
}
if(c.getLabel()=="Batal"){
if(sttsdecrypt=='m'){
display.setCurrent(PesanMasuk);
}

Modul Praktikum Kriptografi 2014 108


if(sttsdecrypt=='k'){
display.setCurrent(PesanKeluar);
}
}
}
if(d==textSmsKeluar){
if(c.getLabel()=="Teruskan"){
display.setCurrent(teks);
teks.setString(teruskan);
noBls=null;
noHp.setString(null);
}
if(c==hapus){
int bts=PesanKeluar.getSelectedIndex();
int ind=0;
try {
RecordEnumeration x =
SMSKeluar.enumerateRecords(null, null, false);
int i=0;
while(i<=bts){
ind=x.nextRecordId();
i++;
}
SMSKeluar.deleteRecord(ind);
tampilDataKotakKeluar();
display.setCurrent(PesanKeluar);
} catch (Exception e) {
}
}
if(c==kembali){

Modul Praktikum Kriptografi 2014 109


PesanKeluar.setSelectedIndex(PesanKeluar.getSelectedInd
ex(), true);
display.setCurrent(PesanKeluar);
}
if(c==kembaliMenuUtama){
display.setCurrent(plhMenu);
teks.setString(null);
noHp.setString(null);
}
}
if(d==PesanMasuk){
if(PesanMasuk.isShown() && c!=kembali){
BacaSmsMasuk();
}
if(c.getLabel()=="Baca"){
BacaSmsMasuk();
}
if(c==kembali){
display.setCurrent(plhMenu);
}
}
if(d==PesanKeluar){
if(PesanKeluar.isShown() && c!=kembali){
BacaSmsKeluar();
}
if(c.getLabel()=="Baca"){
BacaSmsKeluar();
}
if(c==kembali){
display.setCurrent(plhMenu);
}

Modul Praktikum Kriptografi 2014 110


}
if(d==KonfirHapus){
if(c.getLabel()=="Ya"){
ktk='m';
hapusPesan(ktk);
}
if(c.getLabel()=="Tidak"){
display.setCurrent(plhMenu);
}
}
if(d==KonfirHapusKel){
if(c.getLabel()=="Ya"){
ktk='k';
hapusPesan(ktk);
}
if(c.getLabel()=="Tidak"){
display.setCurrent(plhMenu);
}

}
if(d==about){
if(c.getLabel()=="Kembali"){
display.setCurrent(plhMenu);
}
}
if(d==konfirKel){
if(c.getLabel()=="Ya"){
destroyApp(true);
notifyDestroyed();
}
if(c.getLabel()=="Tidak"){
display.setCurrent(plhMenu);

Modul Praktikum Kriptografi 2014 111


}
}
}
}

**Contoh program Editor SMS pada saat running

Modul Praktikum Kriptografi 2014 112


BAB VII
HUFFMAN SMS

A. Huffman
Perkembangan teknologi informasi mempengaruhi berbagai sisi bidang
kehidupan manusia. Salah satu penyampaian informasi secara elektronik adalah pesan
singkat atau SMS (Short Message Services). Dalam kehidupan sehari-hari, fasilitas
SMS menjadi pilihan banyak orang untuk berkomunikasi karena relatif murah, mudah,
jelas dan cepat.
Disamping keunggulan murah dan cepat, tetapi layanan SMS membatasi jumlah
karakter yang dapat dikirimkan oleh penggunanya. Sebuah pesan SMS yang berupa
teks terbatas hanya 160 karakter 7-bit standar GSM (Global System for Mobile) dalam
satu kali pengiriman, jika SMS memuat lebih dari 160 karakter, maka pesan tersebut
harus dibagi menjadi beberapa kali pengiriman. Mengakibatkan biaya akan dikalikan
dengan banyaknya pengiriman pesan tersebut. Batasan tersebut sering kali menjadi
kendala dalam berkomunikasi. Sehingga, penghematan pengiriman pesan SMS yang
cukup panjang dapat menggunakan teknik kompresi. Salah satu teknik kompresi yaitu
metode Huffman.
Metode Huffman merupakan metode yang terkenal handal untuk digunakan
pada kompresi teks, mudah diimplementasikan, waktu proses kompresi terbilang
cepat, tidak membutuhkan memori pemroses yang besar, sehingga cocok untuk HP
yang memiliki kemampuan pemrosesan terbatas.
1. Encoding Kode Huffman
Proses untuk melakukan pembentukan kode dari suatu data tertentu disebut
encoding. Kode Huffman didapatkan dengan membaca setiap kode dari daun
hingga ke akar pohon Huffman. Ketika suatu kode Huffman telah dibentuk,
suatu data dapat mudah di encode dengan mengganti setiap simbol
menggunakan kode yang telah dibentuk.

Modul Praktikum Kriptografi 2014 113


2. Decoding Kode Huffman
Decoding merupakan proses yang mengembalikan suatu data dari suatu
kode tertentu. Proses decoding ini merupakan kebalikan dari proses
encoding. Terdapat dua cara untuk melakukan decoding simbol :
a. Membaca pohon Huffman, hal ini dilakukan dengan membaca sebuah bit
dari kode binernya dan menelusuri hingga sampai pada simpul daun yang
mengandung simbol tersebut untuk setiap bitnya. Ketika suatu bit sampai
pada daun suatu pohon, suatu simbol yang terkandung dalam daun
tersebut ditulis untuk decoded data tersebut dan mengulanginya kembali
dari akar pohon tersebut.
b. Menggunakan tabel kode Huffman, decoding cara ini dilakukan dengan
menyimpan setiap kode pada suatu tabel yang terurut berdasarkan
panjang kode dan mencari kesamaan dari setiap bit yang dibaca.
(Ayuningtyas, 2008: 3).

B. Aplikasi Java
1. MainMenu.java
import java.io.*;
import javax.microedition.lcdui.*;

/**
*
* @author Fmanda
*/
public class MainMenu extends List implements
CommandListener{
private HuffmanSMS midlet;
private String str;
private int nilai = 0;
private Image image;

Modul Praktikum Kriptografi 2014 114


/** Creates a new instance of MainMenu */
public MainMenu(HuffmanSMS midlet) {
super("MENU", List.IMPLICIT);
this.midlet = midlet;
setCommandListener(this);
try{
//setTitle("MENU");
image =
Image.createImage("/images/write.png");
append("Write New", image);
image =
Image.createImage("/images/inbox.png");
append("Inbox", image);
image =
Image.createImage("/images/outbox.png");
append("Outbox", image);
image =
Image.createImage("/images/exit.png");
append("Exit", image);
} catch (IOException io){
io.printStackTrace();}
}
public void commandAction(Command c, Displayable
d){
if (c == List.SELECT_COMMAND){
switch (this.getSelectedIndex()){
case 0 : midlet.writeMsgScreen();
break;
case 1 : midlet.inbox();
break;//inbox
case 2 : midlet.outbox();
break;//sent item

Modul Praktikum Kriptografi 2014 115


case 3 : midlet.quit(); break;
}
}
}
}

2. Splashscreen.java
import javax.microedition.lcdui.*;
import java.util.Timer;
import java.util.TimerTask;
public final class Splashscreen extends Canvas{
private Display display;
private Displayable next;
private int dismissTime;
static int waktu;
static Timer timer;
static TimerTask timertask;
private Image image;

public Splashscreen(Display display, Displayable


next, Image image, int dismissTime)
{
timer = new Timer();
this.display = display;
this.next = next;
this.image = image;
this.dismissTime = dismissTime;
display.setCurrent(this);
}
static void access(Splashscreen splash)
{

Modul Praktikum Kriptografi 2014 116


splash.dismiss();
}
private void dismiss()
{
timer.cancel();
display.setCurrent(next);
}
static void stopTimer()
{
timer.cancel();
timertask.cancel();
}
static void startJalan(int delay)
{
waktu = delay;
timer = new Timer();
timertask = new TimerTask(){
public void run()
{
waktu--;
}
};
timer.schedule(timertask, 1000L, 1000L);
}
protected void keyPressed(int keyCode)
{
dismiss();
}
protected void paint(Graphics g)
{
this.setFullScreenMode(true);
g.setColor(0x00ffffff);

Modul Praktikum Kriptografi 2014 117


g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0x00000000);
g.drawImage(image, getWidth()/2,
getHeight()/2-5, 3);
}
protected void pointerPressed(int x, int y)
{
dismiss();
}
protected void showNotify()
{
if(dismissTime>0)
{
timer.schedule(new CountDown(this),
dismissTime);
}
}
}

class CountDown extends TimerTask


{
private final Splashscreen splash;

public CountDown(Splashscreen splash) {


this.splash = splash;

}
public void run()
{
Splashscreen.access(this.splash);
}
}

Modul Praktikum Kriptografi 2014 118


3. Kompres.java
/* */ import java.io.PrintStream;
/* */
/* */ public class Kompres
/* */ {
/* 5 */ static String[] cc = new String['€'];
/* 6 */ static String ccSISANYA = "1111110";
/* 7 */ static String ccDIPESAN = "1111111";
/* 8 */ static boolean udahInit = false;
/* */
/* */ static void init() {
/* 11 */ if (udahInit) return;
/* */
/* 13 */ udahInit = true;
/* */
/* 15 */ cc[32] = "1011";
/* 16 */ cc[33] = "1100011";
/* 17 */ cc[34] = "1100110";
/* 18 */ cc[39] = "1100100";
/* 19 */ cc[40] = "11111010";
/* 20 */ cc[41] = "11111011";
/* 21 */ cc[44] = "1100001";
/* 22 */ cc[45] = "1100101";
/* 23 */ cc[46] = "1100000";
/* 24 */ cc[47] = "1111011";
/* 25 */ cc[48] = "1110000";
/* 26 */ cc[49] = "1110001";
/* 27 */ cc[50] = "1110010";
/* 28 */ cc[51] = "1110011";
/* 29 */ cc[52] = "1110100";
/* 30 */ cc[53] = "1110101";

Modul Praktikum Kriptografi 2014 119


/* 31 */ cc[54] = "1110110";
/* 32 */ cc[55] = "1110111";
/* 33 */ cc[56] = "1111000";
/* 34 */ cc[57] = "1111001";
/* 35 */ cc[58] = "1111100";
/* 36 */ cc[63] = "1100010";
/* 37 */ cc[64] = "1111010";
/* 38 */ cc[65] = "1000000";
/* 39 */ cc[66] = "10000101";
/* 40 */ cc[67] = "1001101";
/* 41 */ cc[68] = "10001011";
/* 42 */ cc[69] = "1100111";
/* 43 */ cc[70] = "10011001";
/* 44 */ cc[71] = "10010101";
/* 45 */ cc[72] = "1001000";
/* 46 */ cc[73] = "1000001";
/* 47 */ cc[74] = "100110001001";
/* 48 */ cc[75] = "1001100011";
/* 49 */ cc[76] = "1001001";
/* 50 */ cc[77] = "10010100";
/* 51 */ cc[78] = "1000110";
/* 52 */ cc[79] = "1000100";
/* 53 */ cc[80] = "10010110";
/* 54 */ cc[81] = "1001100010000";
/* 55 */ cc[82] = "1000111";
/* 56 */ cc[83] = "1000011";
/* 57 */ cc[84] = "100111";
/* 58 */ cc[85] = "10010111";
/* 59 */ cc[86] = "1000101001";
/* 60 */ cc[87] = "1000101000";
/* 61 */ cc[88] = "10011000101";
/* 62 */ cc[89] = "10000100";

Modul Praktikum Kriptografi 2014 120


/* 63 */ cc[90] = "1001100010001";
/* 64 */ cc[97] = "00000";
/* 65 */ cc[98] = "000101";
/* 66 */ cc[99] = "01101";
/* 67 */ cc[100] = "001011";
/* 68 */ cc[101] = "1010";
/* 69 */ cc[102] = "011001";
/* 70 */ cc[103] = "010101";
/* 71 */ cc[104] = "01000";
/* 72 */ cc[105] = "00001";
/* 73 */ cc[106] = "0110001001";
/* 74 */ cc[107] = "01100011";
/* 75 */ cc[108] = "01001";
/* 76 */ cc[109] = "010100";
/* 77 */ cc[110] = "00110";
/* 78 */ cc[111] = "00100";
/* 79 */ cc[112] = "010110";
/* 80 */ cc[113] = "01100010000";
/* 81 */ cc[114] = "00111";
/* 82 */ cc[115] = "00011";
/* 83 */ cc[116] = "0111";
/* 84 */ cc[117] = "010111";
/* 85 */ cc[118] = "00101001";
/* 86 */ cc[119] = "00101000";
/* 87 */ cc[120] = "011000101";
/* 88 */ cc[121] = "000100";
/* 89 */ cc[122] = "01100010001";
/* */ }
/* */
/* */ static String kompresSisanya(char kar) {
/* 93 */ String s = Integer.toBinaryString(kar);

Modul Praktikum Kriptografi 2014 121


/* 94 */ s = "0000000000000000".substring(0, 16 -
s.length()) + s;
/* 95 */ return ccSISANYA + s;
/* */ }
/* */
/* */ static byte[] stringKeByteA(String st) {
/* 99 */ int lenAsli = st.length();
/* 100 */ st = st + "11111111";
/* 101 */ byte[] hs = new byte[(lenAsli + 7) / 8];
/* 102 */ for (int i = 0; i < lenAsli; i += 8) {
/* 103 */ String sebyte = st.substring(i, i +
8);
/* 104 */ byte b =
(byte)Integer.parseInt(sebyte, 2);
/* 105 */ hs[(i / 8)] = b;
/* */ }
/* 107 */ return hs;
/* */ }
/* */
/* */ static String byteAKeString(byte[] ba) {
/* 111 */ String hs = "";
/* 112 */ for (int i = 0; i < ba.length; i++) {
/* 113 */ int b = ba[i];
/* 114 */ if (b < 0) b += 256;
/* 115 */ String tp = Integer.toBinaryString(b);
/* 116 */ tp = "00000000".substring(0, 8 -
tp.length()) + tp;
/* 117 */ hs = hs + tp;
/* */ }
/* 119 */ return hs;
/* */ }
/* */

Modul Praktikum Kriptografi 2014 122


/* */ public static byte[] kompres(String st) {
/* 123 */ init();
/* 124 */ String jadi = "";
/* 125 */ for (int i = 0; i < st.length(); i++) {
/* 126 */ char kar = st.charAt(i);
/* 127 */ if (kar >= '€') {
/* 128 */ jadi = jadi + kompresSisanya(kar);
/* */ }
/* 130 */ else if (cc[kar] != null)
/* 131 */ jadi = jadi + cc[kar];
/* */ else {
/* 133 */ jadi = jadi + kompresSisanya(kar);
/* */ }
/* */ }
/* */
/* 137 */ return stringKeByteA(jadi);
/* */ }
/* */
/* */ static int cariKar(String buf) {
/* 141 */ if (buf.length() > 23) {
/* 142 */ return -2;
/* */ }
/* 144 */ if ((buf.length() == 23) &&
/* 145 */ (buf.substring(0,
7).equals(ccSISANYA))) {
/* 146 */ return
Integer.parseInt(buf.substring(7), 2);
/* */ }
/* */
/* 149 */ for (int i = 0; i < 128; i++) {
/* 150 */ if ((cc[i] != null) &&
/* 151 */ (cc[i].equals(buf))) {

Modul Praktikum Kriptografi 2014 123


/* 152 */ return i;
/* */ }
/* */ }
/* */
/* 156 */ return -1;
/* */ }
/* */
/* */ public static String dekompres(byte[] ba)
{
/* 160 */ init();
/* 161 */ String st = byteAKeString(ba);
/* 162 */ String hs = "";
/* 163 */ String buf = "";
/* 164 */ for (int i = 0; i < st.length(); i++) {
/* 165 */ char kar = st.charAt(i);
/* 166 */ buf = buf + kar;
/* 167 */ int c = cariKar(buf);
/* 168 */ if (c >= 0) {
/* 169 */ buf = "";
/* 170 */ hs = hs + (char)c;
/* 171 */ } else if (c == -2) {
/* 172 */ buf = "";
/* */ }
/* */ }
/* 175 */ return hs;
/* */ }
/* */
/* */ public static void main(String[] args) {
/* 179 */ String a = ";;;;;;;;Halo, apa kabar
dunia, tetep asik bukan? Aku sedang di kamar mandi.
Eh, tapi that's not what I wanted to tell you. It is,

Modul Praktikum Kriptografi 2014 124


that it works correctly! Beberapa karakter lagi biar
penuh sekalian, harusnya ga cukup.";
/* 180 */ byte[] b = kompres(a);
/* 181 */ String c = dekompres(b);
/* 182 */ System.out.println(c);
/* */ }
/* */ }

4. InfoSMS.java
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
import java.io.*;

public class InfoSMS extends Form{


Display display;
Form numForm;
TextField nomor, tPort;
Alert alert;
Command back, biasa, kompres;
Image image;
String teks, port, noBls;
Displayable backScreen;
Displayable sendingScreen;
RecordStore inOutRS;

/** Creates a new instance of InfoSMS */


public InfoSMS(String port, Display display,
Displayable backScreen,Displayable sendingScreen) {
super("Kirim Pesan");
this.port = port;
this.display = display;

Modul Praktikum Kriptografi 2014 125


this.teks = null;
this.noBls = null;
this.backScreen = backScreen;
this.sendingScreen = sendingScreen;
port = "2111";
alert = new Alert("Peringatan", "Message
Sending Failed", null, AlertType.WARNING);
alert.setTimeout(2000);
numForm = new Form("Nomor");
nomor = new TextField("Nomor Tujuan : ", null,
15, TextField.PHONENUMBER);
tPort = new TextField("Port : ", port, 5,
TextField.UNEDITABLE);
back = new Command("Kembali", Command.CANCEL,
1);
biasa = new Command("Kirim Biasa", Command.OK,
1);
kompres = new Command("Kompres", Command.OK,
1);
addCommand(biasa);
addCommand(kompres);
addCommand(back);
/*deleteAll();
append(nomor);
append(tPort);
*/
}
public void numFormShow(String isiSms, String
noBls){
try {
this.teks = isiSms;
this.noBls = noBls;

Modul Praktikum Kriptografi 2014 126


int ref = noBls.length();
nomor.setString("");
if (ref != 0) {
nomor.setString(noBls);
}
} catch (Exception e) {
}
display.setCurrent(numForm);
}
public String getSMS(){
return teks;
}
/*public void commandAction(Command c, Displayable
d){
int numLength = nomor.getString().length();
if(c == back){
display.setCurrent(backScreen);
}
else if (c == send){
if (numLength != 0) {
/jika tidak kosong/
sendMessage();
display.setCurrent(sendingScreen);
} else {
/**jika kosong
display.setCurrent(alert);
}
}
}
*/

Modul Praktikum Kriptografi 2014 127


/*public void sendMessage() { //disini sms yang
udah ditulis dikirim dengan perintah dibawah ini
new Thread(new Runnable() {
public void run() {
MessageConnection msgConn = null;
try {
String textMsg = teks;
String destNum =
nomor.getString();
saveOutMsg(destNum, textMsg);
String address = "sms://" +
destNum + ":" + port;
Message msgText = null;
msgConn = (MessageConnection)
Connector.open(address);
TextMessage txtmessage =
(TextMessage)
msgConn.newMessage(MessageConnection.TEXT_MESSAGE);
txtmessage.setAddress(address);

txtmessage.setPayloadText(textMsg);
msgText = txtmessage;
msgConn.send(msgText);

} catch (Throwable t) {
t.printStackTrace();
}
if (msgConn != null) {
try {
msgConn.close();
} catch (IOException ioe) {
ioe.printStackTrace();

Modul Praktikum Kriptografi 2014 128


}
}
}
}).start();
}
*/

public void saveOutMsg(String noSender, String


isiSMs) {
if (isiSMs.length() != 0) {
String dataSimpan = noSender + "|" +
isiSMs;
try {
inOutRS =
RecordStore.openRecordStore("outbox", true);
ByteArrayOutputStream strmBytes = new
ByteArrayOutputStream();
DataOutputStream strmDataType = new
DataOutputStream(strmBytes);
byte[] record;
strmDataType.writeUTF(dataSimpan);
strmDataType.flush();
record = strmBytes.toByteArray();
inOutRS.addRecord(record, 0,
record.length);
inOutRS.closeRecordStore();
strmBytes.reset();
strmBytes.close();
strmDataType.close();

} catch (IOException ex) {


ex.printStackTrace();

Modul Praktikum Kriptografi 2014 129


} catch (RecordStoreException ex) {
ex.printStackTrace();
}
}
}

5. HuffmanSMS.java
import java.io.*;
import java.util.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import javax.wireless.messaging.*;
import javax.microedition.rms.*;

public class HuffmanSMS extends MIDlet implements


CommandListener, Runnable, MessageListener{
protected MainMenu mainMenu;
//private Kompres komp;
private Kompres ackomp;
protected InfoSMS info;
//private Form numForm;
private TextBox writeMsg, readMsg; //nulis SMS,
mbaca SMS (inbox ataupun outbox)
private List inboxList, outboxList; //daftar SMS
masuk dan keluar

Modul Praktikum Kriptografi 2014 130


private Alert alertSend, receiveMsg, alertKosong;
//pada saat ngirim, terima SMS, dan pada saat inbox
dan atau outbox kosong
private Ticker ticker; //info jumlah pesan di
inbox atau outbox
private Display display;
private Command back, next, read, del, delAll,
reply, exitInOut, exitToOut, exitToIn, edit, save,
clear;
private Image image;
private Thread thread, threadTulis;
private Timer timer;
private Displayable kirim = null;
private boolean done, tulis;
final private static int WARNING = 0, INFO = 1;
private String port, pengirim;
private String[] connections;
private Message msg;
private MessageConnection msgConn;
private RecordStore rs;
private int numListUmumIn, numListUmumOut;
private int [] idIn, idOut;
private int bitASCII=7;

public HuffmanSMS(){
display = Display.getDisplay(this);
mainMenu = new MainMenu(this);
timer = new Timer();
//port ="";
port = "2111";
//numForm = new Form("Nomor");

Modul Praktikum Kriptografi 2014 131


writeMsg = new TextBox("", "", 1000,
TextField.ANY);
readMsg = new TextBox(null, null, 1000,
TextField.ANY);
ticker = new Ticker("Silakan pilih menu sms");
receiveMsg = new Alert(null, null, null,
AlertType.ALARM);
alertSend = new Alert("Mengirim SMS", null,
null, AlertType.INFO);
alertSend.setTimeout(2000);
alertSend.setString("Pesan Terkirim bro...");
alertKosong = new Alert(null, null, null,
AlertType.INFO);
back = new Command("Back", Command.CANCEL, 1);
next = new Command("Teruskan", Command.OK, 1);
read = new Command("Baca", Command.OK, 1);
reply = new Command("Balas", Command.OK, 2);
del = new Command("Hapus", Command.OK, 3);
delAll = new Command("Hapus Semua",
Command.OK, 4);
exitInOut = new Command("Back",
Command.CANCEL, 1);
exitToIn = new Command("Back", Command.CANCEL,
1);
exitToOut = new Command("Back",
Command.CANCEL, 1);
save = new Command("Simpan", Command.OK, 1);
clear = new Command("Hapus Teks", Command.OK,
1);
edit = new Command("Edit", Command.OK, 1);
try{

Modul Praktikum Kriptografi 2014 132


image =
Image.createImage("/images/splashscreen.png");
} catch (IOException ioe){
System.out.println(ioe);}

info = new InfoSMS(port, display, writeMsg,


alertSend);
kirim = writeMsg;

}
public void startApp() {
new Splashscreen(display, mainMenu, image,
4000);
openConn();
}
public void pauseApp() {
kirim = display.getCurrent();
}

public void destroyApp(boolean unconditional) {


done = true;
thread = null;
if (msgConn != null) {
try {
msgConn.close();
} catch (IOException e) {
}
}
notifyDestroyed();
}
public void getTextSMS(String teks){
int jumKar = teks.length();

Modul Praktikum Kriptografi 2014 133


writeMsg.setTitle("Karakter : "+jumKar);
}

//CODING DI
public void
notifyIncomingMessage(MessageConnection arg0) {
if (thread == null) {
done = false;
thread = new Thread(this);
thread.start();
}
try {
msg = msgConn.receive();
boolean dibaca = false;
Date smsTime = msg.getTimestamp();
String textIn =null;
String senderAddress = null;
if (msg instanceof TextMessage) {
senderAddress =
validNum(msg.getAddress());
textIn = ((TextMessage)
msg).getPayloadText();
}
if (msg instanceof BinaryMessage){
BinaryMessage bm = (BinaryMessage)msg;
byte[] binMsg = bm.getPayloadData();
senderAddress =
validNum(msg.getAddress());
//Dekompres dekomp = new
Dekompres(binMsg);
Kompres dekomp2 = new Kompres();
//textIn = dekomp.getHasilDekomp();

Modul Praktikum Kriptografi 2014 134


textIn = dekomp2.dekompres(binMsg);

}
try{
simpanSmsin(senderAddress + "|" +
smsTime, dibaca, textIn);
receiveMsgScreen(senderAddress);
} catch (Exception e){}
closeConn();
openConn();
} catch (IOException e) {
System.out.println("salah di
penerimaan"+e);
}
}
public void run() {
while(tulis){
getTextSMS(writeMsg.getString());
}
}
public String validNum(String no) {
String num = null;
num = no.substring(6, no.length());
return num;
}
public void openConn() {
String smsConnection = "sms://:" + port;
done = true;
thread = null;
try {
msgConn = (MessageConnection)
Connector.open(smsConnection);

Modul Praktikum Kriptografi 2014 135


msgConn.setMessageListener(this);
} catch (IOException ioe) {
ioe.printStackTrace();
}
connections =
PushRegistry.listConnections(true);
done = false;
thread = new Thread(this);
thread.start();
}
public void closeConn() { //untuk menutup koneksi
sms
try {
msgConn.close();
} catch (IOException e) {
}
}
public void receiveMsgScreen(String sender) {
try {
image = Image.createImage("/img/two-mail-
close-L.png");
receiveMsg.setTitle("Sms Masuk");
receiveMsg.setString("Pesan BARU \nDari :
"+ sender);
receiveMsg.setImage(image);
receiveMsg.addCommand(back);
receiveMsg.addCommand(read);
receiveMsg.setCommandListener(this);
display = Display.getDisplay(this);
display.vibrate(1000);
display.setCurrent(receiveMsg);
} catch (IOException e) {

Modul Praktikum Kriptografi 2014 136


}
}
public void quit(){
destroyApp(true);
}
public void mainMenuScreen(){
display.setCurrent(mainMenu);
}
public void writeMsgScreen(){
tulis = true;
threadTulis = new Thread(this);
threadTulis.start();
writeMsg.addCommand(back);
writeMsg.addCommand(next);
//writeMsg.addCommand(biasa);
//writeMsg.addCommand(kompres);
writeMsg.addCommand(clear);
writeMsg.addCommand(save);
writeMsg.setCommandListener(this);
display.setCurrent(writeMsg);
}
public void baca(String lokasi, int indexSms,
boolean tick) {
System.out.println(lokasi + " " + indexSms + "
" + tick);
try {
// membuka database sesuai yang di request
rs = RecordStore.openRecordStore(lokasi,
false);
byte[] recData = new byte[50];
recData = rs.getRecord(indexSms);
rs.closeRecordStore();

Modul Praktikum Kriptografi 2014 137


ByteArrayInputStream strmBytes = new
ByteArrayInputStream(recData);
DataInputStream strmDataType = new
DataInputStream(strmBytes);
String hsTemp = strmDataType.readUTF();
String[] hsArray = split(hsTemp, "|");
String nomer = null;
strmBytes.reset();
strmBytes.close();
strmDataType.close();
if (tick == false) {
String ygmana = null;
String isiPesan = null;
if (lokasi.equals("inbox")) {
//int id =
Integer.parseInt(hsArray[0]);
nomer = hsArray[2] + " " +
hsArray[3];
isiPesan = hsArray[4];
System.out.println(isiPesan);
ygmana = "1";
if (hsArray[1].equals("false")) {
String datanya = hsArray[0] +
"|true|" + hsArray[2] +
"|" + hsArray[3] + "|"
+ hsArray[4];
tandaiPesanDibaca(indexSms,
datanya);
}
} else if (lokasi.equals("outbox")) {
isiPesan = hsArray[1];
nomer = hsArray[0];

Modul Praktikum Kriptografi 2014 138


ygmana = "0";
}
textRev(nomer, isiPesan, true,
ygmana);
display.setCurrent(readMsg);
} else {
if (lokasi.equals("inbox")) {
ticker.setString(hsArray[4]);
} else if (lokasi.equals("outbox")) {
ticker.setString(hsArray[1]);
}
}
} catch (IOException ex) {
ex.printStackTrace();
} catch (RecordStoreException ex) {
ex.printStackTrace();
}
}
public void tandaiPesanDibaca(int indexSms, String
isi) {
try {
//membuka data base inbox dan menandai
pesan yang sudah dibaca
rs = RecordStore.openRecordStore("inbox",
false);
ByteArrayOutputStream strmBytes = new
ByteArrayOutputStream();
DataOutputStream strmDataType = new
DataOutputStream(strmBytes);
byte[] record;
strmDataType.writeUTF(isi);
strmDataType.flush();

Modul Praktikum Kriptografi 2014 139


record = strmBytes.toByteArray();
rs.setRecord(indexSms, record, 0,
record.length);
rs.closeRecordStore();
strmBytes.reset();
strmBytes.close();
strmDataType.close();
} catch (IOException ex) {
ex.printStackTrace();
} catch (RecordStoreNotOpenException ex) {
ex.printStackTrace();
} catch (RecordStoreException ex) {
ex.printStackTrace();
}
}
public void textRev(String title, String isi,
boolean bacanya, String ygmana) {
if (bacanya == false) {
simpanSmsin(title, false, isi);
}
int pjg = isi.length();
readMsg = new TextBox(null, isi, pjg,
TextField.ANY);
if (bacanya == true) {
if (ygmana.equals("1")) {
readMsg.addCommand(exitToIn);
readMsg.addCommand(reply);
readMsg.setTitle("dari :" + title);
readMsg.setTicker(ticker);
ticker.setString("Sms dari :" +
title);
} else if (ygmana.equals("0")) {

Modul Praktikum Kriptografi 2014 140


readMsg.addCommand(exitToOut);
readMsg.setTitle("Untuk :" + title);
readMsg.setTicker(ticker);
ticker.setString("Sms Untuk :" +
title);
}
} else {
readMsg.setTitle("dari :" + title);
readMsg.addCommand(back);
}
readMsg.addCommand(edit);
readMsg.setCommandListener(this);
display = Display.getDisplay(this);
}
public void simpanSmsin(String noSender, boolean
tanda, String isiSMs) {
try {
rs = RecordStore.openRecordStore("inbox",
true);
RecordEnumeration re =
rs.enumerateRecords(null, null, false);
int id2 = 0;
if (re.hasNextElement()) {
int id = re.nextRecordId();
if (id == 0) {
id2 = 1;
} else {
id2 = cekId2(id);
}
} else {
id2 = 1;
}

Modul Praktikum Kriptografi 2014 141


String dataSimpan = id2 + "|" + tanda +
"|" + noSender + "|" + isiSMs;
ByteArrayOutputStream strmBytes = new
ByteArrayOutputStream();
DataOutputStream strmDataType = new
DataOutputStream(strmBytes);
byte[] record;
strmDataType.writeUTF(dataSimpan);
strmDataType.flush();
record = strmBytes.toByteArray();
rs.addRecord(record, 0, record.length);
rs.closeRecordStore();
strmBytes.reset();
strmBytes.close();
strmDataType.close();
} catch (IOException ex) {
ex.printStackTrace();
} catch (RecordStoreException ex) {
ex.printStackTrace();
} catch (Exception e) {
System.out.println(e.toString());
}
}
public void hapus(String lokasi, int id) {
try {
rs = RecordStore.openRecordStore(lokasi,
false);
rs.deleteRecord(id);
rs.closeRecordStore();

} catch (RecordStoreException ex) {


ex.printStackTrace();

Modul Praktikum Kriptografi 2014 142


}
}
public int cekId2(int id) {
int hs = 0;
try {
RecordStore databaseCex =
RecordStore.openRecordStore("inbox", true);
byte[] recData = new byte[50];
recData = databaseCex.getRecord(id);
databaseCex.closeRecordStore();
ByteArrayInputStream strmBytes = new
ByteArrayInputStream(recData);
DataInputStream strmDataType = new
DataInputStream(strmBytes);
String hsTemp = strmDataType.readUTF();
String[] hsArray = split(hsTemp, "|");
hs = Integer.parseInt(hsArray[0]);
strmBytes.reset();
strmBytes.close();
strmDataType.close();
} catch (IOException ex) {
ex.printStackTrace();
} catch (RecordStoreException ex) {
ex.printStackTrace();
}
return hs + 1;
}
public void start(){
tulis = true;
threadTulis = new Thread(this);
}
public void inbox() {

Modul Praktikum Kriptografi 2014 143


try {
inboxList = new List(null, List.IMPLICIT);
inboxList.deleteAll();
inboxList.setTitle("Daftar sms Inbox");
rs = RecordStore.openRecordStore("inbox",
true);
byte[] recData;
idIn = new int[100];
numListUmumIn = 0;
RecordEnumeration re =
rs.enumerateRecords(null, null, false);
if (rs.getNumRecords() != 0) {
while (re.hasNextElement()) {
int i = re.nextRecordId();
idIn[numListUmumIn] = i;
recData = rs.getRecord(i);
ByteArrayInputStream strmBytes =
new ByteArrayInputStream(recData);
DataInputStream strmDataType = new
DataInputStream(strmBytes);
String isi =
strmDataType.readUTF();
String[] smsSplit = split(isi,
"|");
String nomer = smsSplit[2];
String pesan = smsSplit[4];
String dispMsg = null;
if(pesan.length() <= 25){
dispMsg = pesan;
}
else{

Modul Praktikum Kriptografi 2014 144


dispMsg = pesan.substring(0,
25);
}
image = null;
if (smsSplit[1].equals("false")) {
image =
Image.createImage("/img/mail-close.png");
} else {
image =
Image.createImage("/img/mail-open.png");
}
String[] nomerTemp = split(nomer,
":");
if (nomerTemp[0] != null) {

inboxList.append(nomerTemp[0]+"\n"+dispMsg, image);
} else {
inboxList.append(dispMsg,
image);
}
strmBytes.reset();
strmBytes.close();
strmDataType.close();
numListUmumIn++;
}
if (numListUmumIn != 0) {
inboxList.addCommand(read);
inboxList.addCommand(reply);
inboxList.addCommand(del);
inboxList.addCommand(delAll);
} else {

Modul Praktikum Kriptografi 2014 145


RecordStore.deleteRecordStore("inbox");
}
inboxList.addCommand(exitInOut);
inboxList.setTicker(ticker);
ticker.setString("ada " +
rs.getNumRecords() + " sms di inbox");
inboxList.setCommandListener(this);
display = Display.getDisplay(this);
display.setCurrent(inboxList);
} else {
displayAlert(INFO, "Inbox Kosong",
null, new MainMenu(this));
}
rs.closeRecordStore();
} catch (IOException ex) {
ex.printStackTrace();
} catch (RecordStoreException ex) {
ex.printStackTrace();
}
}
public void displayAlert(int type, String msg,
Image img, Screen s){
alertKosong.setString(msg);
switch(type)
{
case WARNING :
alertKosong.setTitle("Peringatan");

alertKosong.setType(AlertType.WARNING);
alertKosong.setImage(img);
break;

Modul Praktikum Kriptografi 2014 146


case INFO :
alertKosong.setTitle("Info");
alertKosong.setType(AlertType.INFO);
alertKosong.setImage(img);
break;
}
display.setCurrent(alertKosong, s == null ?
display.getCurrent() : s);
}
//membuat list di outbox
public void outbox() {
try {
outboxList = new List(null,
List.IMPLICIT);
outboxList.deleteAll();
outboxList.setTitle("Daftar sms Outbox");
rs = RecordStore.openRecordStore("outbox",
true);
byte[] recData = new byte[50];
idOut = new int[100];
numListUmumOut = 0;
RecordEnumeration re =
rs.enumerateRecords(null, null, false);
if (rs.getNumRecords() != 0) {
while (re.hasNextElement()) {
int i = re.nextRecordId();
idOut[numListUmumOut] = i;
recData = rs.getRecord(i);

ByteArrayInputStream strmBytes =
new ByteArrayInputStream(recData);

Modul Praktikum Kriptografi 2014 147


DataInputStream strmDataType = new
DataInputStream(strmBytes);
String isi =
strmDataType.readUTF();
System.out.println(isi);
strmBytes.reset();
strmBytes.close();
strmDataType.close();

String[] isiArray = split(isi,


"|");
String nomer = isiArray[0];
String pesan = isiArray[1];
String dispMsg = null;
if(pesan.length() <= 25){
dispMsg = pesan;
} else{
dispMsg = pesan.substring(0,
25);
}
numListUmumOut++;
image =
Image.createImage("/img/mail-open.png");
if (nomer.equals(null)) {
outboxList.append(dispMsg,
image);
} else {
outboxList.append(nomer + "\n"
+ dispMsg, image);
}
}
if (numListUmumOut != 0) {

Modul Praktikum Kriptografi 2014 148


outboxList.addCommand(read);
outboxList.addCommand(del);
outboxList.addCommand(delAll);
} else {

RecordStore.deleteRecordStore("outbox");
}
outboxList.setTicker(ticker);
ticker.setString("ada " +
rs.getNumRecords() + " sms di outbox");
outboxList.addCommand(exitInOut);
outboxList.setCommandListener(this);
display = Display.getDisplay(this);
display.setCurrent(outboxList);
} else {
displayAlert(INFO, "Outbox Kosong",
image, new MainMenu(this));
}
rs.closeRecordStore();
} catch (IOException ex) {
ex.printStackTrace();
} catch (RecordStoreException ex) {
ex.printStackTrace();
}
}
public static String[] split(String a, String
delimeter) {
String c[] = new String[0];
String b = a;
while (true) {
int i = b.indexOf(delimeter);
String d = b;

Modul Praktikum Kriptografi 2014 149


if (i >= 0) {
d = b.substring(0, i);
}
String e[] = new String[c.length + 1];
for (int k = 0; k < c.length; k++) {
e[k] = c[k];
}
e[e.length - 1] = d;
c = e;
b = b.substring(i + delimeter.length(),
b.length());
if (b.length() <= 0 || i < 0) {
break;
}
}
return c;
}
public void info_pesan(){
byte[] hasilackomp = null;
String input=writeMsg.getString();
int size = writeMsg.size();
int pjgBit=0;
double rasio=0;
String pesan1 = writeMsg.getString();
if(size < 7){
//info.removeCommand(info.kompres);
}
else{
ackomp=new Kompres();
hasilackomp=ackomp.kompres(input);
//komp = new
Kompres(writeMsg.getString());

Modul Praktikum Kriptografi 2014 150


//String pesan2 =
komp.getHeader()+komp.getHasilString();
//byte[] msgBytes = komp.getSMSBytes();
//if(pesan2.length()> (size*8)){
// info.removeCommand(info.kompres);
//
System.out.println("pesan2="+pesan2.length()+",
size="+(size*8));
//}
//pesan1 = pesan2;
}
//pjgBit = pesan1.length();
pjgBit=hasilackomp.length*bitASCII;
int pjgMsg = (pjgBit/1120)+(1); //dengan port
2111 = 1088, kalo port kosong maka 1120 bit (utk 140
karakter)
pjgMsg=Math.abs(pjgMsg);
if (size <bitASCII )
{ rasio = 0; }
else
rasio = (pjgBit*100/(size*bitASCII));
info.deleteAll();
info.append(info.nomor);
info.append(info.tPort);
//info.append("INFO KOMPRESI\nJumlah Bit
(asli) : "+(size*8)+"\nJumlah Bit (kompres) :
"+pjgBit+"\nJumlah Message :"+pjgMsg+"\nRatio Kompresi
: "+rasio+"%");
info.append("INFO KOMPRESI\nJumlah Bit (asli)
: "+(size*bitASCII)+ " ("+ size +" karakter)" +
"\nJumlah Bit (kompres) : "+ pjgBit
+ " ("+ pjgBit/bitASCII +" karakter)" +

Modul Praktikum Kriptografi 2014 151


"\nJumlah Message :"+pjgMsg+"\nRatio
Kompresi : "+rasio+"%");
//info.append("INFO SMS = "+input);
info.append("\n \n");
info.append("Pengujian Dengan BitASCII : " +
bitASCII );
//info.append("Port 2011 adalah port simulasi,
dan lebar bit per segmen dibatasi cuma 1088 (aktual
1120)");
info.setCommandListener(this);
display.setCurrent(info);
}
public void commandAction(Command c, Displayable
d){
try{
if(c == info.biasa || c == info.kompres){
//String port =
info.tPort.getString();
Message m = null;
// timer.cancel();
String st;//, teksfix;
if(port.length() == 0)
st = "sms://" +
info.nomor.getString();
else
st = "sms://" +
info.nomor.getString() + ":" + port;
//formUtama.append("\nkirim ke " +
st);
if(c == info.biasa){

Modul Praktikum Kriptografi 2014 152


TextMessage tm =
(TextMessage)msgConn.newMessage(MessageConnection.TEXT
_MESSAGE, st);

tm.setPayloadText(writeMsg.getString());
System.out.println("pesan :
"+writeMsg.getString());
m = tm;
} else if(c == info.kompres) {
BinaryMessage bm =
(BinaryMessage)msgConn.newMessage(MessageConnection.BI
NARY_MESSAGE, st);
//System.out.println("pesan
kompres : "+Kompres.kompres(tI.getString()));

//bm.setPayloadData(komp.getSMSBytes());
byte[]
hasilackomp=ackomp.kompres(writeMsg.getString());
bm.setPayloadData(hasilackomp);
m = bm;
}
try{

//febrian : coba bikin thread


final Message innerM=m;
new Thread(new Runnable()
{
public void run()
{
try{
msgConn.send(innerM);
} catch(IOException e) {}

Modul Praktikum Kriptografi 2014 153


}
}).start();

// end of coba ocba

//msgConn.send(m);

Display.getDisplay(this).setCurrent(new
Alert("berhasil", "Alhamdulillah, pesan terkirim..",
null, null), info);
//log(tI.getString());
// tI.delete(0,tI.size());

info.saveOutMsg(info.nomor.getString(),
writeMsg.getString());
}
catch(Exception e){
//log(e.toString());

System.out.println("peringatan:"+e);
}
timer = new Timer();
// timer.schedule(tpi, 2000L, 2000L);
}
else if(c == info.back){
writeMsgScreen();
}
if(d == writeMsg){
if(c == save){
String isiPsn =
writeMsg.getString();
info.saveOutMsg("", isiPsn);

Modul Praktikum Kriptografi 2014 154


displayAlert(INFO, "Pesan
disimpan..", null, writeMsg);
}else if(c == clear){
writeMsg.setString("");
display.setCurrent(writeMsg);
}
else if(c == back){
mainMenuScreen();
}
else if (c == next){
info_pesan();
}
}
if(d == readMsg){
if(c == exitToOut){
outbox();
}else if(c == exitToIn){
inbox();
}else if(c == reply){
writeMsg.setString("");
writeMsgScreen();
}else if(c == edit){

writeMsg.setString(readMsg.getString());
writeMsgScreen();
}else if(c == back){
mainMenuScreen();
}
}
if(d == receiveMsg && c == read){
inbox();
}

Modul Praktikum Kriptografi 2014 155


if(d == inboxList){
int inD =
inboxList.getSelectedIndex();
int idGIn = idIn[inD];
if(numListUmumIn != 0){
if(inboxList.isSelected(inD)){
baca("inbox", idGIn, false);
}
if(c == read){
baca("inbox", idGIn, false);
}else if(c == del){
hapus("inbox", idGIn);
inbox();
}else if(c == delAll){

RecordStore.deleteRecordStore("inbox");
mainMenuScreen();
}else if(c == exitInOut){
mainMenuScreen();
}
}
}
if(d == outboxList){
int inOut =
outboxList.getSelectedIndex();
int idGOut = idOut[inOut];
if(numListUmumOut != 0){
if(outboxList.isSelected(inOut)){
baca("outbox", idGOut, false);
}
if(c == read){
baca("outbox", idGOut, false);

Modul Praktikum Kriptografi 2014 156


}else if(c == del){
hapus("outbox", idGOut);
outbox();
}else if(c == delAll){

RecordStore.deleteRecordStore("inbox");
mainMenuScreen();
}else if(c == exitInOut){
mainMenuScreen();
}
}
}
if ((c == exitInOut) || (c == back)) {
mainMenuScreen();
}
} catch (Exception ex){
ex.printStackTrace();
}
}
}

Modul Praktikum Kriptografi 2014 157


**Contoh program Huffman SMS pada saat running

Modul Praktikum Kriptografi 2014 158


KODE ASCII

Modul Praktikum Kriptografi 2014 159

Anda mungkin juga menyukai