Anda di halaman 1dari 115

i

TUGAS AKHIR

PEMBUATAN APLIKASI SMS KRIPTOGRAFI RSA DENGAN


ANDROID

Disusun Oleh:

Nama : Verdy Yanto

NIM : 2009-81-020

JURUSAN TEKNIK INFORMATIKA

FAKULTAS ILMU KOMPUTER

UNIVERSITAS ESA UNGGUL

JAKARTA

2013
ii

TUGAS AKHIR

PEMBUATAN APLIKASI SMS KRIPTOGRAFI RSA DENGAN


ANDROID

Diajukan Sebagai Salah Satu Syarat Untuk Memperoleh Gelar Sarjana


Komputer, Jenjang Pendidikan S-1 ProgramStudi Teknik Informatika

Disusun Oleh:

Nama : Verdy Yanto

NIM : 2009-81-020

JURUSAN TEKNIK INFORMATIKA

FAKULTAS ILMU KOMPUTER

UNIVERSITAS ESA UNGGUL

JAKARTA

2013
vi

ABSTRAKSI

Mengirimkan pesan merupakan aktifitas yang selalu dilakukan setiap hari


bagi masyarakat sekarang. Namun kita pun sebagai masyarakat harus juga
waspada terhadap aksi pengintipan pesan tanpa izin dari pengguna selular
maupun menyadap isi pessan yang akan dikirim saat proses pengiriman
pesan sedang terjadi. Tentu pemilik selular pun tidak tahu bahwa pihak lain
telah mengetahui isi pesan yang bersifat rahasia ataupun mencuri ide yang
ada di dalam pesan. Untuk itulah saya berinisiatif membuat aplikasi SMS
kriptografi dengan menerapkan metode RSA dalam melakukan aktifitas
mengirim atau menerima pesan. Dan tentunya apa saja yang membuat saya
menerapkan aplikasi SMS ini dengan menggunakan kriptografi RSA ?

Bagi saya kriptografi merupakan satu-satunya jalan dalam mengamankan


pesan karena kriptografi juga dapat disebut sebagai bahasa persandian. Dan
mengapa saya menerapkan metode RSA dibanding metode lain yang sangat
banyak ? hal ini dikarenakan karena pada umumnya metode lain seperti
blowfish,,chiper cigne , dll hanya menggunakan satu kunci untuk
menterjemahkan isi pesan yang sudah disandikan (chipertext) menjadi
pesan yang dapat dibaca(plaintext) ,tetapi dengan metode RSA proses
menyandikan pesan bisa dibilang menggunakan 2 kunci dalam
menyandikan atau menterjemahkan pesan yaitu publik key yang berfungsi
sebagai menyandikan pesan dan private key sebagai menterjemahkan pesan
yang disandikan. Dan tentunya pembuatan aplikasi SMS ini dibuat di
platfform android karena sudah banyak masyarakat yang sudah mempunyai
selular berbasis android.

Kata Kunci : kriptografi , RSA , SMS , public key , privte key.


vii

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.

Pada kesempata ini, saya ingin mengucapkan terima kasih sebesar –


besarnya terhadap orang yang sangat berperan penting dalam membantu
serta membimbing saya dalam membuat Tugas Akhir ini sampai proses
pembuatan aplikasinya,antara lain :

1. Tuhan Yang Maha Esa yang telah membantu saya menghadapi


masalah – masalah saya dalam mental , serta berhubung saya
adalah Umat Budha , saya benar – benar berterima kasih kepada
Dewi Kwan Im karena Dia membuat saya dapat menjalani hidup
serta membuat Tugas Akhir ini serta aplikasi dapat sesuai judul.
2. Kepada mama saya yang selalu mendoakan saya agar saya dapat
cepat lulus dan mendapatkan gelar S1 di Universitas Esa Unggul.
3. Pak Ir.I Joko Dewanto , MM selaku dosen pembmbing materi
yang telah membantu saya dalam membimbing serta
memutuskan judul apa yang dapat saya buat untuk Tugas Akhir
ini.
viii

4. Pak Ir. Kundang Karsono Juman, M.Kom selaku dosen


pembimbing tulisan yang telah membantu saya dan membuat
saya belajar bagaimana menyusun Tugas Akhir saya serta
membimbing saya bagaimana dan apa yang harus dilakukan saat
persentasi.
5. Pak Fransiskus Adikara , S.Kom,MMSI yang selaku Ketua
Jurusan Teknik Informatika yang telah mengesahkan Tugas
Akhir saya dengan memberikan tanda tangan.
6. Bu Kartini Skom., MMSI selaku Dosen Penguji saya saat sidang
proposal seminar Tugas Akhir yang telah memberikan inspirasi
dalam pembuatan aplikasi saya.
7. Seluruh Staff Fakultas Ilmu Komputer yang membantu saya
dalam proses pengumpulan Tugas Akhir.
8. Teman – teman seperjuangan saya seperti Nicolas Nugroho dan
Welia yang telah banyak membantu dalam menyusun Tugas
Akhir saya.

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.

Jakarta, 31 Januari 2013

(Verdy Yanto-200981020)
ix

DAFTAR ISI

HALAMAN JUDUL …………………………………………… i

HALAMAN PENGESAHAN TUGAS AKHIR ………... iii

HALAMAN PENGESAHAN PENGUJI TUGAS AKHIR ….. iv

HALAMAN PERNYATAAN KEASLIAN TUGAS AKHIR … v

ABSTRAKSI……………………………………..............................vi

KATA PENGANTAR …...………………………………………… vii

DAFTAR ISI ……………………………………………………… viii

DAFTAR GAMBAR …………………………………………… … xi

DAFTAR TABEL …………………………………………………xii

BAB I PENDAHULUAN

1.1 Latar Belakang ……………………………………….1

1.2 Perumusan Masalah ………………………………….3

1.3 Tujuan dan Manfaat …………………………………3

1.4 Ruang Lingkup Masalah ……………………………4

1.5 Metode Penelitian …..………………………………5

BAB II LANDASAN TEORI

2.1 Kriptografi…..…………………………………………8

2.1.1 Panjang Kunci……………………………… 11

2.1.2 Kriptografi Kunci Rahasia dan Publik…….. 12


x

2.1.2.1 Kriptogafi Kunci Rahasia………….. 12

2.1.2.2 Kriptografi Kunci Publik………….. 14

2.1.3 Algoritma RSA…………………………… 15

2.1.3.1 Perumusan Algoritma RSA………. 16

2.1.3.2Algoritma Membangkitkan Kunci… 18

2.1.3.3 Algoritma Enkripsi / Dekripsi……. 20

2.2 Android……………………….…………………… 22

2.2.1 Pengertian Android……………………… 22

2.2.2 Sejarah dan Perkembangan Android……. 23

2.2.3 Anatomi Android……………………….. 24

2.3 SMS (Short Message Setvices) ………………….. 24

2.3.1 Pengertian SMS (Short Message Service). 24

2.4 Metode Pengembangan Prototype …………………. 26

BAB III METODOLOGI PENELITIAN

3.1 Kerangka Pemikiran ………………………………… 29

3.2 Kerangka Penelitian ………………………………… 30

3.2.1 Cara Kerja RSA…………………………… 30

3.2.2 Wilayah Penelitian………………………… 30

3.2.3 Manfaat Penelitian………………………… 30

3.3 Populasi / Sample ………………………………….. 31

3.4 Metode Pengembangan…………………………….. 31


xi

3.4.1 Pengumpulan Kebutuhan Aplikasi…………… 31

3.4.2 Proses Pengembangan Prototype…………….. 35

3.4.3 Evaluasi Prototype ………………………….. 39

3.4.4 Tahap Pengkodean Sistem………………….. 40

3.4.5 Tahap Pengujian Sistem…………………….. 42

3.4.6 Evaluasi Sistem Aplikasi…………………… 42

3.4.7 Penggunaan Aplikasi………………………… 42

BAB IV ANALISIS DAN PEMBAHASAN

4.1 Pembahasan Aplikasis SMS Kriptografi RSA………… 43

4.1.1 Tampilan Awal Aplikasi………………………. 44

4.1.2 Tampilan Buat SMS ………………………….. 48

4.1.3 Tampilan Lihat SMS…………………………... 59

4.1.4 Tampilan Isi Pesan…………………………….. 68

4.2 Proses Implementasi Aplikasi SMS Kriptografi RSA… 7

BAB V KESIMPULAN DAN SARAN

5.1 Kesimpulan ………………………………………………79

5.2 Saran …………………………………………………… 80

DAFTAR PUSTAKA

DAFTAR RIWAYAT HDUP

LAMPIRAN
xii

DAFTAR GAMBAR

Gambar 2.1 Proses Enkripsi dan Deskripsi………………………..10


Gambar 2.2 Kriptografi Simetris………………………………… 13
Gambar 2.3 Kriptografi Asimetris…………………………… 14
Gambar 2.4 Tahap Pengembangan Prototype………………… 26
Gambar 3.1 Tahap Pengerjaan Awal ………………………… 29
Gambar 3.2 Tahap Proses Aplikasi Secara Global……………… 33
Gambar 3.3 Proses Aplikasi Secara Detail ……………………… 34
Gambar 3.4 Menu Awal Aplikasi……………………………… 35
Gambar 3.5 Kirim SMS…………………………………………36
Gambar 3.6 List Pesan………………………………………… 37
Gambar 3.7 Isi Pesan……………………………………………38
Gambar 3.8 Flowchart function dan class…………………… 40
Gambar 3.9 Flowchart Metode RSA Kriptografi……………… 41
Gambar 4.1 Tampilan Awal………………………………… …44
Gambar 4.2 Alur Flowchart Pemanggilan Class……………… 47
Gambar 4.3 Tampilan Kirim SMS…………………………… 48
Gambar 4.4 Function pada Class Kirim_SMS()……………… 49
Gambar 4.5 Tampilan Lihat SMS…………………………… 59
Gambar 4.6 Alur Flowchart Lihat SMS…………………… …60
Gambar 4.7 Tampilan Isi Pesan……………………………… 69
Gambar 4.8 Alur Flowchart Tampilan Isi Pesan…………… 70
Gambar 4.9 Membuka Aplikasi SMS Kriptografi…………… 74
Gambar 4.9.1 Proses Pengiriman SMS………………………… 75
Gambar 4.9.2 Tampilan Inbox Dari 2 Sisi……………………… 76
Gambar 4.9.3 Proses Dekripsi Pesan…………………………… 77
Gambar 4.9.4 Proses Pemasangan Kunci yang Salah……………78
xiii

