File PDF
File PDF
File PDF
TUGAS AKHIR
Disusun Oleh:
NIM : 2009-81-020
JAKARTA
2013
ii
TUGAS AKHIR
Disusun Oleh:
NIM : 2009-81-020
JAKARTA
2013
vi
ABSTRAKSI
KATA PENGANTAR
Puji Syukur terhadap Tuhan Yang Maha Esa karena berkat rahmat-Nya
serta Karunia-Nya saya dapat membuat serta menyelesaikan Tugas Akhir
saya dengan judul „Aplikasi SMS Kriptografi dengan Penerapan Metode
RSA‟.
Adapun pembuatan Tugas Akhir / Skripsi saya ini merupakan salah satu
syarat mahasiswa akademik untuk mendapatkan gelar Strata I (S-1) pada
Jurusan Teknik Informatika , Fakultas Ilmu Komputer di Universitas Esa
Unggul.
Mohon maaf jika pembuatan Tugas Akhir ini masih terdapat kesalahan
sehingga terlihat belum sempurna, untuk itu saya mengharapkan banyak
dukungan dan masukan dari dosen maupun teman dalam penyempurnaan
Tugas Akhir saya. Semoga Tugas Akhir saya dapat bermanfaat bagi yang
membutuhkannya.
(Verdy Yanto-200981020)
ix
DAFTAR ISI
ABSTRAKSI……………………………………..............................vi
BAB I PENDAHULUAN
2.1 Kriptografi…..…………………………………………8
2.2 Android……………………….…………………… 22
DAFTAR PUSTAKA
LAMPIRAN
xii
DAFTAR GAMBAR
DAFTAR TABEL
BAB 1
PENDAHULUAN
SMS (Short Message) mungkin sudah tidak asing lagi dimata masyarakat,
banyak sekali orang menggunakan fitur SMS untuk berinteraksi dengan
orang serta alternatif lain jika selular orang yang ingin dituju dalam
keadaan off dan saat orang mengaktifkan selular mereka akan ada notifikasi
pesan yang masuk. SMS sendiri dari tahun ke tahun selalu berkembang dan
semakin lebih mudah untuk digunakan oleh para user. Seperti contoh
sebelum selular itu ada di kehidupan masyarakat , orang
menggunakan pager untuk mengirimkan pesan ke orang yang dituju.
Sekejap tanpa kita sadari zaman semakin berubah dan akhirnya muncullah
ponsel selular. Masyarakat yang sudah mengenal ponsel akan meninggalkan
kehidupan dalam memakaipager dalam mengirim pesan atau yang bisa
disebut SMS
Banyak yang telah menggunakan fitur SMS dalam kehidupan sehari hari ,
tetapi seiring berkembangnya waktu proses keamanan dalam melakukan
pengiriman data pun semakin rawan yang dikarenakan banyaknya pihak
ketiga yang dapat juga disebut sebagai hacker yang tidak memiliki pandang
bulu untuk mengintip atau melihat pesan yang bersifat penting ataupun
tidak ,sebelum sampai ke orang yang dituju pesannya. Sudah banyak cara
yang telah dilakukan olehprogammer yang membuat fitur SMS untuk
mencegah jebolnya pesan dan data yang dikirim dari tangan hacker. Dan
cara yang tepat adalah menggunakan Ilmu Kriptografi. Ilmu Kriptografi
1
2
Dalam pembuatan aplikasi sms kriptografi RSA ini , masalah yang ada
meliputi :
Adapun manfaat yang dapat diperoleh penulis dalam pembuatan aplikasi ini
meliputi :
Ruang lingkup masalah dalam penyusunan Tugas Akhir ini adalah sebagai
berikut :
5
Metode penelitian dalam membuat Tugas Akhir ini , yakni sebagai berikut :
1 Kerangka Berfikir
2 Kerangka Penelitian
4 Pengumpulan Data
5 Metode Pengembangan
6. Sistematika Penulisan
BAB 1 PENDAHULUAN
BAB II
LANDASAN TEORI
2.1 Kriptografi
Kriptografi berasal dari kata Yunani, yaitu Crypto yang berarti rahasia
dan Grapho yang berarti menulis. Menurut (Schneier , 1996 ) secara umum
Kriptografi adalah ilmu dan seni untuk menjaga keamanan pesan
(Cryptography is the art and science of keeping messages secure) . Menurut
(Menezes , 1996 ) sebagai pembanding, terdapat pula definisi yang berbeda,
Kriptografi adalah ilmu yang mempelajari teknik-teknik matematika yang
berhubungan dengan aspek keamanan informasi seperti kerahasiaan,
integritas data, serta otentikasi . Kata “seni” di dalam definisi di atas berasal
dari fakta sejarah bahwa pada masa-masa awal sejarah kriptografi, setiap
orang mungkin mempunyai cara yang unik untuk merahasiakan pesan.
Cara-cara unik tersebut mungkin berbeda-beda pada setiap pelaku
kriptografi sehingga setiap cara menulis pesan rahasia pesan mempunyai
nilai estetika tersendiri sehingga kriptografi berkembang menjadi sebuah
seni merahasiakan pesan (kata “graphy” di dalam “cryptography” itu sendiri
sudah menyiratkan sebuah seni).
8
9
E(M) = C
D(C) = M
D(E(M)) = M
Dengan melihat situasi ini, maka kriptografi yang baik akan memilih
untuk menggunakan sepanjang mungkin kunci yang akan digunakan,
namun hal ini tidak dapat diterapkan begitu saja. Semakin panjang kunci,
semakin lama pula waktu yang digunakan oleh komputer untuk melakukan
proses enkripsi. Oleh sebab itu, panjang kunci yang akan digunakan
hendaknya memperhatikan tiga hal, yaitu seberapa penting data yang akan
dirahasiakan, berapa lama waktu yang dibutuhkan agar data tersebut tetap
aman, dan seberapa kuat kemampuan kriptoanalis dalam memecahkan
teknik penyandian kita.
dengan syarat :
1. a harus relatif prima terhadap n
2. Φ(n) = n(1-1/p1) n(1-1/p2) … n(1-1/pr)
dalam hal ini p1,p2,….pr adalah faktor prima
dari n. Φ(n) adalah fungsi yang menentukan
berapa banyak dari bilangan – bilangan
1,2,3,..n yang relatif prima terhadap n.
aΦk(n) = 1k (mod n)
atau
aΦk(n) = 1 (mod n) (II)
me . d = m (mod n) (VI)
d = 1 + k Φ(n) (XI)
19
Contoh :
Misalkan Alice akan membangkitkan kunci public dan kunci
private miliknya. Alice memiliki p = 27 dan q = 71 (dalam prkateknya,
kedua bilangan ini haruslah bilangan besar ). Selanjutnya Alice menghitung
n = p . q = 47 . 71 = 3337
dan
Φ(n) = (p – 1 ) (q - 1) = 3220
d = 1 + k Φ(n)
d = 1 + (k x 3220)
79
20
Dekripsi
Setiap blok chipertext ci didekripsikan kembali menjadi blok
mi = cid mod n
Contoh :
Misalkan Bob mengirim pesan kepada Alice.
Pesan(plaintext) yang akan dikirim ke Alice adalah
m = HARI INI
7265827332737873.
m = 7265827332737873.
m = HARI INI
2.2 Android
2.2.1 Pengertian Android
Menurut (Android Developer , 2012 ) android adalah kumpulan
perangkat lunak yang ditujukan bagi perangkat bergerak mencakup sistem
operasi, middleware, dan aplikasi kunci. Android Standart Development
Kid (SDK) menyediakan perlengkapan dan Application Programming
Interface (API) yang diperlukan untuk mengembangkan aplikasi pada
platform Android menggunakan bahasa pemrograman Java.
yang akan digunakan dan evaluasi – evaluasi apa yang dapat membuat
pengguna puas akan peerangkat lunak ini , Untuk itu , di kondisi semacam
ini , metode prototype merupakan metode yang cocok dalam masalah ini.
Dalam gambar yang terdapat pada 5.4 , tahap awal dari metode ini adalah
communication yang dimana pembuat perangkat lunak dan pengguna
bertemu tatap muka dan membicarakan proses secara keseluruhan proses
yang akan dibuat dalam perangkat lunak secara objektif , melakukan
pemahaman serta analisis dan apa saja yang harus ada dalam perangkat
lunak . Dari tahap communication , pembuat perangkat lunak dengan cepat
melakukan proses perencaaan dan tahap awal secara cepat dan tepat (quick
27
plan) dan menggambarkan model dari proses input / output dalam benrtuk
rancangan gambar (modelling quick design) Modelling yang dimaksudkan
meliputi tampilan – tampilan dari perangkat lunak. Setelah langkah
modelling selesai , maka memasuki tahap selanjutnya yaitu construction of
prototype atau dapat disebut sebagai proses pembuatan perangkat lunak
tersebut dan tahap pengujian dari perangkat lunak tersebut. Untuk tahap
pengujian(deployment and feedback) , dilakukan oleh pengguna yang
dimana saat pengguna merasa terdapat / belum puas akan perangkat lunak
maka akan kembali ke tahap communcation . Proses tahap dalam metode
protototype bersifat berulang – ulang sampai pengguna puas dan mengerti
proses input dan output pada perangkat lunak tersebut.
Meski masalah ini dapat teratasi , prototype merupakan metode yang efisien
dari perancangan sistem perangkat lunak. Salah satu kunci dalam metode ini
adalah pengguna dan pembuat perangkat lunak harus setuju dan memiliki
pemikiran yang sama dalam proses sistem m dan kualitas.
29
BAB III
METODOLOGI PENELITIAN
Berikut tahap – tahap awal dalam mengerjakan laporan Tugas Akhir saya :
start
Mencari metode
Proses testing bug
kriptografi untuk
aplikasi
aplikasi SMS
Menentukan
Instal aplikasi ke
software yang
selular
digunakan
Melakukan
Membut laporan TA end
pembuatan aplikasi
29
30
Penelitian yang pertama kali akan dilakukan adalah memahami cara kerja
dari metode RSA itu sendiri. Berikut Langkah penelitan yang akan diteliti :
Populasi / proses pengujian aplikasi SMS ini diuji dengan dua buah selular
berbasis android yang memiliki instalan /aplikasi SMS Kriptografi ini.
Pesan yang dikirim akan dikirim ke dua lokasi yaitu” LIST PESAN” pada
aplikasi dan ke inbox sms pada selular android. Pesan yang dikirim akan
berwujud pesan yang sudah disandikan.
Pengguna2 akan melihat isi pesan dari dua sisi , yaitu yang pertama pesan
ditampilkan di inbox sms pada android yang pastinya isi pessan tidak dapat
32
Selain proses aplikasi secara umum , terdapat juga proses aplikasi sistem
dalam menjalankan aplikasinya secara lebih detail yaitu : (gambar berada di
halaman berikutnya)
34
start
Sistem membuat
Buka aplikasi sms
Kunci D , kunci N
kriptografi RSA
(numerik)
ya
KIRIM SMS
ISI PESAN
Kirim SMS
No Tujuan
0856826389172
Isi Pesan
Ini Verdy!
Sandikan
642635283622 (Kunci E)
786937287392 (Kunci D)
3273292379472 (Kunci N)
Pesan Yang sudah disandikan
46475768179739164610370160461072071
07330103801802713713018027012018208
LIST PESAN
UPDATE SMS
(BUKA LIST SMS)
From : 086735172
Text :
46475768179739164610370160461072071
07330103801802713713018027012018208
ISI PESAN
No Pengirim
086735172
Isi Pesan
Text :
464757681797391646103701604610720710
7330103801802713713018027012018208
Masukkan Kunci D
786937287392
Masukkan Kunci N
3273292379472
Terjemakan
Ini Verdy!
Tahap ini menjelaskan apakah kebutuhan aplikasi SMS Kriptografi RSA ini
sudah sesuai dengan keinginan pengguna :
Saat Tahap ini sudah disetujui maka akan dilanjutkan ke tahap pengkodean
sistem .
40
Berikut Alur flowchart pembuatan function dan class yang akan digunakan
Class RSA
Encrypt()
Decrypt()
Selain dari alur pembuatan class dan function, juga terdapat alur dari
metode kriptografi RSA sendiri dalam aplikasi yaitu seperti :
41
Start
Pemakaian bit
sebesar 256 bit
Penentuan p dan q
Random r = new Random();
p = BigInteger.probablePrime(bitlength, r);
q = BigInteger.probablePrime(bitlength, r);
Cari D
Pencarian n
K++
N = p.multiple(q)
D = (1 + (k * n))/E
ya
Encrypt Decrypt
modPow(E, N) modPow(D, N)
Pada tahap ini , pengguna akan menguji aplikasi itu secara langsung di
selular android apakah sesuai harapan atau tidak , jika masih ada yang
kurang maka pembuatan aplikasi harus kembali dari tahap pengkodean
sistem dan tahap pengujian sistem.
BAB IV
Adapun aplikasi yang saya buat dibuat di perangkat lunak Eclipse Galileo
dengan spesifikasi komputer antara lain ; logo laptop adalah axio dengan
windows 7 64bit dan RAM 1 GB. Rincian dari aplikasi ini meliputi :
Proses koding aplikasi ini terdiri dari 5 class meliputi ; class RSA_SMS() ,
class kirim_SMS() , class RSAA() , class tempat_SMS() , class isi_sms().
Dalam pembuatan masing – masing class terdapat banyak fungsi yang akan
dijelaskan dalam pembahasan ini.
43
44
Pada tampian awa ini dijalankan dengan emulator android bawaan dari
perangkat lunak eclipse Galileo dan merupakan awal mula dalam
menjalanan proses aplikasi, Pada tampilan awal aplikasi terdapat dua buah
pilihan yaitu “BUAT SMS” dan “LIHAT SMS”. Fungsi dari masing –
masing pilihan ini meliputi :
2. LIHAT SMS => pilihan ini dipakai saat adanya pesan sandi yang
masuk , maka saat pilihan ini dipilih terdapat list – list pesan
dalam bentuk ListView atau Array.
setContentView(R.layout.main);
46
merupakan langkah awal dalam proses class ini karena memiliki fungsi
memanggil tampilan design pada tampilan_awal aplikasi dalam format
main.xml. (segala tampilan aplikasi berfomat xml dan dipanggil ke
koding kava dengan sintak koding ini).
Untuk sintak
list_sms.setOnClickListener(new View.OnClickListener() {
start
Class RSA_SMS()
Panggil class
Panggil class
kirim_SMS()
Tempat_SMS()
Dalam tahap ini, disaat pngguna men-klik pilihan “BUAT SMS” maka
tampilan awal dari aplikasi akan memanggil class KIRIM_SMS().Tampilan
meliputi
Class Kirim_SMS()
Function
kirim_SMS() Function main()
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS SUDAH DIKIRIM",
Toast.LENGTH_LONG).show();
break;
case
android.telephony.SmsManager.RESULT_ERROR_GENERIC_FAILURE:
case android.telephony.SmsManager.RESULT_ERROR_NO_SERVICE:
Toast.makeText(getBaseContext(), "NO sinyal",
Toast.LENGTH_LONG).show();
break;
case android.telephony.SmsManager.RESULT_ERROR_NULL_PDU:
Toast.makeText(getBaseContext(), "Null PDu",
Toast.LENGTH_LONG).show();
break;
case android.telephony.SmsManager.RESULT_ERROR_RADIO_OFF:
Toast.makeText(getBaseContext(), "Handphone anda mati",
Toast.LENGTH_LONG).show();
break;
default:
Toast.makeText(getBaseContext(),"Other Error",
Toast.LENGTH_LONG).show();
}
}
},new IntentFilter(sent));
case Activity.RESULT_CANCELED:
default:
Toast.makeText(getBaseContext(), "wadu saya ga tau",
Toast.LENGTH_LONG).show();
}
}
},new IntentFilter(deliver));
android.telephony.SmsManager sms =
android.telephony.SmsManager.getDefault();
btnSend = (Button)findViewById(R.id.btnKirimSMS);
phone_no = (EditText)findViewById(R.id.txtNoTelp);
pesan = (EditText)findViewById(R.id.txtPesan);
plain_textfield = (EditText)findViewById(R.id.pesan_dekrip);
bytee = (EditText)findViewById(R.id.bytte);
keyy = (Button)findViewById(R.id.key);
e = (EditText)findViewById(R.id.e); Variabel
d = (EditText)findViewById(R.id.d);
N = (EditText)findViewById(R.id.modulus);
btnSend.setOnClickListener(new View.OnClickListener() {
if(notelp.length()>0)
{ Proses send key
kirimSMS(notelp, pesan_chiper);
}
else
{
Toast.makeText(getBaseContext(),"no hp tidak boleh kosong",
Toast.LENGTH_LONG).show();
}
}
});
53
keyy.setOnClickListener(new View.OnClickListener() {
//encrypt
BigInteger hala = new BigInteger(cchiper_text.getBytes());
BigInteger halaa = bb.encrypt(hala, eee, Nn);
String sandii = halaa.toString();
Proses enkrip
//decrypt dan dekrip
BigInteger jaja = bb.decrypt(halaa, ddd, Nn);
String jajaja = new String(jaja.toByteArray());
if(notelp.length()>0)
{
kirimSMS(notelp, sandii); Proses pengiriman pesan
bytee.setText(sandii); yang disandikan
plain_textfield.setText(jajaja);
}
else
{
Toast.makeText(getBaseContext(),"no hp tidak boleh kosong",
Toast.LENGTH_LONG).show();
}
}});
54
Function dari main yang sudah dijelaskan ini mempunyai dua tugas , yang
dimana tugas pertama adalah mengirimkan kunci dan tugas kedua adalah
mengirimkan pesan yang sudah disandikan.
Dalam pembuatan aplikasi ini , saya hanya menggunakan 256 bit , yang
dikarenakan semakin besar bit yang digunakan , maka semakin panjang
kunci dalam melakukan proses deskripsi dan dengan bit yang besar ,
membutuhkan waktu yang lama dalam melakukan proses enkripsi /
menyandikan pesan.
Untuk proses enkripsi dan dekrpsi yang dipanggil dari class RSAA()
menggunakan function parameter yang terdiri dari parameter pesan yang
akan disandikan , parameter kunci D/E dan parameter kunci N.dan sangat
penting bahwa dalam metode RSA proses enkripsi dan dekripsi
menggunakan tipe data BigInteger dan dalam proses menyandikan
pesan , pesan harus diubah ke bentuk angka bit integer dengan sintak
if(notelp.length()>0)
{
kirimSMS(notelp, sandii);
bytee.setText(sandii);
plain_textfield.setText(jajaja);
}
else
{
Toast.makeText(getBaseContext(),"no hp tidak boleh kosong",
Toast.LENGTH_LONG).show();
}
}
});
}
Untuk isi koding dari class RSAA() yang berfungsi untuk melakukan
proses penyandian pesan / enkripsi dan menterjemahkan pesan / dekripsi
adalah
private BigInteger n, d, e , p , q;
private BigInteger phi;
private int bitlength = 30; Variabel
private int blocksize = 120;
private int bitlen = 256;
phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
e = BigInteger.probablePrime(bitlength/2, r);
phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
e = BigInteger.probablePrime(bitlength/2, r);
BigInteger Message merupakan parameter isi pesan yang akan dikirim , jadi
untuk mengirimkan pesan yang bertipe text , mula – mula text harus
diubah tipe datanya menjadi BigInterger dalam proses enkripsi dan
BigInteger dikembalikan lagi ke text untuk proses dekripsi.
Sintak yang sangat penting dalam proses enkripsi dan dekripsi pada aplikasi
ini adalah
start
Class tempat_SMS()
Panggil class
isi_sms()
end
Dalam tampilan lihat_sms ini , class yang termasuk dalam proses tampilan
ini adalah class Tempat_SMS() yang nantinya akan berhubungan dengan
class isi_pesan().
btn_key.setOnClickListener(new View.OnClickListener() {
list.setAdapter(smsAdapter);
62
list.setOnItemClickListener(new OnItemClickListener() {
try
{
c = getApplicationContext().getContentResolver().query(SMS_Uri, null,
null, null, null);
}
try
{
for(boolean hasdata = c.moveToFirst(); hasdata ; hasdata =
c.moveToNext())
{
String alamat_no = c.getString(c.getColumnIndexOrThrow("address"));
String isi_text = c.getString(c.getColumnIndexOrThrow("body"));
catch (Exception e) {
e.printStackTrace();
}
c.close();
}});}});}
63
try{
c = getApplicationContext().getContentResolver().query(uri, null, null,
null, null);
}
try
{
for(boolean hasdata = c.moveToFirst(); hasdata ; hasdata =
c.moveToNext())
{
final String noHP = c.getString(c.getColumnIndex("address"));
final String msg = c.getString(c.getColumnIndexOrThrow("body"));
if(!msg.equalsIgnoreCase("ERROR"))
{
RSAA abc = new RSAA(256);
list.add(noHP + "\nText:"+ msg);
}}}
catch(Exception e)
{
e.printStackTrace();
}
c.close();
return list;
}
}
memanggil pesan yang berada pada inbox bawaan dari android dapat
ditampilkan di list pesan pada aplikasi SMS kriptografi ini.
try
{
for(boolean hasdata = c.moveToFirst(); hasdata ; hasdata =
c.moveToNext())
{
final String noHP = c.getString(c.getColumnIndex("address"));
final String msg = c.getString(c.getColumnIndexOrThrow("body"));
if(!msg.equalsIgnoreCase("ERROR"))
{
RSAA abc = new RSAA(256);
list.add(noHP + "\nText:"+ msg);
}}}
catch(Exception e)
{
e.printStackTrace();
}
c.close();
return list;
}
Proses memanggil detail dari pesan dalam aplikasi ini menggunakan list
sebagai variable bawaan dari android.
65
Setelah function terdapat dua buah proses yaitu yang pertama adalah proses
yang berfungsi untuk menampilkan list pesan di tampilan LIHAT PESAN
dan proses kedua adalah proses untuk memanggil class ISI_PESAN() dan
memindahkan data pesan dari list pesan dapat tertampil di class
ISI_PESAN(). Pembuatan koding proses menampilkan list pesan adalah
sebagai berikut :
btn_key.setOnClickListener(new View.OnClickListener() {
if(msgs.isEmpty())
{
msgs.add("tidak ada sms yang bisa di dekrip dengan key itu");
}
list.setAdapter(smsAdapter);
Dalam proses ini , bias disebut sebagai main class dari class tempat_SMS()
dan untuk menampilkan sms yang ter-update maka aplikasi ini memenggil
function yang ada pada class ini , yaitu function getSMS() dalam
66
Proses tampilan sms ini berdasarkan array dapat dipanggil dengan sintak :
list.setAdapter(smsAdapter);
list.setOnItemClickListener(new OnItemClickListener() {
try
{
c = getApplicationContext().getContentResolver().query(SMS_Uri, null,
null, null, null);
}
catch(Exception e)
{
e.printStackTrace();
}
67
try
{
for(boolean hasdata = c.moveToFirst(); hasdata ; hasdata =
c.moveToNext())
{
String alamat_no = c.getString(c.getColumnIndexOrThrow("address"));
String isi_text = c.getString(c.getColumnIndexOrThrow("body"));
catch (Exception e) {
e.printStackTrace();
}
c.close();
}});}});}
Bisa dilihat bahwa proses ini berjalan saat pengguna klik pesan yang ingin
dibaca pada list_sms dan otomatis pesan akan ditampilkan di tampilan isi
pesan.
Proses yang membuat list pesan dapat di klik adalah dengan sintak
list.setOnItemClickListener(new OnItemClickListener() {
Sintak Intent dan start activity merupakan sintak yang digunakan untuk
memanggil class lain.
Dalam tampilan ini , proses ini hanya akan berjalan jika pengguna memilih
pilihan “LIHAT PESAN” pada tampilan awal dan klik list pesan yang ingin
dibaca. Class yang digunakan dalam tampilan ini adalah class isi_pesan().
Berikut tampilan dari isi_pesan :
69
Pada tampilan isi pesan ini terdapat dua buat textfield yang harus diisi
pengguna agar pesan yang disandikan dapat dibaca oleh manusia, yang
harus diisi pengguna adalah menginputkan kunci D dan kunci N untuk
dapat melakukan proses deskripsi pesan.
Berikut alur flowchart dalam proses dari tampilan isi pesan ini
70
start
yes
Masukkan kunci D
dan N
Berikut proses pembuatan koding dari tampilan isi pesan ini dengan class
ISI_PESAN()
71
pho_no = (EditText)findViewById(R.id.phone_no_pengirim);
isi_pesan = (EditText)findViewById(R.id.isi_pesan_enkrip);
kunci_d = (EditText)findViewById(R.id.kunci_d);
kunci_n = (EditText)findViewById(R.id.kunci_N);
pesan_terjemah = (TextView)findViewById(R.id.plaintext_pesan);
pho_no.setText(alamat);
isi_pesan.setText(isi_text);
pesan = isi_pesan.getText().toString();
kunci_dd = kunci_d.getText().toString();
kunci_nn = kunci_n.getText().toString();
pesan_terjemah.setText(jakaka);
}});}}
Dalam pembuatan koding ini , yang pertama – tama harus dilakukan adalah
melakukan pemindahan data pesan yang ada di class Tempat_SMS() ke
class ISI_PESAN() dengan memanggil sintak
setContentView(R.layout.isi);
Bundle b = getIntent().getExtras();
pho_no.setText(alamat);
isi_pesan.setText(isi_text);
Sintak ini berfungsi untuk memanngil data yang ada pada class
TEMPAT_SMS() dengan menggunakan
Bundle b = getIntent().getExtras();
Contoh :
2. Ketik no tujuan pengguna 2 (5556) dan isi pesan (“Hi”) dan klik
tombol sandikan , Dan Klik Tombol Kirim SMS untuk mengirim
kunci .
75
Jika kunci yang diinputkan benar maka pesan asli dapat muncul di
bawah button trejemahan dengan bentuk label.
Jika salah satu kunci atau dua kunci yang diinput salah , maka
akan menghasilkan
78
Pesan yang tampil pada label adalah symbol yang tidak dapat
dibaca oleh manusia.
79
BAB V
PENUTUP
5.1 Kesimpulan
79
80
DAFTAR PUSTAKA
Sayed Y. Hashimi and Satya Komatineni, 2009, Pro Android, Apress Inc.
RIWAYAT HIDUP
Data Pribadi
Agama : Buddha
Riwayat Pendidikan
LAMPIRAN
Lampiran Program
Class RSAA.Java
package com.willis.skripsi;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.math.BigInteger;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.RSAPublicKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Random;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import android.inputmethodservice.Keyboard.Key;
private BigInteger n, d, e , p , q;
private BigInteger phi;
private int bitlength = 30;
private int blocksize = 120;
-2-
phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
e = BigInteger.probablePrime(bitlength/2, r);
Class RSA_SMS.Java
-4-
Class Kirim_SMS.Java
package com.willis.skripsi;
import java.math.BigInteger;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
-5-
import android.util.Base64;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
private BigInteger pp ;
private BigInteger qq;
private BigInteger Nn,nnnn;
private BigInteger phi;
private BigInteger ee;
private BigInteger dd;
private int bitlength = 64;
private int blocksize = 256;
btnSend = (Button)findViewById(R.id.btnKirimSMS);
phone_no = (EditText)findViewById(R.id.txtNoTelp);
pesan = (EditText)findViewById(R.id.txtPesan);
-6-
plain_textfield = (EditText)findViewById(R.id.pesan_dekrip);
bytee = (EditText)findViewById(R.id.bytte);
keyy = (Button)findViewById(R.id.key);
e = (EditText)findViewById(R.id.e);
d = (EditText)findViewById(R.id.d);
N = (EditText)findViewById(R.id.modulus);
btnSend.setOnClickListener(new View.OnClickListener() {
if(notelp.length()>0)
{
kirimSMS(notelp, pesan_chiper);
}
else
{
}
});
keyy.setOnClickListener(new View.OnClickListener() {
e.setText(eee.toString());
-7-
d.setText(ddd.toString());
N.setText(Nn.toString());
//encrypt
BigInteger hala = new BigInteger(cchiper_text.getBytes());
BigInteger halaa = bb.encrypt(hala, eee, Nn);
String sandii = halaa.toString();
//decrypt
BigInteger jaja = bb.decrypt(halaa, ddd, Nn);
String jajaja = new String(jaja.toByteArray());
if(notelp.length()>0)
{
kirimSMS(notelp, sandii);
bytee.setText(sandii);
plain_textfield.setText(jajaja);
}
else
{
case
android.telephony.SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Toast.makeText(getBaseContext(), "Error nih",
Toast.LENGTH_LONG).show();
break;
case android.telephony.SmsManager.RESULT_ERROR_NO_SERVICE:
Toast.makeText(getBaseContext(), "NO sinyal",
Toast.LENGTH_LONG).show();
break;
case android.telephony.SmsManager.RESULT_ERROR_NULL_PDU:
Toast.makeText(getBaseContext(), "Null PDu",
Toast.LENGTH_LONG).show();
break;
case android.telephony.SmsManager.RESULT_ERROR_RADIO_OFF:
Toast.makeText(getBaseContext(), "Handphone anda mati",
Toast.LENGTH_LONG).show();
break;
default:
Toast.makeText(getBaseContext(),"Other Error",
Toast.LENGTH_LONG).show();
}
}
},new IntentFilter(sent));
-9-
case Activity.RESULT_CANCELED:
Toast.makeText(getBaseContext(), "SMS GGAL",
Toast.LENGTH_LONG).show();
break;
default:
Toast.makeText(getBaseContext(), "wadu saya ga tau",
Toast.LENGTH_LONG).show();
}
}
},new IntentFilter(deliver));
android.telephony.SmsManager sms =
android.telephony.SmsManager.getDefault();
sms.sendTextMessage(noTelp, null, pesannya, sentPI, deliveredPI);
}
}
Class Tempat_SMS.Java
package com.willis.skripsi;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import com.willis.skripsi.kirimSMS;
import android.app.Activity;
import android.content.Intent;
- 10 -
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.gsm.SmsManager;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
super.onCreate(savedInstanceState);
setContentView(R.layout.smsinbox);
btn_key.setOnClickListener(new View.OnClickListener() {
if(msgs.isEmpty())
ArrayAdapter<String>smsAdapter=newArrayAdapter<String>(getBaseCon
text(), android.R.layout.simple_list_item_1,msgs);
list.setAdapter(smsAdapter);
list.setOnItemClickListener(new OnItemClickListener() {
Cursor c = null ;
try
c = getApplicationContext().getContentResolver().query(SMS_Uri, null,
null, null, null);
catch(Exception e)
e.printStackTrace();
}
- 12 -
try
b.putString("string_addres", alamat_no);
b.putString("string_isi", isi_text);
trans.putExtras(b);
trans.putExtra(tempatSMS.class.getName(), alamat_no);
trans.putExtra(tempatSMS.class.getName(), isi_text);
startActivity(trans);
}}
catch (Exception e) {
e.printStackTrace();
c.close();
}});}});}
{
- 13 -
Cursor c = null;
try{
catch(Exception e){
e.printStackTrace();
try
if(!msg.equalsIgnoreCase("ERROR"))
catch(Exception e){
e.printStackTrace();
}
- 14 -
c.close();
return list;
}}
Class Isi_pesan.Java
package com.willis.skripsi;
import java.math.BigInteger;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
pho_no = (EditText)findViewById(R.id.phone_no_pengirim);
isi_pesan = (EditText)findViewById(R.id.isi_pesan_enkrip);
kunci_d = (EditText)findViewById(R.id.kunci_d);
kunci_n = (EditText)findViewById(R.id.kunci_N);
pesan_terjemah = (TextView)findViewById(R.id.plaintext_pesan);
pho_no.setText(alamat);
si_pesan.setText(isi_text);
//
- 15 -
pesan = isi_pesan.getText().toString();
kunci_dd = kunci_d.getText().toString();
kunci_nn = kunci_n.getText().toString();
Class PenerimaSMS.Java
package com.willis.skripsi;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;
if(bundle!=null)
for(int i = 0 ; i<msgs.length;i++)
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
str += ":";
str += "\n";
strmsg = msgs[i].getMessageBody().toString();
Toast.makeText(context,,"IncomingSMS",
Toast.LENGTH_LONG).show();
}}}
- 17 -
Lampiran Gambar
- 18 -
- 19 -
- 20 -