DAFTAR TABEL

Tabel 3.1 ……………………………………………………39


1

BAB 1

PENDAHULUAN

1.1 Latar Belakang

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

merupakan ilmu yang dikenal sebagai bahasa persandian sehingga pesan


atau kalimat yang dikirimkan menjadi tersandikan dan tidak mampu untuk
dibaca oleh para hacker. Untuk Istilahhacker dalam kriptografi dapat juga
disebut sebagai cryptonalyst. Metode kriptografi pun sangat banyak untuk
diterapkan dan masing masing dari metode mempunyai kelemahannya
masing – masing.

Dalam penerapan kriptografi saat melakukan pengiriman pesan ataupun


penerimaan pesan,Aplikasi ini menerapkan metode kriptografi RSA yang
ditemukan pada tahun 1976 oleh Ron (R)ivest , Adi (S)hamir dan Leonard
(A)dleman. Mengapa penulis menerapkan metode kriptografi RSA
dibanding metode kriptografi yang lain seperti blowfish , AES , TwoFish ,
chiper cignere dll? Hal ini dikarenakan karena metode RSA menggunakan 2
kunci untuk melakukan proses persandian data yang dimana kunci
pertama (public key) yang digunakan untuk melakukan persandian dan
kunci kedua (private key) yang digunakan untuk menterjemahkan bahasa
yang sudah disandikan menjadi bahasa yang dapat dibaca oleh
manusia.Penulis berpendapat bahwa metode ini merupakan metode yang
aman dalam menjaga keamanan pesan dari serangan cryptonalyst.

Untuk fitur yang digunakan dalam mengimplementasikan aplikasi SMS


dengan metode kriptografi RSA ini , dengan menggunakan platfform yang
berbasis android yang dikarenakan untuk zaman era sekarang dari tahun
2012 dan mungkin sampai tahun 2014 android masih akan terus berjaya di
kehidupan masyrakat maupun teknologi karena sistem nya yang bersifat
ringan , multifungsi dan mudah digunakan karena sifat ponsel yang berifat
layar sentuh (touch-screen).Untuk itu dalam memenuhi persyaratan dalam
mendapatkan gelar Strata – I atau (S1), membuat serta merancang alur
proses aplikasi SMS Kriptografi RSA ini dengan menggunakan android
3

1.2 Perumusan Masalah

Dalam pembuatan aplikasi sms kriptografi RSA ini , masalah yang ada
meliputi :

1. Bagaimana cara merancang aplikasi sms ini dalam menerapkan


metode RSA ?
2. Bagaimana dapat melakukan persandian bahasa dalam melakukan
pengiriman pesan dan menterjemahkan bahasa yang sudah
disandikan ke bahasa yang dapat dibaca oleh manusia ?
3. Bagaimana dapat mendapatkan dua kunci yang sangat berperan
penting dalam metode kriptografi RSA
4. Bagaimana dapat mengimplementasikan aplikasi ini ke dalam
bentuk APK (aplikasiandroid) sehingga dapat digunakan
oleh user.
5. Software apakah yang akan digunakan dalam proses pembuatan
aplikasi ini (source code program)

1.3Tujuan dan Manfaat

Adapun tujuan yang ingin diharapkan oleh penulis meliputi :

1. Ingin mendapatkan gelar Strata – I atau S1 pada Fakultas


Komputer Universitas Esa Unggul
2. Ingin menggunakan aplikasi ini untuk kepentingan user ataupun
diri sendiri.
3. Untuk membuktikan serta menerapkan bahwa Metode RSA dapat
digunakan dalam melakukan pengiriman pesan ataupun
penerimaan pesan di platform android.
4

4. Sebagai salah satu syarat untuk dapat mengikuti sidang tugas


akhir.

Adapun manfaat yang dapat diperoleh penulis dalam pembuatan aplikasi ini
meliputi :

1. Penulis dapat belajar bahasa android dan mampu untuk


membuat file APK agar dapat diimplementasikan ke android.
2. Penulis dapat tahu pengertian dan cara penggunaan dari ilmu
kriptografi
3. Penulis tahu bagaimana cara membuat aplikasi SMS di
bahasa android
4. Penulis dapat mengirimkan pesan yang bersifat rahasia ataupun
umum tanpa khawatir akan dibaca oleh pihak ketiga
seperti hacker.
5. Dapat memahami dan mengetahui keuntungan serta kerugian
dalam menerapkan metode RSA pada aplikasi SMS
6. Selain mengenal metode RSA , penulis juga dapat mengetahui
metode – metode lain serta jenis dari konsep kriptografi
7. Penulis dapat merasakan bagaimana mengerjakan suatu
pembuatan aplikasi yang bersifat deadline
8. Penulis mampu beradaptasi dengan software eclipse galileo dalam
pembuatan aplikasi ini.

1.4 Ruang Lingkup Masalah

Ruang lingkup masalah dalam penyusunan Tugas Akhir ini adalah sebagai
berikut :
5

1. Proses pembuatan aplikasi digunakan untuk mengirimkan pesan


yang sudah disandikan dan orang yang menerima pesan
melakukan proses penjermahan pesan sehingga dapat dibaca.

2 Proses pembuatan aplikasi ini hanya digunakan untuk


mengirimkan teks / pesan dan tidak menambah fitur seperti proses
menyandikan file gambar ataupun musik.

3 Proses pembuatan aplikasi ini selain digunakan dalam


mengamankan pesan , tetapi digunakan juga untuk membuktikan
bahwa RSA dapat diterapkan di aplikasi SMS.

1.5 Metode Penelitian

Metode penelitian dalam membuat Tugas Akhir ini , yakni sebagai berikut :

1 Kerangka Berfikir

Pemikiran pembuatan aplikasi ini yaitu bagaimana pengirim dan


penerima pesan dapat mengirimkan pesan secara rahasia tanpa
khawatir disadap oleh pihak ketiga.

2 Kerangka Penelitian

Penelitian yang pertama dilakukan adalah mencari tahu metode


kriptografi apa yang sangat sesuai dalam aplikasi SMS , membuat
aplikasi , membuat laporan tertulis dari aplikasi yang dibuat ,
mengajukan sidang akhir di Universitas Esa Unggul.
6

3 Populasi dan Sample

Target yang dicapai adalah membuktikan bahwa metode RSA


dapat diterapkan dalam aktifitas SMS serta sample yang
digunakan adalah dua buah selular android yang dimana selular 1
untuk mengirim pesan dan selular 2 untuk menerima pesan.

4 Pengumpulan Data

Pengumpulan data atau sumber pembelajaran lebih banyak


diambil di website ataupun jurnal kriptografi dari Universitas lain.

5 Metode Pengembangan

Metode pengembangan yang akan digunakan adalah metode


prototype yang dikarenakan metode ini sangat cocok untuk
aplikasi ini karena lebih memprioriaskan input dan output pada
sebuah aplikasi , metode yang juga sering digunakan untuk
meningkatkan kepuasan user akan aplikasi dan karena aplikasi ini
berskala kecil

6. Sistematika Penulisan

Sistematika penulisan laporan Tugas Akhir ini dibagi menjadi 5


bab , antara lain :

BAB 1 PENDAHULUAN

Membahas Latar belakang , perumusan masalah ,


tujuan dan manfaat , Ruang lingkup masalah dan
metode penelitian.
7

BAB II LANDASAN TEORI

Membahas mengenai kerangka teori dan tinjauan


pustaka, Kerangka teori berisi kerangka
pemikiran pembuatan aplikasi serta tinjauan
pustaka yang merupakan referensi dan sumber
informasi pembelajaran yang terkait dengan
proses pembuatan aplikasi.

BAB III METODOLOGI PENELITIAN

Membahas mengenai metode pengembangan


yang akan digunakan dalam pembuatan aplikasi ,
waktu dan proses pembuatan aplikasi

BAB IV ANALISIS DAN PEMBAHASAN

Membahas mengenai tampilan hasil aplikasi yang


sudah dibuat , hasil kode program aplikasi yang
sudah dibuat dan langkah – langkah proses
berjalannya aplikasi.

BAB V KESIMPULAN DAN SARAN

Membahas mengenai kesimpulan yang diperoleh


dari hasil serta pembuatan aplikasi ini dan saran –
saran mengenai apa saja yang harus ditambahi
fitur – fitur jika ada mahasiswa junior yang ingin
mengambil topik / judul Tugas Akhir yang sama
dengan yang saya buat.
8

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).

Menurut catatan sejarah, kriptografi sudah digunakan oleh bangsa


Mesir sejak 4000 tahun yang lalu oleh raja-raja Mesir pada saat perang
untuk mengirimkan pesan rahasia pada panglima perangnya melalui kurir-
kurirnya. Orang yang melakukan penyandian ini disebut Cryptographer,
sedangkan orang yang mendalami ilmu dan seni dalam membuka atau
memecahkan suatu algoritma kriptografi tanpa harus mengetahui kuncinya
disebut kriptoanalis.

8
9

Seiring dengan perkembangan teknologi, algoritma kriptografi pun


mulai berubah menuju arah algoritma kriptografi yang lebih rumit dan
kompleks. Kriptografi mau tidak mau harus diakui mempunyai peranan
yang paling penting dalam peperangan sehingga algoritma kriptografi
berkembang cukup pesat pada saat perang dunia I dan perang dunia ke II.
Menurut catatan sejarah, terdapat beberapa algoritma kriptografi yang
pernah digunakan dalam peperangan, diantaranya adalah ADFVGX yang
dipakai oleh Jerman pada perang dunia I, Sigaba/M-134 yang digunakan
oleh Amerika Serikat pada perang dunia II, Typex oleh Inggris , dan Purple
oleh Jepang. Selain itu jerman juga mempunyai mesin legendaris yang
dipakai untuk memecahkan sandi yang dikirim oleh pihak musuh dalamn
peperangan yaitu, Enigma.

Algoritma kriptografi yang baik tidak ditentukan oleh kerumitan dalam


mengelolah data atau pesan yang akan disampaikan. Yang penting,
algoritma tersebut memiliki 4 persyaratan berikut:

1. Kerahasiaan. Pesan (plaintext) hanya dapat dibaca oleh dua


pihak kewenangan.
2. Autentifikasi. Pengirim pesan harus dapat diindentifikasi
dengan pasti, penyusup harus dipastikan tidak bisa berpura –
pura menjadi orang lain.
3. Integritas. Penerima Pesan harus dapat memastikan bahwa
pesan yang dia terima tidak dimodifikasi ketika dalam
melakukan proses transmisi data.
4. Non – Repudiation. Pengirim pesan harus tidak bisa
menyangkal pesan yang dia kirim.

Kriptografi pada dasarnya terdiri dari dua proses, yaitu proses


enkripsi dan proses dekripsi. Proses enkripsi adalah proses penyandian
10

pesan terbuka menjadi pesan rahasia (ciphertext). Ciphertext inilah yang


nantinya akan dikirimkan melalui saluran komunikasi terbuka. Pada saat
ciphertext diterima oleh penerima pesan, maka pesan rahasia tersebut
diubah lagi menjadi pesan terbuka melalui proses dekripsi sehingga pesan
tadi dapat dibaca kembali oleh penerima pesan.

Menurut (Rhee , 1994 ) secara umum, proses enkripsi dan


dekripsi dapat digambarkan sebagai berikut :

Gambar 2.1 proses enkripsi dan dekripsi

Dalam sistem komputer, pesan terbuka (plaintext) diberi lambang


M, yang merupakan singkatan dari message. Plaintext ini dapat berupa
tulisan, foto, atau video yang berbentuk data biner. Plaintext inilah yan
nantinya akan dienkripsi menjadi pesan rahasia atau ciphertext yang
dilambangkan dengan C (ciphertext).
Secara matematis, fungsi enkripsi ini dinotasikan dengan:

E(M) = C

Sedangkan fungsi dekripsi adalah proses pembalikan dari


ciphertext menjadi plaintext kembali,secara matematis dinotasikan sebagai
berikut:
11

D(C) = M
D(E(M)) = M

2.1.1 Panjang Kunci


Keamanan dari sebuah teknik menyandian tergantung dari dua
hal: algoritma penyandian dan panjang kunci (key). Algoritma sangat
menentukan kekuatan dari sebuah teknik penyandian, tetapi panjang kunci
juga tidak kalah penting dalam menentukan kekuatan sebuah teknik
penyandian.

Sebagai contoh, apabila seorang kriptoanalis mengetahui


algoritma yang dipakai untuk melakukan teknik penyandian terhadap suatu
pesan, maka kriptoanalis tersebut harus mendapatkan kunci yang dipakai
terlebih dahulu sebelum dapat melakukan dekripsi terhadap semua
ciphertext yang dia punya. Satu-satunya cara untuk mendapatkan kunci
yang dipakai adalah dengan cara mencoba semua variasi kunci yang ada.
Teknik serangan ini sering dikenal dengan nama Brute force.

Adalah mudah menghitung banyaknya variasi kunci yang ada. Apabila


panjang kunci adalah 8 bit, maka 28 atau 256 kemungkinan kunci yang
dapat dicoba. Dari 256 percobaan ini, peluang untuk mendapatkan kunci
yang benar adalah 50% setelah melalui setengah usaha percobaan. Bila
panjang kunci 56 bit, maka ada 256 kemungkinan variasi kunci. Dengan
menganggap sebuah superkomputer dapat mencoba satu juta kunci per
detik, maka diperkirakan sekitar 2285 tahun untuk menemukan kunci yang
benar. Bila menggunakan panjang kunci 64 bit, maka dengan
superkomputer yang sama akan membutuhkan 585 ribu tahun. Dengan
jangka waktu yang lama ini, maka dapat dipastikan bahwa pesan yang
disandikan tersebut tidak mempunyai arti lagi apabila telah berhasil
dilakukan dekripsi.
12

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.

2.1.2 Kriptografi Kunci Rahasia dan Kunci Publik

Menurut (Rosidi , 2004 ) pada dasarnya terdapat dua jenis


algoritma kriptografi berdasarkan kunci yang digunakan. Yang pertama
adalah kriptografi dengan mengunakan secret key dan yang kedua adalah
kriptografi yang menggunakan public key. Public key menggunakan dua
kunci yang berbeda dimana satu kunci digunakan untuk melakukan enkripsi
dan kunci yang lain digunakan untuk melakukan dekripsi .

2.1.2.1 Kriptografi Kunci Rahasia

Kriptografi kunci rahasia atau secret key adalah kriptografi yang


hanya melibatkan satu kunci dalam satu proses enkripsi dan dekripsi. Proses
dekripsi dalam kriptografi secret key ini adalah kebalikan dari proses
enkripsi.
13

Gambar 2.2 kriptografi simetris

Menurut (Hashimi & Komatineni , 2009 ) kriptografi secret key


seringkali disebut sebagai kriptografi konvensional atau kriptografi simetris
(Symmetric Cryptography) dimana proses dekripsi adalah kebalikan dari
proses enkripsi dan menggunakan kunci yang sama .

Kriptografi simetris dapat dibagi menjadi dua, yaitu penyandian blok


(block cipher) dan penyandian alir (stream cipher) . Penyandian blok
bekerja pada suatu data yang terkelompok menjadi blok-blok data atau
kelompok data dengan panjang data yang telah ditentukan. Pada penyandian
blok, data yang masuk akan dipecah-pecah menjadi blok data yang telah
ditentukan ukurannya. Penyandian alir bekerja pada suatu data bit tunggal
atau terkadang dalam satu byte. Jadi format data yang mengalami proses
enkripsi dan dekripsi adalah berupa aliran bit-bit data.

Algoritma yang ada saat ini kebanyakan bekerja untuk penyandian


blok karena kebanyakan proses pengiriman data pada saat ini menggunakan
blok-blok data yang telah ditentukan ukurannya untuk kemudian dikirim
melalui saluran komunikasi.
14

2.1.2.2 Kriptografi Kunci Publik

Kriptografi public key sering disebut dengan kriptografi asimetris.


Berbeda dengan kriptografi secret key, kunci yang digunakan pada proses
enkripsi dan proses dekripsi pada kriptografi public key ini berbeda satu
sama lain. Jadi dalam kriptografi public key, suatu key generator akan
menghasilkan dua kunci berbeda dimana satu kunci digunakan untuk
melakukan proses enkripsi dan kunci yang lain digunakan untuk melakukan
proses dekripsi.

Kunci yang digunakan untuk melakukan enkripsi akan dipublikasikan


kepada umum untuk dipergunakan secara bebas. Oleh sebab itu, kunci yang
digunakan untuk melakukan enkripsi disebut juga sebagai public key.

Sedangkan kunci yang digunakan untuk melakukan dekripsi akan


disimpan oleh pembuat kunci dan tidak akan dipublikasikan kepada umum.
Kunci untuk melakukan dekripsi ini disebut private key.

Gambar 2.3 kriptografi asimetris


15

Dengan cara demikian, semua orang yang akan mengirimkan


pesan kepada pembuat kunci dapat melakukan proses enkripsi terhadap
pesan tersebut, sedangkan proses dekripsi hanya dilakukan oleh pembuat
atau pemilik kunci dekripsi. Dalam kenyataannya, kriptografi asimetris ini
dipakai dalam suatu layanan untuk mengakses suatu server.

2.1.3 Algoritma RSA

Menurut (Stallings , 1995) dari sekian banyak metode kriptografi


asimetris yang pernah dibuat, algoritma yang paling popular adalah
algoritma RSA. Algoritma RSA diciptakan oleh 3 orang peneliti dari MIT
(Masschussets Institute of Technology) pada tahun 1976, yaitu Ron
(R)ivest, Adi (S)hamir dan Leonard (A)dleman. Keamanan algoritma
RSA terletak pada sulitnya menfaktorkan bilangan yang besar menjadi
faktor – faktor prima. Penfaktoran dilakukan untuk memperoleh kunci
private. Selama penfaktoran bilangan besar menjadi bilangan prima belum
tentu menemukan algoritma yang benar, maka selama itu pula keamanan
algoritma RSA terjamin.

Algoritma RSA memiliki besaran seperti berikut :


1. p dan q bilangan prima (rahasia)
2. n = p.q (tidak rahasia)
3. Φ(n) = (p-1)(q-1) (rahasia)
4. e = kunci enkripsi (tidak rahasia)
5. d = kunci dekripsi (rahasia)
6. m = plaintext (rahasia)
7. c = chipertext (tidak rahasia)
16

2.1.3.1 Perumusan Algoritma RSA

Algoritma RSA didasarkan pada teorema Euler yang


menyatakan bahwa

a Φ(n) = 1 mod n (I)

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.

Berdasarkan sifat ak = ab (mod n) untuk k bilangan bulat ≥ 1,


maka persamaan (I) dapat ditulis menjadi

aΦk(n) = 1k (mod n)
atau
aΦk(n) = 1 (mod n) (II)

Bila a diganti m,maka persamaan (II) dapat ditulis menjadi

mΦk(n) = 1 (mod n) (III)

Berdasarkan sifat ac = bc (mod n) maka bila persamaan (III)


dikali dengan m, maka menjadi
17

mΦk(n)+1 = m (mod n) (IV)

yang dalam hal ini m relatif prima dengan n

Misalkan e dan d dipilih sedemikian sehingga

e . d = 1 (mod Φ(n) ) (V)


atau
e . d = kΦ(n) + 1 (V)

Masukkan (V) ke dalam persamaan (VI) menjadi

me . d = m (mod n) (VI)

Persamaan (VI) dapat ditulis kembali menjadi

(me)d = m (mod n) (VII)

Yang artinya perpangkatan m dengan e diikuti dengan


perpangkatan dengan d yang menghasilkan kembali m semula. Berdasarkan
persamaan (VII), maka enkripsi dan dekripsi dirumuskan sebagai berikut

Ee (m) = c = me mod n (VIII)

Dd(c) = m = cd mod n (IX)


18

Karena e . d = d . e maka enkripsi dilakukan dengan dekripsi


ekivalen dengan dekripsi diikuti enkripsi

Dd(Ee(m)) = Ee (Dd(m)) = md mod n (X)

Oleh karena md mod n = (m + jn)d mod n untuk sembarang bilangan


bulat j, maka setiap plaintext m, m + n, m + 2n, …, menghasilkan
chipertext yang sama, Dengan kata lain, transformasinya dari banyak ke
satu, maka m harus dibatasi dalam himpunan {0, 1, 2, … n-1} sehingga
enkripsi dan dekripsi tetap benar seperti persamaan (VIII) dan (IX).

2.1.3.2 Algoritma Membangkitkan Pasangan Kunci


Berikut cara algoritma pembangkitan pasangan kunci adalah
sebagai berikut :
1. Pilih dua bilangan prima sembarang, p dan q secara
acak. p ≠ q. Bilangan ini harus cukup besar (minimal
100 digit).
2. Hitung n = p . q (sebaiknya p ≠ q, sebab jika p = q
maka n = p2 sehingga, p dapat diperoleh dengan
menarik akar pangkat dua dari n).
3. Hitung Φ(n) = (p - 1)(q - 1)
4. Pilih kunci public key , e yang relatif prima dengan
Φ(n).
5. Bangkitkan kunci private dengan menggunakan
persamaan (V), yaitu e . d = 1 (mod Φ(n)) ekivalen
dengan e . d = k Φ(n)+1 , sehingga secara sederhana d
dapat dihitung dengan

d = 1 + k Φ(n) (XI)
19

Hasil dari algoritma di atas :


- Kunci public adalah pasangan (e,n)
- Kunci private adalah pasangan (d,n)

Catatan : n tidak bersifat rahasia, sebab ia diperlukan pada


perhitungan enkripsi / dekripsi.

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

Alice memilih public e = 79, karena 79 relatif prima dengan


3220. Alice mengumumkan nilai e dan n kepada public, selanjutnya Alice
menghitung kunci dekripsi d seperti dituliskan pada langkah intruksi 5
dengan menggunakan persamaan (XI)

d = 1 + k Φ(n)

d = 1 + (k x 3220)
79
20

Dengan mencoba nilai – nilai k = 1, 2, 3, … diperoleh nilai d yang


bulat adalah 1019. Ini adalah kunci private untuk mendekripsikan pesan.
Kunci private ini harus dirahasiakan oleh Alice. Jadi perhitungan kunci ini
menghasilkan pasangan kunci private dan public :
- Kunci public : (e = 79 , n = 3337)
- Kunci private: (d=1019, n = 3337)

2.1.3.3 Algoritma Enkripsi / Dekripsi


Enkripsi
1. Ambil kunci public menerima pesan, e , dan modulus
n.
2. Nyatakan plaintext m menjadi blok – blok m1, m2 , …
sedemikian sehingga setiap blok mempresentasikan
nilai di dalam selang [0, n - 1].
3. Setiap blok m dienkripsi menjadi blok ci dengan rumus
ci = mie mod n.

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

atau dalam sistem pengkodean ASCII adalah


21

7265827332737873.

Bob memecah m menjadi blok yang lebih kecil, misalnya m


dipecah menjadi enam blok yang berukuran 3 digit :
m1 =726 m4 = 273
m2= 582 m5= 783
m3=733 m6= 003

Nilai – nilai mi ini masih terletak dalam selang [0, 3337 - 1]


agar transformasi menjadi satu ke satu. Bob mengetahui
kunci public Alice adalah e = 79 dan n = 3337. Alice dapat
mengenkripsikan setiap blok plaintext sebagai berikut :
C1 =72679 mod 3337 = 215;
C2 = 58979 mod 3337 = 776;
C3 = 73379 mod 3337 =1743;
C4 = 27379 mod 3337 = 933;
C5 = 78379 mod 3337 = 1731;
C6 = 00379 mod 3337 = 158;

Jadi chipertext yang dihasilkan adalah


c = 215 776 1743 933 1731 158

Dekripsi dilakukan dengan menggunakan kunci private


d = 1019

Blok – blok chipertext didekripsikan sebagai berikut :


m1 = 2151019 mod 3337 = 726
m2= 7761019 mod 3337 = 589
m3 = 17431019 mod 3337 = 733
22

m4 = 9331019 mod 3337 = 273


m5 = 17311019 mod 3337 = 783
m6 = 1581019 mod 3337 = 003

Blok chippertext diubah menjadi seperti semula menjadi


plaintext dan mendapat hasil

m = 7265827332737873.

Yang dalam pengkodean ASCII menjadi

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.

Android dikembangkan oleh Google bersama Open Handset


Allience (OHA) yaitu aliansi perangkat selular terbuka yang terdiri dari 47
perusahaan Hardware, Software dan perusahaan telekomunikasi ditujukan
untuk mengembangkan standar terbuka bagi perangkat selular.
23

2.2.2 Sejarah dan Perkembangan Android

Menurut (Chritof , 2005) pada mulanya terdapat berbagai macam


sistem operasi pada perangkat selular, diantaranya sistem operasi Symbian,
Microsoft Windsos Mobile, Mobile Linux, iPhone, dan sistem operasi
lainnya. Namun diantara sistem operasi yang ada belum mendukung standar
dan penerbitan API yang dapat dimanfaatkan secara keseluruhan dan
dengan biaya yang murah. Kemudian Google ikut berkecimpung
didalamnya dengan platform Android, yang menjanjikan keterbukaan,
keterjangkauan, open source, dan framework berkualitas.

Pada tahun 2005, Google mengakuisisi perusahaan Android Inc.


untuk memulai pengembangan platform Android. Dimana terlibat dalam
pengembangan ini Andy Rubin, Rich Miner, Nick Sears, dan Chris White.
Pada pertengahan 2007 sekelompok pemimpin industri bersama-sama
membentuk aliansi perangkat selular terbuka, Open Handset Alliance
(OHA). Bagian dari tujuan aliansi ini adalah berinovasi dengan cepat dan
menanggapi kebutuhan konsumen dengan lebih baik, dengan produk
awalnya adalah platform Android. Dimana Android dirancang untuk
melayani kebutuhan operator telekomunikasi, manufaktur handset, dan
pengembang aplikasi. OHA berkomitmen untuk membuat Android open
source dengan lisensi Apache versi 2.0. .

Android pertama kali diluncurkan pada 5 November 2007, dan


smartphone pertama yang menggunakan sistem operasi Android
dikeluarkan oleh T-Mobile dengan sebutan G1 pada bulan September 2008.
Hingga saat ini Android telah merilis beberapa versi Android untuk
menyempurnakan versi sebelumnya. Selain berdasarkan penomoran, pada
24

setiap versi Android terdapat kode nama berdasarkan nama-nama kue.


Hingga saat ini sudah terdapat beberapa versi yang telah diluncurkan.

2.2.3 Anatomi Android


Dalam paket sistem operasi Android tediri dari beberapa unsur
seperti tampak pada gambar 2.3. Secara sederhana arsitektur Android
merupakan sebuah kernel Linux dan sekumpulan pustaka C / C++ dalam
suatu framework yang menyediakan dan mengatur alur proses aplikasi.[9]

2.3 SMS (Short Messages Services)

2.3.1 Pengertian SMS(Short Messages Services)

Menurut Rosidi (2004 : 1) Short Message Service (SMS)


merupakan sebuah layanan yang banyak diaplikasikan pada sistem
komunikasi tanpa kabel, memungkinkan dilakukannya pengiriman pesan
dalam bentuk alphanumeric antara terminal pelanggan dengan sistem
eksternal seperti email, paging, voice mail, dan lain-lain.

SMS (Short Message Service) adalah sebuah standar teknologi


yang digunakan untuk pengiriman pesan teks pada telepon seluler mulai
generasi kedua (2G). (Kamus Lengkap jaringan komputer : 470).

Mekanisme utama dalam sistem SMS yang dilakukan adalah


melakukan pengiriman short message dari satu terminal pelanggan ke
terminal yang lain. Hal ini berkat adanya sebuah entitas dalam sistem SMS
yang bernama Short Message Service Center (SMSC), disebut juga
25

Message Center (MC). SMSC merupakan sebuah perangkat yang


melakukan tugas store and
forward trafik short message. Di dalamnya termasuk penentuan atau
pencarian rute tujuan akhir dari short message.

Beberapa karakteristik SMS adalah:


1. Sebuah pesan terdiri atas 160 karakter yang
mencangkup huruf atau angka. Juga dapat mendukung
pesan non-text seperti format binary.

2. Prinsip kerjanya adalah menyimpan dan menyampaikan


pesan(store and forward message). Dengan kata lain,
pesan tidak langsung dikirimkan ke penerima melainkan
disimpan dahulu di SMS – Centre.

3. Memiliki ciri - ciri konfirmasi pengiriman pesan, yaitu


pesan yang dikirimkan tidak secara sederhana
dikirimkan dan dipercayai akan disampaikan dengan
selamat, namun pengirim pesan dapat pula menerima
pesan balik yang memberitahukan apakah pesan telah
terkirim atau gagal.

2.4 Metode Pengembangan Prototype

Menurut (Pressman , 2005) dalam metode ini menerapkan sistem yang


dimana saat pengguna menginginkan fitu –fitur dalam pembuatan perangkat
lunak secara objektif , pengguna memrlukan gambaran dari proses input ,
proses dan output. Di waktu yang sama pembuat perangkat lunak harus
dapat memastikan algoritma apa yang lebih efisien dalam proses
perancangan perangkat lunak dari segi perancangan design , sistem operasi
26

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.

Prototype dapat membuat pengguna untuk mengerti proses dari pengerjaan


perangkat lunak serta tahap – tahap yang jelas. Tahap dari proses prototype
ini dapat dilihat di gambar yang terdapat di bawah ini , yaitu :

Gambar 2.4 Tahap Metode Prototype

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.

[11]Metode prototype dapat disebut sebagai “sistem pertama” dari


perkataan Brook yang merupakan proses perancangan yang ideal antara
hubungan pengguna dan pembuat perangkat lunak. Pengguna dapa
merasakan proses dari pengerjaan perangkat lunak dan pembuat perangkat
lunak dengan cepat membangun perangka lunak.

Masalah yang terjadi saat metode prototype ini adalah :

1. Management software development yang tergolong kurang yang


dikarenakan saat pengguna menemukan adanya sistem yang tdak
sesuai dengan kualitas pengguna , maka pembuat perangkat lunak
harus membangun ulang sistem yang dianggap kurang oleh
pengguna dan akan lebih banyak aktifitas “maintenance” disbanding
jalannya proses sistem.

2. Pembuat perangkat lunak terkadang membuat perangkat lunak


sesuai dengan rancangan modeling dan dengan bahasa
pemogramanan dan operasi sistem yang digunakan dengan
28

sederhana , sehingga membuat pembuat perangkat lunak merasa


nyaman akan prose situ dan lupa akanmengapa mereka dipilih oleh
pengguna dalam pembuatan perangkat lunak.

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

3.1 Kerangka Pemikiran

Berikut tahap – tahap awal dalam mengerjakan laporan Tugas Akhir saya :

start

Mencari metode
Proses testing bug
kriptografi untuk
aplikasi
aplikasi SMS

Memahami metode Membuat file apk


kriptografi RSA dari instalasi

Menentukan
Instal aplikasi ke
software yang
selular
digunakan

Melakukan
Membut laporan TA end
pembuatan aplikasi

Gambar 3.1 Tahap awal pengerjaan

29
30

3.2 Kerangka Penelitian

Penelitian yang pertama kali akan dilakukan adalah memahami cara kerja
dari metode RSA itu sendiri. Berikut Langkah penelitan yang akan diteliti :

3.2.1 Cara Kerja RSA

Proses pembuatan kunci dibuat dalam jumlah dua kunci yang


berbeda dimana kunci pertama disebut seagai public key yang
berfungsi menyandikan pesan / data sebelum dikirim dan kunci
kedua adalah private key yang berfungsi sebagai menterjemahkan
pesan yang sudah disandikan menjadi pesan yang dapat dibaca
oleh manusia.

Proses pembuatan dua buah kunci ini digunakan dengan operasi


pendaktoran FPB (bilangan pembagi terbesar) yang dimana dua
buah kunci dicetak dalam format numerik / angka. Semakin
panjang bit dalam proses RSA , semakin panjang pula panjang
dua buah kunci.

3.2.2 Wilayah Penelitian

Wilayah penelitian dari aplikasi ini adalah bagi pengguna selular


berbasis android.

3.2.3 Manfaat Penelitian

Membuktikan bahwa metode RSA dapat diimplementasikan


dalam mengirim ataupun menerima pesan selular berbasis
android.
31

3.3 Populasi / Sample

Populasi / proses pengujian aplikasi SMS ini diuji dengan dua buah selular
berbasis android yang memiliki instalan /aplikasi SMS Kriptografi ini.

3.4 Metode Pengembangan

Metode pengembangan yang diambil dalam aplikasi ini adalah prototype


yang dikarenakan aplikasi ini merupakan aplikasi skala kecil , bergantung
pada user , dapat ditambahkan fitur – fitur aplikasi dan berfokus untuk
meningkatkan kepuasan pengguna aplikasi ini dalam mengirim pesan.

Berikut Tahap – tahap pembuatan aplikasi SMS Kriptografi dengan metode


pengembangan prototype :

3.4.1 Pengumpulan Kebutuhan Aplikasi

Proses kebutuhan aplikasi ini meliputi , pertama – tama pengguna1 dan


pengguna2 akan menginstalasi aplikasi SMS Kriptografi ini. Setelah itu
pengguna 1 menmbuka aplikasi tersebut dan memilih menu “KIRIM SMS”,
Pengguna 1 menginputkan pesan dan nomor tujuan dari pengguna2 dengan
menekan tombol “SANDIKAN”, Saat ditekan , maka sistem otomatis akan
menampilkan isi pesan yang sudah disandikan serta memperlihatkan dua
buah kunci yaitu Kunci D dan Kunci N, dan pengguna1 mengirimkan dua
buah kunci dengan tombol “KIRIM KUNCI”.

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

dimengerti oleh pengguna2 , dan yang kedua adalah pengguna2 melihat


pesan di aplikasi SMS Kriptogrfi tersebut dengan memilih menu “LIHAT
PESAN” dan melihat isi pesan serta menginputkan Kunci E dan Kunci N
untuk menterjemahkan pesan yang disandikan menjadi pesan yang dapat
dibaca oleh manusia.

Berikut proses aplikasi secara umum dalam bentuk flowchart : : (gambar


berada di halaman berikutnya)
33

Selain proses aplikasi secara umum , terdapat juga proses aplikasi sistem
dalam menjalankan aplikasinya secara lebih detail yaitu : (gambar berada di
halaman berikutnya)
34

start

Install aplikasi di Tekan tombol


android sandikan

Sistem membuat
Buka aplikasi sms
Kunci D , kunci N
kriptografi RSA
(numerik)

no Tampilkan isi pesan Kirim kunci D , N


Lihat Pesan Kirim SMS
sandi dan kunci D , dengan menekan
(Menu) (Menu)
N tombol kirim kunci

Masukkan no tujuan Pesan dikirim ke End pengiriman


Tampilkan list pesan
dan isi pesan dua sisi kunci

SMS dikirim di inbox


Klik salah satu If no tujuan || bawaan android dan
pesan isi pesan == null inbox dari aplikasi
sms kripto

End proses yes


menterjemahkan
pesan Ketiikan kunci D , E Notiffcation
End proses
di textbox yang “masukkan no telp
pengiriman pesan
disediakan dan isi pesan”

Pesan sudah dapat


If Kunci D || E !=
terbaca oleh tdk
kunci dari sistem
manusia

ya

Pesan tidak dapat


diterjemahkan

Gambar 3.3 Proses Aplikasi secara detail


35

3.3.2 Proses Pembangunan Prototype

Proses tampilan rancangan dari aplikasi SMS Kriptografi ini


dari segi input dan output adalah

SMS Kriptografi RSA

LOGO / Banner SMS KRIPTOGRAFI


RSA

KIRIM SMS

ISI PESAN

@Copyright Verdy YAnto

Gambar 3.4 Menu Awal Aplikasi Kriptografi


36

Proses pengiriman pesan yang sudah disandikan :

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

Kirim Kunci D dan Kunci N

@Copyright Verdy YAnto

Gambar 3.5 Kirim SMS


37

Tampilan dari menu List Pesan :

LIST PESAN

UPDATE SMS
(BUKA LIST SMS)

From : 086735172

Text :
46475768179739164610370160461072071
07330103801802713713018027012018208

@Copyright Verdy YAnto

Gambar 3.6 List Pesan


38

Tampilan dari isi pesan :

ISI PESAN
No Pengirim
086735172
Isi Pesan

Text :
464757681797391646103701604610720710
7330103801802713713018027012018208

Masukkan Kunci D

786937287392

Masukkan Kunci N

3273292379472

Terjemakan

Ini Verdy!

@Copyright Verdy YAnto

Gambar 3.7 Isi Pesan


39

3.3.3 Evaluasi Prototype

Tahap ini menjelaskan apakah kebutuhan aplikasi SMS Kriptografi RSA ini
sudah sesuai dengan keinginan pengguna :

Kebutuhan Sesuai Kebutuhan


Pengguna Android
Proses Pengiriman SMS dengan
menggunakan dua sisi (inbox sms SESUAI
dari bawaan android dan inbox dari
aplikasi)

Proses cara kerja metode RSA


dalam mengirim atau menerima SESUAI
pesan yang efektif dan kuat
pertahanan terhadap hacker

Proses pembuatan kunci D , Kunci


E , dan Kunci N sudah cukup aman SESUAI
dalam mengirimkan pesan

Aplikasi mudah digunakan oleh


pengguna SESUAI

Tabel 3.1 Evaluasi Prototype

Saat Tahap ini sudah disetujui maka akan dilanjutkan ke tahap pengkodean
sistem .
40

3.3.4 Tahap Pengkodean Sistem

Dalam tahap pengkodean , saya menggunakan perangkat lunak eclipse


Galileo untuk membangun aplikasi berbasis android serta android SDK dan
android ADT 1.8.0 sebagai emulator android. Dengan tipe version ROM
android yaitu dari 2.3.1 ke atas.

Berikut Alur flowchart pembuatan function dan class yang akan digunakan

Class Tampilan awal


Class Isi Pesan
Panggil kirimSMS()
Panggil decrypt()
Panggil ListPesan()

Class Kirim SMS


generateKey()
Class dalam pembuatan Class List Pesan
KirimKey()
aplikasi SMS Kriptografi ListSMS()
kirimChiper()
Panggil encrypt()

Class RSA
Encrypt()
Decrypt()

Gambar 3.8 flowchart function dan class

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

tidak Pencarian euler n(phi) ya If D != prima


(p*q)(p*-1)(-1*q)(+1)

Kunci public = (E,N)


If FPB(E,N) = 1 Kunci private = (D,N)

Encrypt Decrypt
modPow(E, N) modPow(D, N)

Gambar 3.9flowchart metode RSA dalam Aplikasi SMS


Kriptografi
42

3.3.5 Tahap Pengujian Sistem

Tahap pengujian sistem dilakukan pertama kali di emulator android yang


sudah disediakan dari eclipse Galileo dan setelah itu dibuat file apk dari
aplikasi dan diimplementasikan ke selular android apakah berjalan sesuai
dengan yang ada di emulator.

3.3.6 Evaluasi Sistem Aplikasi

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.

3.3.7 Penggunaan Aplikasi

Aplikasi siap untuk dijadikan sebagai pengajuan persyaratan kelulusan di


Fakultas Ilmu Komputer pada jurusan Teknik Informatika di Universitas
Esa Unggul dalam memperoleh gelar strata – I (S-1).
43

BAB IV

ANALISIS DAN PEMBAHASAN

4.1 Pembahasan Aplikasi SMS Kriptografi android dengan metode


RSA

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 :

1. Nama Aplikasi : Skipsi_SMS


2. Android_version : 2.3 ke atas dapat menggunakan aplikasi ini.
3. Jumlah emulator yang digunakan dalam tahap ini adalah dua
emulator yang meliputi emulator pertama dengan nomor 5554 dan
emulatoe kedua dengan nomor 5556
4. Nama Package : com.willis.skripsiku
5. Aplikasi diuji di selular android : Samsung Galaxy Young

Dalam proses aplikasi ini terdapat tiga proses , meliputi :

1. Proses mengirimkan pesan sandi dan kunci


2. Proses pembuatan inbox yang dibuat dalam bentuk list atau array
3. Proses melakukan persandian pesan dan menterjemahkan pesan

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

4.1.1 Tampilan Awal Aplikasi

Gambar 4.1 Tampilan Awal

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 :

1. BUAT SMS => pilihan ini merupakan awal mula dalam


melakukan proses pengiriman pesan dari pesan yang disandikan
serta mengirimkan kunci D dan kunci N. (kunci D dan kunci N
berfungsi untuk menterjemahkan pesan yang disandikan menjadi
pesan yang dapat dibaca oleh manusia).
45

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.

Adapun koding java tampilan awal ini ditempatkan di CLASS RSA_SMS()


yang isinya meliputi :

public class RSA_SMS extends Activity {


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button buat_sms = (Button)findViewById(R.id.buat_sms);
buat_sms.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {


Intent create_sms = new Intent(getBaseContext(),kirimSMS.class);
startActivity(create_sms);
}
});

final Button list_sms = (Button)findViewById(R.id.lihat_sms);


list_sms.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {


Intent list = new Intent(getBaseContext(),tempatSMS.class);
startActivity(list);
}
});
}
}

Adapun dari penjelasan koding ini meliputi :

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).

final Button buat_sms = (Button)findViewById(R.id.buat_sms);


Sintak ini mendeklarasikan tombol button “KIRIM SMS” yang nantinya
jika di klik , akan memanggil class KIRIM_SMS. Dan cara dalam
melakukan pemanggilan class yaitu dengan sintak

Intent create_sms = new Intent(getBaseContext(),kirimSMS.class);


startActivity(create_sms);

Sama halnya dengan button LIHAT_SMS. Sintak untuk memanggil class


Tempat_SMS dengan menggunakan sintak

Intent list = new Intent(getBaseContext(),tempatSMS.class);


startActivity(list);

Untuk sintak

list_sms.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

berfungi untuk menjankan kegunaan dari button.


47

Untuk proses dengan alur flowchart dapat digambarkan sebagai berikut :

start

Class RSA_SMS()

KIRIM SMS LIHAT SMS

Panggil class
Panggil class
kirim_SMS()
Tempat_SMS()

Show list Pesan


inbox

Saat pesan dipilih .


end Panggil class
isi_SMS()

Gambar 4.2 alur flowchart pemanggilan class


48

4.1.2 Tampilan BUAT SMS

Dalam tahap ini, disaat pngguna men-klik pilihan “BUAT SMS” maka
tampilan awal dari aplikasi akan memanggil class KIRIM_SMS().Tampilan
meliputi

Gambar4.3 Tampilan Kirim SMS

Adapun button kirim_sms akan berfungsi untuk mengirimkan kunci D dan


Kunci N (yang dapat disebut sebagai modulus) dan button sandikan yang
berfungsi untuk mengirim pesan yang sudah disandikan yang dimana pesan
yang sudah tersandikan akan ditampilkan di textfield chipertext.. Dalam
tampilan ini, class yang digunakan adalah class KIRIM_SMS() yang
mempunyai banyak function yaitu :
49

Class Kirim_SMS()

Function
kirim_SMS() Function main()

Gambar 4.4 Function pada class Kirim_SMS()

Dalam function kirim_sms() mempunyai fungsi yang bertugas


untuk mengirimkan pesan yang tersandikan / kunci ke alamat
yang dikirim. Berikut isi dari function ini yaitu :

public void kirimSMS(String noTelp , String pesannya)


{
String sent = "SMS_SENT";
String deliver = "SMS_DELIVERED";

PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new


Intent(sent), 0);

PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new


Intent(deliver), 0);

//ketika sms dikirim


registerReceiver(new BroadcastReceiver() {

public void onReceive(Context context, Intent intent) {


switch (getResultCode()) {
50

case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS SUDAH DIKIRIM",
Toast.LENGTH_LONG).show();
break;
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));

//ketika sms diterima


registerReceiver(new BroadcastReceiver() {

public void onReceive(Context context, Intent intent) {


switch (getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS SUDAH
DIKIRIM",Toast.LENGTH_LONG).show();
break;
51

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);


}

Dalam function kirim_sms() terdapat parameter yakni String no_telp dan


String pesannya ..atau

public void kirimSMS(String noTelp , String pesannya)

dengan menggunakan function parameter ini , maka akan memudahkan


aplikasi dalam melakukan proses pengiriman pesan dan key.

Untuk function selanjutnya merupakan function main yang bertugas sebagai


proses jalannya pengiriman pesan yang disandikan berikut juga kuncinya.

Isi koding dari function main adalah


52

public void onCreate(Bundle savedInstanceState)


{
super.onCreate(savedInstanceState);
setContentView(R.layout.sendsms);

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() {

public void onClick(View v) {

String notelp = phone_no.getText().toString().trim();


String pesan_chiper = pesan.getText().toString();
String chippp = pesan.getText().toString();

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() {

public void onClick(View v) {

String notelp = phone_no.getText().toString().trim();


String cchiper_text = pesan.getText().toString().trim();
RSAEncrypt aa = new RSAEncrypt();
RSAA bb = new RSAA(256);

BigInteger eee = bb.getE();


BigInteger ddd = bb.getD();
BigInteger Nn = bb.getN(); Proses menampilkan
kunci E , D dan N
e.setText(eee.toString());
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();
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 proses melakukan penyandian pesan , yang pertama – tama


dilakukan adalah memanggil class RSA() dengan cara menuliskan sintak

RSAA bb = new RSAA(256);

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

BigInteger hala = new BigInteger(cchiper_text.getBytes());

Dan untuk melalukan proses dekripsi , pesan yang sudah dijadikan


akan diubah kembali menjadi format text / string dengan sintak

String jajaja = new String(jaja.toByteArray());


55

Dalam proses pengiriman pesan yang sudah disandikan , maka dipanggilah


function kirim_sms 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

public class RSAA {

private BigInteger n, d, e , p , q;
private BigInteger phi;
private int bitlength = 30; Variabel
private int blocksize = 120;
private int bitlen = 256;

public RSAA(BigInteger newn, BigInteger newe) {


n = newn;
e = newe;
}
56

public RSAA(int bits) {


Random r = new Random();
p = BigInteger.probablePrime(bitlength, r); Buat kunci e,n,d
q = BigInteger.probablePrime(bitlength, r);
n = p.multiply(q);

phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
e = BigInteger.probablePrime(bitlength/2, r);

while (phi.gcd(e).compareTo(BigInteger.ONE) > 0 && e.compareTo(phi) <


0){
e.add(BigInteger.ONE);
}
d = e.modInverse(phi);
}

public synchronized BigInteger encrypt(BigInteger message , BigInteger E


, BigInteger N )
{
return message.modPow(E, N);
} Enkrip dan dekrip
}

public synchronized BigInteger decrypt(BigInteger message , BigInteger D


, BigInteger N)
{
return message.modPow(D, N);
}

public synchronized BigInteger getN() {


return n;
}
Memanggil kunci
/** Return the public key. */ agar dpt
public synchronized BigInteger getE() {
return e;
ditampilkan
}

public synchronized BigInteger getD() {


return d; }}
57

Dalam Class RSAA() mempunyai tiga tugas penting yaitu melakukan


proses pembuatan kunci dengan sintak

Random r = new Random();


p = BigInteger.probablePrime(bitlength, r);
q = BigInteger.probablePrime(bitlength, r);
n = p.multiply(q);

phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
e = BigInteger.probablePrime(bitlength/2, r);

while (phi.gcd(e).compareTo(BigInteger.ONE) > 0 && e.compareTo(phi) <


0){
e.add(BigInteger.ONE);
}
d = e.modInverse(phi);
}

Perlu diingat bahwa dalam menggunakan metode RSA sesuai algoritma ,


proses penentuan p dan q haruslah bilangan prima, saya menggunakan
angka acak / random yang digunakan untuk memudahkan pengguna agar
tidak perlu menginput p dan q secara manual , tetapi secara otomatis.
Dan tugas kedua adalah melakukan proses enkripsi dan dekripsi dengan
sintak :

public synchronized BigInteger encrypt(BigInteger message , BigInteger E


, BigInteger N )
{
return message.modPow(E, N);
}

public synchronized BigInteger decrypt(BigInteger message , BigInteger D


, BigInteger N)
{
return message.modPow(D, N);
}
58

Proses enkripsi nya dilakukan dengan fungsi parameter , dan parameter


yang digunakan adalah parameter BigInteger message , parameter
BigInteger E dan parameter BigInteger N

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

return message.modPow(E, N); // enkripsi


return message.modPow(D, N); //dekripsi

Penggunaan ModPow merupakan operasi matematka yang sangat berperan


penting dalam metode kriptografi RSA.
59

4.1.3 Tampilan LIHAT SMS

Tampilan ini mempunyai fungsi menampilkan list pesan yang ada di


bawaan inbox android yang nantinya akan digunakan untuk melakukan
proses dekripsi pesan. Tampilan dari pilihan LIHAT SMS adalah

Gambar 4.5 Tampilan Lihat SMS


60

Dalam menampilkan list pesan , maka pengguna harusnya me-klik buttin ok


yang berfungsi untuk me-update list pesan yang baru masuk. Proses alur
dalam bentuk flowchart ditampilkan sebagai berikut :

start

Class tempat_SMS()

Update list pesan

Klik pesan yang


ingdin dibaca

Panggil class
isi_sms()

end

Gambar 4.6 alur flowchart proses lihat_sms


61

Dalam tampilan lihat_sms ini , class yang termasuk dalam proses tampilan
ini adalah class Tempat_SMS() yang nantinya akan berhubungan dengan
class isi_pesan().

Pembuatan koding dari class Tempat_SMS() adalag sebagai berikut

public class tempatSMS extends Activity{

public void onCreate(Bundle savedInstanceState)


{
super.onCreate(savedInstanceState);
setContentView(R.layout.smsinbox);

final ListView list = (ListView)findViewById(R.id.sms_list);


final Button btn_key = (Button)findViewById(R.id.BtnKey);

btn_key.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {


Proses update list sms
List<String> msgs = getSMS(/*j*/);
baru
if(msgs.isEmpty())
{
msgs.add("tidak ada sms yang bisa di dekrip dengan key itu");
}

ArrayAdapter<String> smsAdapter = new


ArrayAdapter<String>(getBaseContext(),
android.R.layout.simple_list_item_1,msgs);

list.setAdapter(smsAdapter);
62

list.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView<?> arg0, View arg1,

int arg2, long arg3) {


Uri SMS_Uri = Uri.parse("content://sms/inbox");
Cursor c = null ;

try
{
c = getApplicationContext().getContentResolver().query(SMS_Uri, null,
null, null, null);
}

catch(Exception e) Proses memanggil class


{ isi_pesan() dan memindahkan
e.printStackTrace();
} data ke class isi_pesan()

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"));

Intent trans = new Intent(tempatSMS.this,isi_sms.class);


Bundle b = new Bundle();
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();
}});}});}
63

public List<String> getSMS()


{
List<String> list = new ArrayList<String>();
Uri uri = Uri.parse("content://sms/inbox");
Cursor c = null;

try{
c = getApplicationContext().getContentResolver().query(uri, null, null,
null, null);
}

catch(Exception e){ Function membuat list sms


e.printStackTrace();
}
dapat masuk di aplikasi sms

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;
}
}

Dalam proses class dari class tempat_SMS() terdapat 1 function dan 2


macam proses . function yang terdapat pada class ini berfungsi untuk
64

memanggil pesan yang berada pada inbox bawaan dari android dapat
ditampilkan di list pesan pada aplikasi SMS kriptografi ini.

Proses pemanngilan inbox ini dipanggil dengan sintak

Uri uri = Uri.parse("content://sms/inbox");

Dan proses untuk mecetak / menampilkan detail dari pesan , dipanggil


dengan sintak :

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 :

public class tempatSMS extends Activity{

public void onCreate(Bundle savedInstanceState)


{
super.onCreate(savedInstanceState);
setContentView(R.layout.smsinbox);

final ListView list = (ListView)findViewById(R.id.sms_list);


final Button btn_key = (Button)findViewById(R.id.BtnKey);

btn_key.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

List<String> msgs = getSMS(/*j*/);

if(msgs.isEmpty())
{
msgs.add("tidak ada sms yang bisa di dekrip dengan key itu");
}

ArrayAdapter<String> smsAdapter = new


ArrayAdapter<String>(getBaseContext(),
android.R.layout.simple_list_item_1,msgs);

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

menampilkan list pesan , seperti yang sudah dijelaskan sebelumnya , list


dalam proses pemanggilan pesan ini bersifat array, dan aplikasi ini
menggunakan array yang berasal bawaan dari android bukan array pada
umumnya(contoh ga[5]).

Proses tampilan sms ini berdasarkan array dapat dipanggil dengan sintak :

ArrayAdapter<String> smsAdapter = new


ArrayAdapter<String>(getBaseContext(),
android.R.layout.simple_list_item_1,msgs);

list.setAdapter(smsAdapter);

Proses yang kedua adalah membuat class TEMPAT_SMS() dapat terhubung


dengan Class isi_pesan() yang berguna untuk melakukan proses
menterjemahkan pesan yang disandikan. Berikut koding proses
pemanggilan class isi_pesan() dari class tempat_SMS()

list.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView<?> arg0, View arg1,

int arg2, long arg3) {


Uri SMS_Uri = Uri.parse("content://sms/inbox");
Cursor c = null ;

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"));

Intent trans = new Intent(tempatSMS.this,isi_sms.class);


Bundle b = new Bundle();
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();
}});}});}

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() {

public void onItemClick(AdapterView<?> arg0, View arg1,

int arg2, long arg3) {


68

dan proses untuk memanggil class isi_pesan() serta melakukan pemindahan


data pesan dari class LIHAT_SMS() ke class ISI_PESAN adalah

String alamat_no = c.getString(c.getColumnIndexOrThrow("address"));


String isi_text = c.getString(c.getColumnIndexOrThrow("body"));

Intent trans = new Intent(tempatSMS.this,isi_sms.class);


Bundle b = new Bundle();
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);

Sintak Intent dan start activity merupakan sintak yang digunakan untuk
memanggil class lain.

4.1.4 Tampilan ISI PESAN

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

Gambar 4.7 Tampilan Isi Pesan

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

Pilih menu “LIHAT


Decrypt
SMS” pada tampilan
ModPow(D,N)
awal

Update list pesan


dengan klik button
If kunci D || N Pesan dapat dibaca
ok no
salah oleh manusia
(class tempat_SMS()
dipanggil)

yes

Klik pesan yang


ingin dibaca Pesan akan tetap
(class isi_pesan() disandikan end
dipanggil)

Masukkan kunci D
dan N

Gambar 4.8 Alur Flowchart Proses Tampilan Isi Pesan

Berikut proses pembuatan koding dari tampilan isi pesan ini dengan class
ISI_PESAN()
71

public class isi_sms extends Activity {

String pesan , plain , kunci_dd , kunci_nn;


EditText pho_no , isi_pesan , kunci_d , kunci_n ;
TextView pesan_terjemah ; Variabel

public void onCreate(Bundle savedInstanceState)


{
super.onCreate(savedInstanceState);
setContentView(R.layout.isi);
Bundle b = getIntent().getExtras();

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);

String alamat = b.getString("string_addres");


String isi_text = b.getString("string_isi");

pho_no.setText(alamat);
isi_pesan.setText(isi_text);

Button terjemah = (Button)findViewById(R.id.dekkripp);


terjemah.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

pesan = isi_pesan.getText().toString();
kunci_dd = kunci_d.getText().toString();
kunci_nn = kunci_n.getText().toString();

BigInteger d_key = new BigInteger(kunci_dd);


BigInteger n_key = new BigInteger(kunci_nn); Convert string
BigInteger peesan = new BigInteger(pesan); to big integer
BigInteger fiinal;

RSAA test_akhir = new RSAA(256);


BigInteger jaka = test_akhir.decrypt(peesan, d_key, n_key); dekrip
String jakaka = new String(jaka.toByteArray());
72

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();

String alamat = b.getString("string_addres");


String isi_text = b.getString("string_isi");

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();

Dan sebelum melakukan proses deskripsi yang harus dilakukan adalah


mengubah tipe data pada kunci dan pesan yang awalnya adalah bertipe
string diubah ke tipe data BigInteger dengan sintak

BigInteger d_key = new BigInteger(kunci_dd);


BigInteger n_key = new BigInteger(kunci_nn);
BigInteger peesan = new BigInteger(pesan);

Dan barulah memanggil class RSAA() dan melakukan proses dekripsi


dengan sintak
73

RSAA test_akhir = new RSAA(256);


BigInteger jaka = test_akhir.decrypt(peesan, d_key, n_key);

Pesan yang sudah diterjemahkan dalam tipe data BigInteger perlu


dikembalikan lagi ke bentuk tipe data awal yaitu string supaya pesan dibaca
oleh manusia. Berikut sintaknya :

String jakaka = new String(jaka.toByteArray());


pesan_terjemah.setText(jakaka);

4.2 Proses Implementasi Aplikasi SMS Kriptorafi RSA

Pada tahap implementasi ini masih menggunakan emulator android , dan


pada Samsung galaxy y dan galaxy tab.

Contoh :

Pengguna a dengan no telp 5554 ingin mengrimkan pesan rahasia ke


pengguna B dengan no telp 5556. Berikut Tahap Implementasi dari aplikasi
SMS Kriptografi ini:

1. Pengguna 1 membuka aplikasi sms kriptografi RSA dan pilih


menu BUAT SMS
74

Gambar 4.9 membuka aplikasi sms kriptografi RSA

2. Ketik no tujuan pengguna 2 (5556) dan isi pesan (“Hi”) dan klik
tombol sandikan , Dan Klik Tombol Kirim SMS untuk mengirim
kunci .
75

Gambar 4.9.1 Proses Pengiriman SMS


Dapat dilhat bahwa pesan yang ingin dikirim adalah (“Hi”)
Kunci E = 35879
Kunci D = 525591732184681191
Kunci N = 1126371150077146231
Pesan yang disandikan = 50576878686821942
76

3. Pengguna 2 akan menerima pesan dari pengguna 1 dalam 2 sisi


yaitu :

Gambar 4.9.2 tampilan inbox dari dua sisi

Sisi pertama ditampilkan di list inbox bawaan android dan sisi


kedua adalah list pesan ditampilkan di list pesan pada aplikasi sms
kriptografi RSA
77

4. Pengguna dua klik pesan yang ingin didekripsikan dan pengguna


dua harus mengisi kunci D dan N yang sudah dikirimkan oleh
pengguna 1

Gambar 4.9.3 Proses dekripsi pesan

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

Gambar 4.9.4 Proses pemasangan kunci yang salah

Pesan yang tampil pada label adalah symbol yang tidak dapat
dibaca oleh manusia.
79

BAB V

PENUTUP

5.1 Kesimpulan

Berdasarkan hasil dari pembuatan aplikasi SMS kriptografi dengan


menerapkan metode RSA pada android , maka ddidapatkan kesimpulan
seperti :

1. Dengan aplikasi ini , dapat memudahkan pengguna dalam


melakukan proses pengiriman dan penerimaan pesan yang
bersifata sangat penting dan rahasia.
2. Dapat memahami dari ilmu kriptografi dan metode – metode yang
ada dalam kriptografi terutama Metode RSA
3. Membuktikan bahwa metode RSA tidak hanya cuma digunakan
untuk mengamankan data dan digital signature , tetapi metode ini
dapat diterapkan untuk proses pengiriman pesan dan penerimaan
pesan berbasis SMS
4. Aplikasi ini dapat digunakan oleh siapa saja dan kapasitas
memory tang dibutuhkan pun sangat kecil , hanya 30 kb saja.
5. Dengan panjang bit yang digunakan hanya 256 bit dapat
melakukan proses persandian yang cukup aman.
5.2 Saran
Pada bagian ini , saran – saran yang diberikan untuk aplikasi ini adalah :
1. Aplikasi ini hanya digunakan sebatas mengirimkan pesan berupa
text tanpa menyisipkan gambar ataupun suara.
2. Dengan panjang bit 256 yang digunakan dalam aplikasi ini , maka
huruf yang dapat di enkripsi maksimal 6 huruf saja
3. Proses pengiriman kunci ini masih terbilang manual

79
80

4. Tidak ada proses dalam memperindah tampilan , karena aplikasi


ini lebih berfokus terhadap prosesnya dalam mengirim dan
menerima pesan.
5. Proses list box yang masih belum sempurna.
81

DAFTAR PUSTAKA

Android Developers, Android Documentation, Download 19 November


2009,http://developer.Android.com/guide/topics/data/data-
storage.html, 22 November 2012.

Bruce Schneier, Applied Cryptography : Protocols, Algorithms, and Source


Code in C, USA, John Wiley & Sons, Inc., 1996

Christof Paar,"APPLIED CRYPTOGRAPHY AND DATA


SECURITY",www.crypto.rub.de,version 2.5,January 2005.

Google IO, Android Anatomy and Physiology, Download 26 Oktober 2009,


http://sites.google.com/site/io/anatomy--physiology-of-an-
Android, 22November 2012

Menezes, A. dkk.,"Handbook of Applied Cryptography",CRC Press,


Inc.1996.

Munir, Rinaldi. Bahan Kuliah IF5054 Kriptografi. (2004). Departemen


Teknik Informatika, Institut Teknologi Bandung.

Rhee, Man Young, Cryptography and Sesure Communications, Singapore,


McGraw-Hill Book Co., 1994

Roger S Pressman , “SOFTWARE ENGINrERING Sixth Edition”, USA ,


McGrawHill , 2005

Rosidi, R., I. 2004. Membuat Sendiri SMS Gateway (ESME) Berbasis


Protokol SMPP. Yogyakarta : ANDI.

Sayed Y. Hashimi and Satya Komatineni, 2009, Pro Android, Apress Inc.

William Stallings, Network and Internetwork Security Principles and


Practice, New Jersey, Prectice-Hall, 1995.
1

RIWAYAT HIDUP

Data Pribadi

Nama : Verdy Yanto

TTL : Jakarta, 29 Juni 1991

Jenis kelamin : Laki – laki

Alamat : Jalan Duku II gang II no. 11

Agama : Buddha

Riwayat Pendidikan

1997 – 2003 : SD Harapan Kasih, Jakarta Barat

2003 – 2006 : SMP Widuri Jaya, Jakarta Barat

2006 – 2009 : SMA Yadika 1, Jakarta Barat

2009 – Sekarang : Universitas Esa Unggul


Fakultas Ilmu Komputer
Jurusan Teknik Informatika
-1-

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;

public class RSAA {

private BigInteger n, d, e , p , q;
private BigInteger phi;
private int bitlength = 30;
private int blocksize = 120;
-2-

private int bitlen = 256;

/** Create an instance that can encrypt using someone elses


public key. */
public RSAA(BigInteger newn, BigInteger newe) {
n = newn;
e = newe;
}

public RSAA(int bits) {

Random r = new Random();


p = BigInteger.probablePrime(bitlength, r);
q = BigInteger.probablePrime(bitlength, r);
n = p.multiply(q);

phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
e = BigInteger.probablePrime(bitlength/2, r);

while (phi.gcd(e).compareTo(BigInteger.ONE) > 0 && e.compareTo(phi) <


0){
e.add(BigInteger.ONE);
}
d = e.modInverse(phi);
}

public synchronized String encrypt(String message , BigInteger E) {


return (new BigInteger(message.getBytes())).modPow(E, n).toString();
}

/** Encrypt the given plaintext message. */


public synchronized BigInteger encrypt(BigInteger message , BigInteger
E , BigInteger N ) {
return message.modPow(E, N);
}

/** Decrypt the given ciphertext message. */


public synchronized String decrypt(String message , BigInteger D) {
-3-

return new String((new BigInteger(message)).modPow(D,


n).toByteArray());
}

/** Decrypt the given ciphertext message. */


public synchronized BigInteger decrypt(BigInteger message ,
BigInteger D , BigInteger N) {
return message.modPow(D, N);
}

/** Generate a new public and private key set. */


public synchronized void generateKeys() {
SecureRandom r = new SecureRandom();
BigInteger p = new BigInteger(bitlen / 2, 100, r);
BigInteger q = new BigInteger(bitlen / 2, 100, r);
n = p.multiply(q);
BigInteger m = (p.subtract(BigInteger.ONE)).multiply(q
.subtract(BigInteger.ONE));
e = new BigInteger("3");
while (m.gcd(e).intValue() > 1) {
e = e.add(new BigInteger("2"));
}
d = e.modInverse(m);
}

/** Return the modulus. */


public synchronized BigInteger getN() {
return n;
}

/** Return the public key. */


public synchronized BigInteger getE() {
return e;
}

public synchronized BigInteger getD() {


return d;
}
}

Class RSA_SMS.Java
-4-

public class RSA_SMS extends Activity {


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button buat_sms = (Button)findViewById(R.id.buat_sms);
buat_sms.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {


Intent create_sms = new Intent(getBaseContext(),kirimSMS.class);
startActivity(create_sms);
}
});

final Button list_sms = (Button)findViewById(R.id.lihat_sms);


list_sms.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {


Intent list = new Intent(getBaseContext(),tempatSMS.class);
startActivity(list);
}
});
}
}

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;

public class kirimSMS extends Activity {

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;

BigInteger enkrip , dekrip;


String plain_textt;
long n1 , euler1 , d_key1 ,k, cari_k , e_key1 ;
BigInteger kode_p , kode_q , euler , e_key , d_key , n ;
long kode_p1 , kode_q1 ;
byte[] chip_encrypt , plain_decrypt ;
String chiper_text , plaiin_text;

Button btnSend , keyy , artikan;


EditText phone_no ;
static EditText pesan;
EditText p, q, e, d, plain, bytee, plain_textfield , N;

public void onCreate(Bundle savedInstanceState)


{
super.onCreate(savedInstanceState);
setContentView(R.layout.sendsms);

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() {

public void onClick(View v) {

String notelp = phone_no.getText().toString().trim();


String pesan_chiper = pesan.getText().toString();
String chippp = pesan.getText().toString();

if(notelp.length()>0)
{
kirimSMS(notelp, pesan_chiper);
}
else
{

Toast.makeText(getBaseContext(),"no hp tidak boleh kosong",


Toast.LENGTH_LONG).show();

}
});

keyy.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {


notelp = phone_no.getText().toString().trim();
String cchiper_text = pesan.getText().toString().trim();
RSAEncrypt aa = new RSAEncrypt();
RSAA bb = new RSAA(256);

BigInteger eee = bb.getE();


BigInteger ddd = bb.getD();
BigInteger Nn = bb.getN();

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
{

Toast.makeText(getBaseContext(),"no hp tidak boleh kosong",


Toast.LENGTH_LONG).show();
}
}
});
}

public void hitung_key()


{

RSAEncrypt aa = new RSAEncrypt();


String notelp = phone_no.getText().toString().trim();
String cchiper_text = pesan.getText().toString().trim();
}
public void kirimSMS(String noTelp , String pesannya)
{
String sent = "SMS_SENT";
String deliver = "SMS_DELIVERED";
-8-

PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new


Intent(sent), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new
Intent(deliver), 0);

ketika sms dikirim


registerReceiver(new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) { switch
(getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS SUDAH DIKIRIM",
Toast.LENGTH_LONG).show();
break;

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-

//ketika sms diterima


registerReceiver(new BroadcastReceiver() {

public void onReceive(Context context, Intent intent) {


switch (getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS SUDAH
DIKIRIM",Toast.LENGTH_LONG).show();
break;

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;

public class tempatSMS extends Activity{

public void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);

setContentView(R.layout.smsinbox);

final ListView list = (ListView)findViewById(R.id.sms_list);

final Button btn_key = (Button)findViewById(R.id.BtnKey);

btn_key.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

List<String> msgs = getSMS(/*j*/);


- 11 -

if(msgs.isEmpty())

msgs.add("tidak ada sms yang bisa di dekrip dengan key itu");

ArrayAdapter<String>smsAdapter=newArrayAdapter<String>(getBaseCon
text(), android.R.layout.simple_list_item_1,msgs);

list.setAdapter(smsAdapter);

list.setOnItemClickListener(new OnItemClickListener() {

publicvoid onItemClick(AdapterView<?> arg0, View arg1,

int arg2, long arg3) {

Uri SMS_Uri = Uri.parse("content://sms/inbox");

Cursor c = null ;

try

c = getApplicationContext().getContentResolver().query(SMS_Uri, null,
null, null, null);

catch(Exception e)

e.printStackTrace();

}
- 12 -

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")); Intent


trans = new Intent(tempatSMS.this,isi_sms.class);

Bundle b = new Bundle();

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();

}});}});}

public List<String> getSMS(/*String str_key*/)

{
- 13 -

List<String> list = new ArrayList<String>();

Uri uri = Uri.parse("content://sms/inbox");

Cursor c = null;

try{

c = getApplicationContext().getContentResolver().query(uri, null, null, null,


null);

catch(Exception e){

e.printStackTrace();

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();

}
- 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;

public class isi_sms extends Activity {

String pesan , plain , kunci_dd , kunci_nn;


EditText pho_no , isi_pesan , kunci_d , kunci_n ;
TextView pesan_terjemah ;

public void onCreate(Bundle savedInstanceState)


{
super.onCreate(savedInstanceState);
setContentView(R.layout.isi);
Bundle b = getIntent().getExtras();

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);

String alamat = b.getString("string_addres");


String isi_text = b.getString("string_isi");

pho_no.setText(alamat);
si_pesan.setText(isi_text);
//
- 15 -

Button terjemah = (Button)findViewById(R.id.dekkripp);


terjemah.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {

pesan = isi_pesan.getText().toString();
kunci_dd = kunci_d.getText().toString();
kunci_nn = kunci_n.getText().toString();

BigInteger d_key = new BigInteger(kunci_dd);


BigInteger n_key = new BigInteger(kunci_nn);
BigInteger peesan = new BigInteger(pesan);
BigInteger fiinal;

RSAA test_akhir = new RSAA(256);


BigInteger jaka = test_akhir.decrypt(peesan, d_key, n_key);
String jakaka = new String(jaka.toByteArray());
pesan_terjemah.setText(jakaka);
}});}}

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;

public class penerimaSMS extends BroadcastReceiver {


- 16 -

public void onReceive(Context context, Intent intent) {

Bundle bundle = intent.getExtras();

SmsMessage[] msgs = null ;

String str = "";

if(bundle!=null)

Object[] pdus = (Object[]) bundle.get("pdus");

msgs = new SmsMessage[pdus.length];

String strmsg = "";

for(int i = 0 ; i<msgs.length;i++)

msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);

str += "SMS dari" + msgs[i].getOriginatingAddress();

str += ":";

str += "\n";

strmsg = msgs[i].getMessageBody().toString();

Toast.makeText(context,,"IncomingSMS",
Toast.LENGTH_LONG).show();

}}}
- 17 -

Lampiran Gambar
- 18 -
- 19 -
- 20 -

Anda mungkin juga menyukai