implementasi konsep hybrid algoritma rsa
Embed Size (px)
Transcript of implementasi konsep hybrid algoritma rsa

Universitas Sumatera Utara
Repositori Institusi USU http://repositori.usu.ac.id
Departemen Ilmu Komputer Skripsi Sarjana
2018
Implementasi Konsep Hybrid Algoritma
RSA - Naive dan Algoritma RC4 dalam
Pengamanan File JPG pada Aplikasi
Instant Messaging
Tumanggor, Ronaldi
http://repositori.usu.ac.id/handle/123456789/4242
Downloaded from Repositori Institusi USU, Univsersitas Sumatera Utara

IMPLEMENTASI KONSEP HYBRID ALGORITMA RSA - NAÏVE DAN
ALGORITMA RC4+ DALAM PENGAMANAN FILE JPG PADA
APLIKASI INSTANT MESSAGING
SKRIPSI
RONALDI TUMANGGOR
131401011
PROGRAM STUDI S-1 ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA
MEDAN
2018
Universitas Sumatera Utara

IMPLEMENTASI KONSEP HYBRID ALGORITMA RSA - NAÏVE DAN
ALGORITMA RC4+ DALAM PENGAMANAN FILE JPG PADA
APLIKASI INSTANT MESSAGING
SKRIPSI
Diajukan untuk melengkapi tugas dan memenuhi syarat memperoleh ijazah
Sarjana Ilmu Komputer
RONALDI TUMANGGOR
131401011
PROGRAM STUDI S1 ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA
MEDAN
2018
Universitas Sumatera Utara

ii
PERSETUJUAN
Judul : IMPLEMENTASI KONSEP HYBRID ALGORITMA
RSA – Naïve DAN ALGORITMA RC4+ DALAM
PENGAMANAN FILE JPG PADA APLIKASI
INSTANT MESSAGING
Kategori : SKRIPSI
Nama : RONALDI TUMANGGOR
Nomor Induk Mahasiswa : 131401011
Program Studi : SARJANA (S1) ILMU KOMPUTER
Fakultas : ILMU KOMPUTER DAN TEKNOLOGI
INFORMASI UNIVERSITAS SUMATERA UTARA
Komisi Pembimbing :
Dosen Pembimbing II Dosen Pembimbing I
Amalia, S.T., M.T M.Andri Budiman, S.T.,M.Comp.Sc., M.E.M.
NIP. 197812212014042001 NIP. 197510082008011011
Diketahui/Disetujui oleh
Program Studi S1 Ilmu Komputer
Ketua,
Dr. Poltak Sihombing, M.Kom
NIP. 19620317 19910310 01
Universitas Sumatera Utara

iii
PERNYATAAN
IMPLEMENTASI KONSEP HYBRID ALGORITMA RSA - Naïve DAN
ALGORITMA RC4+ DALAM PENGAMANAN FILE JPG PADA
APLIKASI INSTANT MESSAGING
SKRIPSI
Saya mengakui bahwa skripsi ini adalah hasil karya saya sendiri, kecuali beberapa
kutipan dan ringkasan yang masing-masing telah disebutkan sumbernya.
Medan, Januari 2018
Ronaldi Tumanggor
131401011
Universitas Sumatera Utara

iv
PENGHARGAAN
Puji dan syukur penulis ucapkan kehadirat Tuhan Yang Maha Esa, karena rahmat dan
penyertaan-Nya, penulis dapat penyusunan skripsi ini, sebagai syarat untuk
memperoleh gelar Sarjana Komputer, pada Program Studi S1 Ilmu Komputer Fakultas
Ilmu Komputer dan Teknologi Informasi Universitas Sumatera Utara.
Banyak bantuan berupa uluran tangan, baik budi, buah pikiran, motivasi, dan
kerjasama yang telah penulis terima selama menempuh studi sampai dengan
penyelesaian studi (skripsi) ini terutama kepada ayahanda Jausman Tumanggor dan
ibunda Kesteria Situmorang yang selalu mendukung dan sabar membimbing saya. Oleh
karena itu, penulis ingin menyampaikan ucapan terimakasih kepada pihak – pihak yang
telah membantu.
Ucapan terima kasih penulis sampaikan kepada :
1. Prof. Dr. Runtung Sitepu, SH, M.Hum selaku Rektor Universitas Sumatera
Utara.
2. Prof. Dr. Opim Salim Sitompul M.Sc selaku Dekan Fakultas Ilmu Komputer
dan Teknologi Informasi Universitas Sumatera Utara.
3. Bapak Dr. Poltak Sihombing, M.Kom selaku Ketua Program Studi S1 Ilmu
Komputer Fakultas Ilmu komputer dan Teknologi Informasi Universitas
Sumatera Utara.
4. Ibu Dr. Maya Silvi Lydia, B.Sc, M.Sc selaku dosen Pembimbing Akademik
yang telah memberikan nasihat, arahan dan motivasi kepada penulis selama
menempuh perkuliahan.
5. Bapak M.Andri Budiman, S.T., M.Comp.Sc., M.E.M selaku dosen pembimbing
I yang telah memberikan bimbingan, kritik, motivasi, dan saran kepada penulis
dalam menyelesaikan skripsi ini.
6. Ibu Amalia., S.T., MT selaku dosen pembimbing II yang telah memberikan
bimbingan, kritik, motivasi, dan saran kepada penulis dalam menyelesaikan
skripsi ini.
Universitas Sumatera Utara

v
7. Seluruh tenaga pengajar dan pegawai di Fakultas Ilmu Komputer dan
Teknologi Informasi USU yang telah membantu penulis dalam proses
pembuatan skripsi.
8. Keluarga Besar Op. Yusri Tumanggor, terkhusus Sr. Damiana Tumanggor,
KSSY, Bapak uda P. Asterius Tumanggor yang telah banyak sekali membantu
baik melalui doa, material maupun moral dan menjadi motivator terbesar selama
perjalanan kuliah penulis.
9. Adek tercinta Hasiani Thresia Tumanggor yang selalu memberikan dukungan
kepada penulis.
10. Sahabat – sahabat pejuang wisuda Dian Dwi Prayoga, Rahmat Fajar, M. Reza
Vahlevi, Fauza Badratul Chairiah yang banyak membantu, memberikan
semangat dan inspirasi, serta dorongan kepada penulis selama mengerjakan
skripsi.
11. Teman - teman penghuni terakhir IKLC Teguh Subiyantoro, Bintang Thunder,
Ricky Rinaldi, Audhika Gaindata yang telah memberikan semangat kepada
penulis dalam pengerjaan skripsi.
12. Teman – teman Hendra Suranta Ginting, Debby F. Nainggolan, Billy Halim
Bonar Situmorang, Hotmoko Tumanggor, Jisandi Nahampun, Lambok
Situmorang, Samsul Bahri Pasaribu, Esrin Pasaribu, Rudy Chandra, Fahry
Mayprana, Dendy Herlambang, Afri, Abdul Latif W. Nasution, Mangasa
Manullang, S.Kom yang telah berbagi kebersamaan, saling berbagi ilmu,
semangat, serta dorongan kepada penulis.
13. Rekan – rekan tim ruangmahasiswa.com yang selalu memberikan semangat dan
dukungan kepada penulis.
14. Rekan – rekan di Ilmu Komputer Laboratory Center (IKLC) USU yang telah
berbagi ilmu, inspirasi dan pengalaman kepada penulis.
15. Rekan – rekan Mahasiswa Parlilitan yang telah banyak memberikan semangat
dan dukungan kepada penulis dalam pengerjaan skripsi ini.
16. Rekan - rekan seluruh keluarga besar Kom B Ilmu Komputer Universitas
Sumatera Utara yang telah banyak memberi motivasi kepada penulis dalam
pengerjaan skripsi ini.
Universitas Sumatera Utara

vi
17. Rekan - rekan seperjuanan Mahasiswa Ilmu Komputer Universitas Sumatera
Utara stambuk 2013 yang telah banyak memberi motivasi kepada penulis dalam
pengerjaan skripsi ini.
18. Semua pihak yang terlibat langsung ataupun tidak langsung yang tidak dapat
penulis ucapkan satu per satu yang telah membantu menyelesaikan skripsi
ini.
Semoga Tuhan Yang Maha Esa melimpahkan berkah kepada semua pihak yang
telah memberikan bantuan, semangat, perhatian, serta dukungan kepada penulis dalam
menyelesaikan skripsi ini. Semoga skripsi ini bermanfaat bagi pribadi, keluarga,
masyarakat, organisasi dan negara.
Medan, Januari 2018
Penulis
Universitas Sumatera Utara

vii
ABSTRAK
Semakin mudahnya menggunakan internet menjadikan semua pertukaran informasi jadi
terpusat di internet. Namun terdapat banyak ancaman informasi yang tersimpan di
internet seperti penyadapan dan pencurian. Perlunya mengamankan pesan termasuk
pesan gambar yang dikirim melalui aplikasi Instant Messaging. Pada penelitian ini,
solusi pengamanan yang dilakukan adalah menerapkan algoritma kriptografi dengan
konsep hybrid menggunakan algoritma RC4+ dan algoritma RSA - Naïve. Algoritma
RC4+ termasuk dalam algoritma simetris dimana kekuatannya terletak pada banyaknya
proses pengacakan kunci, sedangkan algoritma RSA – Naïve adalah algoritma asimetris
dan letak kekuatannya berada pada panjang kunci pada bit yang dihasilkan sehingga
semakin panjang bit maka semakin sukar untuk dipecahkan karena sulitnya
memfaktorkan dua bilangan yang sangat besar tersebut. Dalam prosesnya, citra JPG
dikonversi ke string Base64 terlebih dahulu, kemudian dienkripsi menggunakan RC4+
dan kunci RC4+ yang digunakan untuk mengenkripsi citra akan dienkripsi oleh
algoritma RSA – Naïve untuk menghasilkan cipherkey. Hasil enkripsi dikirim melalui
internet dan disimpan di database. Data yang tersimpan di database kemudian didekripsi
kembali agar pesan bisa diterima kembali di aplikasi penerima dengan baik.
Implementasi dilakukan dengan menggunakan bahasa pemrograman Java. Hasil dari
penelitian menunjukkan resolusi citra berbanding lurus secara linear terhadap waktu
proses proses enkripsi dan dekripsi pesan.
Kata kunci: Hybrid Cryptosystem, Instant Messaging, Kriptografi, JPG, RC4+, RSA –
Naïve
Universitas Sumatera Utara

viii
AN IMPLEMENTATION OF THE HYBRID CONCEPT RSA – NAÏVE
ALGORITHM AND RC4+ ALGORITHM TO SECURING JPG FILE ON INSTANT
MESSAGING APPLICATION
ABSTRACT
Easines to use internet make all the information exchange centered on the internet.
However, there are many threats of information stored on the internet such as tapping
and theft. The need to secure messages including sent messages via the Instant
Messaging app. In this research, the security solution is implements cryptographic
algorithms with hybrid concept using RC4+ algorithm and RSA - Naïve algorithm. The
RC4+ algorithm is a symmetric algorithm where its strength lies in the number of key
randomisation processes, while the RSA-Naïve algorithm is an asymmetric algorithm
and its strength lies in the key length of the resulting bit so that the bit length becomes
more difficult to solve because of the difficulty of factoring the two very large numbers.
In the process, the JPG image converted to the Base64 string first, then encrypted using
RC4+, and the RC4+ key’s used to encrypt the image will be encrypted by the RSA-
Naïve algorithm to produce the cipherkey. The encryption results are sent over the
internet and stored in the database. The data stored in the database is then decrypted so
that the message can be received back in the recipient application properly. The
implementation using Java programming language. The results of the research show
that the image resolution is linearly straight to the process time for the encryption and
decryption processes of the message.
Keywords: Cryptography, Hybrid Cryptosystem, Instant Messaging, JPG, RC4+, RSA
- Naïve
Universitas Sumatera Utara

ix
DAFTAR ISI
Halaman
Persetujuan ii
Pernyataan iii
Penghargaan iv
Abstrak vi
Abstract vii
Daftar Isi ix
Daftar Tabel xi
Daftar Gambar xii
Daftar Lampiran xiv
Bab 1 Pendahuluan
1.1 Latar Belakang 1
1.2 Rumusan Masalah 3
1.3 Tujuan Penelitian 3
1.4 Batasan Penelitian 4
1.5 Manfaat Penelitian 4
1.6 Metode Penelitian 4
1.7 Sistematika Penulisan 5
Bab 2 Tinjauan Pustaka
2.1 Kriptografi 7
2.1.1 Definisi kriptografi 7
2.1.2 Tujuan kriptografi 8
2.1.3 Macam – macam algoritma kriptografi 9
2.2 Hybrid Cryptosystem 12
2.3 Algoritma Lehmann 12
2.4 Algorima RSA Naïve 13
2.4.1 Proses enkripsi pada RSA Naïve 15
2.4.2 Prose dekripsi pada RSA Naïve 16
2.5 Algoritma RC4+ 17
2.5.1 Key Scheduling Algorithm (KSA+) 17
2.5.2 Pseudo Random Generation Algorithm (PRGA+) 18
2.6 Citra Digital 21
2.6.1 Pengertian Citra Digital 21
2.6.2 Format File Citra Digital 22
2.6.3 Enkripsi pada Citra Digital 22
2.7 Penelitian yang Relevan 24
Universitas Sumatera Utara

x
Bab 3 Analisis dan Perancangan
3.1 Analisis Sistem 26
3.1.1 Analisis Masalah 26
3.1.2 Analisis Kebutuhan 27
3.1.3 Diagram Umum 29
3.1.4 Pemodelan sistem 20
3.1.5 Flowchart 34
3.2 Perancangan Antarmuka (Interface) 38
Bab 4 Implementasi dan Pengujian
4.1 Implementasi 44
4.1.1 Halaman Awal 44
4.1.2 Halaman Timeline 45
4.1.3 Halaman Detail 45
4.1.4 Halaman Bantuan 46
4.1.5 Halaman About 47
4.2 Pengujian 48
4.2.1 Pengujian Proses Pembangkitan Kunci 48
4.2.2 Pengujian Hasil Enkripsi Algoritma RC4+ dan RSA Naïve 50
4.2.3 Pengujian Hasil Dekripsi Algoritma RC4+ dan RSA Naïve 66
4.2.4 Waktu Proses 68
Bab 5 Kesimpulan dan Saran
5.1 Kesimpulan 75
5.2 Saran 76
Daftar Pustaka 77
Universitas Sumatera Utara

xi
DAFTAR TABEL
Nomor
Tabel Nama Tabel Halaman
4.1 Larik state awal 55
4.2 Kode ASCII 55
4.3 Hasil Akhir Tahap Key Scheduling Algorithm (KSA) 59
4.4 Waktu Proses Enkripsi – Dekripsi Citra 69
4.5 Waktu Proses Enkripsi – Dekripsi pada Kunci 71
4.6 Pengaruh Resolusi Citra terhadap Panjang Pesan 72
Universitas Sumatera Utara

xii
DAFTAR GAMBAR
Nomor
Gambar Nama Gambar Halaman
2.1 Proses enkripsi dan dekripsi dengan menggunakan kunci 8
2.2 Skema Algoritma Simetris 10
2.3 Algoritma Kunci Asimetri 11
2.4 Inisialisasi KSA 18
2.5 Pengacakan dasar di dalam KSA+ 18
2.6 Pseudo Random Generation Algorithm (PRGA+) 18
2.7 Ilustrasi Citra RGB 23
2.8 Diagram enkripsi-dekripsi citra digital 24
3.1 Diagram Ishikawa 27
3.2 Diagram umum 29
3.3 Diagram Use Case 30
3.4 Diagram aktivitas pada tahap enkripsi 31
3.5 Diagram aktivitas untuk proses dekripsi 32
3.6 Diagram sequence untuk proses enkripsi 33
3.7 Diagram sequence untuk proses dekripsi 34
3.8 Flowchart sistem 35
3.9 Flowchart Algoritma RC4+ Cipher 36
3.10 Flowchart enkripsi algoritma RSA Naïve 37
3.11 Flowchart dekripsi algoritma RSA Naïve 38
3.12 Perancangan interface halaman awal (splash screen) 39
Universitas Sumatera Utara

xiii
3.13 Perancangan interface Halaman Beranda (Timeline) 40
3.14 Perancangan interface halaman info detail tentang
gambar 41
3.15 Perancangan kotak dialog about 42
3.16 Perancangan interface halaman bantuan 43
4.1 Tampilan Halaman Awal Sistem 44
4.2 Tampilan Halaman Timeline 45
4.3 Tampilan Halaman Detail 46
4.4 Tampilan Halaman Bantuan 47
4.5 Tampilan Halaman About 47
4.6 Proses Pembangkitan Kunci RC4+ 48
4.7 Pengujian Pembangkitan Kunci RSA Naïve 49
4.8 File citra .jpg berukuran 20 x 20px 50 4.9 Tampilan Timeline Sistem 51
4.10 Memilih gambar dari galeri 51
4.11 Data hasil enkripsi disimpan dalam Firebase 54
4.12 Gambar setelah proses dekripsi dari database
ditampilkan di halaman timeline 67
4.13 Detail proses enkripsi – dekripsi dan ciphertext
ditampilkan di halaman detail 68
4.14 Pengaruh resolusi citra terhadap waktu proses pada tahap
enkripsi dan dekripsi 70
4.15 Grafik waktu proses pada tahap enkripsi dan dekripsi
kunci dengan algoritma RSA Naïve 72
4.16 Pengaruh Resolusi Citra terhadap Panjang Pesan 73
Universitas Sumatera Utara

xiv
DAFTAR LAMPIRAN
Nama Lampiran Halaman
Listing Program A-1
Curriculum Vitae B-1
Universitas Sumatera Utara

BAB 1
PENDAHULUAN
1.1.Latar Belakang
Kemajuan teknologi memang sangat berdampak besar bagi manusia, salah satu
contohnya adalah pada bidang komunikasi. Di zaman sekarang ini, orang – orang
mengandalkan jaringan internet sebagai media untuk komunikasi. Melalui jaringan
internet, komunikasi antar manusia memang semakin cepat dan murah.
Seiring dengan kemajuan teknologi informasi maka bentuk
komunikasi juga beralih ke arah digital dengan memanfaatkan aplikasi yang ada
diantaranya adalah Instant Messaging (IM). Instant messaging adalah aplikasi yang
membantu seseorang untuk berkomunikasi secara real-time dengan pengguna lain
melalui media jaringan yang ada
Jika beberapa tahun yang lalu pengguna saling bertukar pesan melalui layanan
SMS, sekarang ini banyak pengguna perangkat mobile yang tertarik menggunakan
layanan instant messaging untuk saling berkomunikasi karena kelebihan yang
dimilikinya (Dwi Nugroho & Munir, 2015). Alasannya adalah karena instant messaging
tidak hanya mendukung pengiriman pesan berupa teks, tetap telah memiliki fitur untuk
mengirim pesan dalam bentuk gambar, suara, ataupun video.
Pada saat ini layanan Short Message Service (SMS) sudah mulai ditinggalkan
orang – orang. Banyaknya penggunaan layanan instant messaging kini sudah
mengalahkan penggunaan layanan SMS. Menurut data perusahaan riset Informa, pada
tahun 2012 jumlah pesan yang dikirimkan melalui layanan instant messaging mencapai
19 miliar melampaui jumlah pesan yang dikirimkan melalui SMS yang berjumlah 17,6
miliar (Mayer, 2013).
Maraknya penerapan Instant Messaging pada masyarakat harus didukung
dengan sistem keamanan yang baik karena banyak sekali kasus yang menunjukkan
Universitas Sumatera Utara

2
risiko keamanan. Pesan – pesan instant dalam aplikasi instant messaging sangat rawan
terhadap penyadapan (Dwi Nugroho & Munir, 2015). Sistem yang lemah akan
memudahkan penyerang untuk menyebarkan pesan palsu atau worm (Wanda, Selo, &
Hantono, 2014)
Penyadapan pada instant messaging tidak hanya dapat mengetahui isi pesan
teks, melainkan juga dapat mengetahui gambar, suara dan video yang dikirim. Hal ini
dikarenakan lemahnya sistem keamanan yang diterapkan pada jaringan internet
pengiriman pesan tersebut. Padahal pasitnya banyak isi dari pesan tersebut yang bersifat
privasi.
Salah satu cara yang dapat digunakan untuk mengamankan pesan yang dikirim
melalui aplikasi instant messaging adalah dengan memanfaatkan peran kriptografi
untuk mengenkripsi pesan sebelum pesan tersebut dikirim (Dwi Nugroho & Munir,
2015). Dengan dienkripsinya pesan yang akan dikirim, maka pesan tersebut tidak akan
mudah diketahui oleh pihak yang tidak dinginkan.
Pada kasus ini, penulis akan mencoba menerapkan kriptografi untuk
mengamankan pesan gambar dengan ekstensi JPG pada aplikasi Instant Messaging.
Banyak algoritma dan metode yang dapat digunakan untuk proses kriptografi maka
penulis menggunakan algoritma RSA Naïve dan algoritma RC4+.
Algoritma RSA adalah algoritma kriptografi modern yang paling dikenal
didalam sejarah kriptiografi modern. RSA digunakan karena merupakan algoritma
kriptografi asimetris yang paling sering digunakan pada saat ini dikarenakan
kehandalannya. Panjang kunci dalam bit dapat diatur.
Dengan semakin panjang bit maka semakin susah untuk dipecahkan karena
sulitnya memfaktorkan dua bilangan yang sangat besar tersebut, tetapi juga semakin
lama pada proses dekripsinya.
Keamanan algoritma RSA terletak pada sulitnya memfaktorkan bilangan yang
besar menjadi faktor-faktor prima. Pemfaktoran dilakukan untuk memperoleh kunci
pribadi. Selama pemfaktoran bilangan besar menjadi faktor-faktor prima belum
ditemukan algoritma yang efisien, maka selama itu pula keamanan algoritma RSA tetap
terjamin. Karena algoritma RSA Naïve termasuk ke dalam algoritma kriptografi
Universitas Sumatera Utara

3
modern, maka algoritma ini termasuk algoritma yang aman tetapi semakin lama pada
proses dekripsinya.
Algoritma RC4+ merupakan salah satu algoritma stream cipher yang merupakan
algoritma simetri. RC4+ merupakan pengembangan dari RC4. Algoritma dalam
kategori stream cipher dapat dibuat dengan sangat cepat. Dengan menggunakan
algoritma RC4+, pesan akan diubah ke pseudo random streambit dengan
mengkombinasikan bit-wise XOR.
Hybrid crypto adalah metode untuk mengunci plainteks dengan algoritma
simetris dan menggunakan algoritma asimetris untuk mengunci algoritma simetris.
Kedua algoritma tersebut dikombinasikan yang disebut hybrid crypto. Dengan
menggunakan hybrid crypto, maka proses enkripsi plainteks menggunakan algoritma
RC4+ sementara algoritma RSA-Naïve digunakan untuk enkripsi kunci algoritma RC4+
Berdasarkan penjelasan di atas, penulis akan merancang suatu aplikasi instant
messaging yang berfokus untuk mengamankan file citra dengan ekstensi JPG dengan
menerapkan ilmu kriptografi dengan menggunakan algoritma RC4+ dan RSA – Naïve.
1.2.Rumusan Masalah
Rumusan masalah yang akan dibahas pada penelitian ini adalah Instant messaging
sangat rentan dengan penyadapan sehingga perlu dilakukan pengamanan dengan
menggunakan teknik kriptografi.
1.3.Tujuan Penelitian
Tujuan dari penelitian ini adalah :
1. Merancang dan membangun aplikasi Instant Messaging yang dilengkapi dengan
sistem keamanan
2. Mengamankan pesan Instant Messaging yang berisi file JPG dengan menggunakan
ilmu kriptografi.
3. Mengimplementasikan algoritma RC4+ yang dikombinasikan dengan algoritma
RSA – Naïve untuk mengamankan isi pesan berupa file JPG pada aplikasi Instant
Messaging
Universitas Sumatera Utara

4
4. Melakukan pengujian apakah file JPG yang dikirimkan dapat diterima seperti
keadaan semula setelah melewati proses pengamanan dengan kriptografi.
1.4.Batasan Penelitian
1. Melakukan enkripsi dan dekripsi terfokus untuk mengamankan isi pesan.
2. Algoritma RC4+ untuk enkripsi file citra sementara algoritma RSA-Naïve
digunakan untuk enkripsi kunci algoritma RC4+.
3. Pembangunan aplikasi fokus pada pengimplementasian kriptografi pada isi pesan
berupa file citra dengan ekstensi JPG dengan resolusi maksimal 500 x 500 piksel.
4. Pembuatan aplikasi Instant Messaging untuk sistem operasi Android dengan versi
minimal Kitkat
5. Menggunakan bahasa pemrograman Java.
6. IDE yang digunakan adalah Android Studio versi minimal 2.2.2 dan Database
Management System menggunakan Firebase.
7. Hanya menghitung running time pada saat proses enkripsi dan dekripsi
1.5.Manfaat Penelitian
Manfaat dari penelitian ini adalah :
1. Penelitian ini diharapkan mampu memberikan keamanan pada pengiriman pesan
gambar melalui jaringan internet.
2. Menambah pengetahuan penulis dalam menerapkan algoritma kriptografi pada
aplikasi mobile Instant Messaging.
3. Sebagai bahan referensi bagi peneliti lain yang ingin membahas topik yang terkait
dengan penelitian.
1.6.Metodologi Penelitian
Tahapan penelitian yang dilakukan dalam penelitian ini adalah :
1. Studi Literatur
Pada tahap ini dilakukan peninjauan terhadap buku, artikel, jurnal, maupun hasil
penelitian terdahulu sebagai referensi yang diperlukan dalam melakukan
penelitian. Ini dilakukan untuk memperoleh informasi yang terkait dengan
Universitas Sumatera Utara

5
algoritma RC4+ dan algoritma RSA – Naïve, file gambar dan proses pengiriman
pesan melalui jaringan internet.
2. Analisis dan Perancangan
Tahap ini digunakan untuk mengolah data dari hasil studi literatur yang
kemudian dilakukan analisis dan perancangan menggunakan algoritma RC4+ dan
algoritma RSA – Naïve. Proses ini meliputi pembuatan algoritma program, Use
Case Diagram), flowchart, perancangan interface dari aplikasi, serta pembuatan
database.
3. Implementasi
Pada tahap ini, implementasi berupa aplikasi sistem instant messaging, dimana
pada setiap pesan gambar yang terkirim akan dienkripsi terlebih dahulu
menggunakan algoritma RC4+ dan kunci dari RC4+ dienkripsi RSA – Naïve
sebelum di simpan ke database dan kemudian akan didekripsi jika telah sampai
kepada pembaca. Aplikasi dibangun menggunakan bahasa pemrograman Java.
4. Pengujian
Menguji apakah aplikasi yang dibuat telah berhasil berjalan sesuai dengan
keinginan dan melakukan perbaikan kesalahan jika masih tedapat error pada
aplikasi.
5. Dokumentasi
Pada tahap ini berisi laporan dan kesimpulan akhir dari hasil akhir analisa dan
pengujian dalam bentuk skripsi.
1.7.Sistematika Penulisan
Sistematika penulisan skripsi in iterdiri dari beberapa bagian utama, yaitu:
BAB 1 PENDAHULUAN
Bab ini berisi latar belakang pemilihan judul skripsi
“Implementasi Konsep Hybrid Algoritma RSA - Naïve dan
Algoritma RC4+ dalam Pengamanan File JPG pada Aplikasi
Universitas Sumatera Utara

6
Instant Messaging.”, rumusan masalah, batasan masalah, tujuan
penelitian, manfaat penelitian, metode penelitian dan
sistematika penulisan.
BAB 2 LANDASAN TEORI
Bab ini menjelaskan tentang sistem kriptografi secara umum,
teori dan dasar-dasar perhitungan serta contoh implementasi
algoritma RSA - Naïve dan algoritma RC4+ dan pembangkit
bilangan prima algoritma Lehmann
BAB 3 ANALISIS DAN PERANCANGAN
Bab ini berisi analisis terhadap masalah penelitian dan
perancangan sistem yang akan dibangun sebagai solusi
permasalahan tersebut.
BAB 4 IMPLEMENTASI DAN PENGUJIAN
Bab ini berisi implementasi algoritma algoritma RSA - Naïve
dan algoritma RC4+, selanjutnya pengujian terhadap sistem
yang telah dibangun dengan melakukan pengiriman file JPG
melalui aplikasi, serta pembahasan hasil pengujian dan
analisisnya
BAB 5 KESIMPULAN DAN SARAN
Bab ini memuat kesimpulan dari uraian penjelasan bab-bab
sebelumnya dan saran berdasarkan hasil pengujian yang
diharapkan dapat bermanfaat untuk pengembangan sistem
selanjutnya,
Universitas Sumatera Utara

BAB 2
LANDASAN TEORI
2.1.Kriptografi
Kata Kriptografi berasal dari bahasa Yunani yang terdiri dari dua kata yaitu kryptós dan
gráphein, “kryptós” yang mempunyai arti tersembunyi dan “gráphein” yang artinya
“writting”(tulisan). Sehingga secara etimologi kriptografi berarti “secret writting”
(tulisan tersembunyi) (Basri, 2016).
Menurut terminologinya, cryptography adalah ilmu dan seni untuk menjaga
keamanan pesan ketika pesan dikirim dari suatu tempat ketempat yang lain (Ariyus,
2009). Menurut Request for Comments (RFC), kriptografi adalah ilmu matematika yang
berhubungan dengan transformasi data untuk membuat artinya tidak dipahami (untuk
menyembunyikan makna dari data tersebut), mencegah dari perubahan tanpa izin, atau
mencegah dari penggunaan yang tidak sah.
Jika transformasinya dapat dikembalikan, kriptografi juga bisa diartikan sebagai
proses mengubah kembali data yang terenkripsi menjadi bentuk yang dapat dipahami.
Artinya, kriptografis dapat diartikan sebagai proses untuk melindungi data dalam arti
yang luas (Oppliger, 2005). Selain bertujuan untuk merahasiakan data (privacy), tujuan
lain dari kriptografi yaitu menjaga integritas data (integrity), autentikasi
(authentication) dan mencegah terjadinya penyangkalan terhadap pengiriman informasi
oleh pengirim pesan (NonRepudiation) (Bellare & Rogaway, 2005).
Sistem kriptografi adalah sistem yang dapat digunakan untuk mengubah pesan
dengan tujuan membuat pesan tersebut tidak dimengerti oleh orang lain selain
penerima. Proses ini disebut enkripsi (encryption) (Churchouse, 2002). Enkripsi bisa
diartikan dengan cipher atau kode. Penerima pesan kemudian mengembalikan kode –
kode yang telah diterima menjadi bentuk asal dengan menggunakan kunci yang
dikirimkan oleh penerima pesan. Proses ini disebut dekripsi (decryption).
Universitas Sumatera Utara

8
Kunci yang digunakan untuk melakukan enkripsi dan dekripsi terbagi menjadi 2 bagian,
yaitu kunci pribadi (private key) dan kunci umum (public key) (Munir, 2006). Pesan asli
yang akan disampaikan pengirim kepada penerima pesan disebut plaintext, biasanya
disimbolkan dengan p, sedangkan pesan setelah dienkripsi disebut dengan chipertext,
biasanya disimbolkan dengan c. Kunci yang dikirimkan mengirim kepada penerima
pesan untuk proses dekripsi disebut dengan key, biasanya disimbolkan dengan k. Fungsi
enkripsi disimbolkan dengan E(p) sedangkan fungsi dekripsi disimbolkan dengan D(c)
(Schneier, 1996).
Gambar 2.1 Proses enkripsi dan dekripsi dengan menggunakan kunci
Super Enkripsi merupakan suatu konsep dengan menggunakan kombinasi dari
dua atau lebih dari teknik subtitusi dan permutasi cipher untuk mendapatkan algoritma
yang lebih handal (susah untuk dipecahkan) (Ariyus, 2006).
2.1.1 Tujuan Kriptografi
Tujuan awal dari kriptografi adalah menyembunyikan isi pesan sehingga tidak dapat
terbaca oleh pihak-pihak yang tak diinginkan, tetapi masih dapat dimengerti oleh pihak
yang dituju. Seiring perkembangan zaman, kriptografi banyak diterapkan di berbagai
bidang, mulai dari tukar menukar informasi di perang dunia kedua, hingga dunia
komputerisasi yang kita gunakan saat ini.
Menurut Schneier (1996), ada beberapa tujuan kriptografi, diantaranya adalah:
1. Kerahasiaan (Secrecy)
Secrecy bermakan kerahasiaan. Setiap informasi yang dikirim atau diterima
hanya dapat diakses oleh pihak yang berkepentingan. Enkripsi pesan bertujuan
untuk tetap merahasiakan pesan sampai kepada penerima dengan aman.
Selanjutnya pesan yang telah diterima akan didekripsi oleh penerima dengan
algoritma yang telah disepakati dan kunci yang telah dikirimkan dnegna jalur
yang lebih aman.
2. Integritas (Integrity)
Universitas Sumatera Utara

9
Integritas dalam kriptografi berhubungan dengna menjaga keasilan data,
artinya data yang diterima tidak rusak, berkurang, bertambah atau telah
dimanipulasi oleh pihak lain sebelum diterima oleh penerima data.
3. Autentikasi (Authentication)
Autentikasi berkaitan dengan identifikasi dan verifikasi, baik secara sistem
maupun informasi itu sendiri. Salah satu sarana proses autentifikasi adalah
melalui password. Apabila proses ini menggunakan password, maka protocol
autentifikasi harus aman dalam proses pengirimannya dan tidak digunakan
oleh pihak – pihak yang tidak bertanggung jawab. Teknik kriptografi sangat
diperlukan untuk permasalahan ini.
4. Non – Repudiation
Non – Repudiation adalah usaha untuk memastikan bahwa baik pesan maupn
kunci yang sampai adlaah benar – benar pesan atau kunci yang diharapkan.
Selain itu, non-repudiation juga adalah usaha untuk menghindari adanya
penyangkalan terhadap pengiriman/terciptanya suatu informasi oleh pengirim
pesan.
Sadikin (2012) menyatakan bahwa elemen-elemen dari sistem kriptografi yaitu :
1. Plaintext, biasanya disimbolkan dengan P adalah pesan atau data dalam bentuk
asli yang dapat dibaca dan juga sebagai masukan bagi algoritma enkripsi.
2. Secret Key atau kunci rahasia adalah nilai yang bebas bagi algoritma enkripsi
terhadap teks asli dan menentukan hasil keluaran dari algoritma enkripsi.
3. Ciphertext biasanya disimbolkan dengan C, adalah pesan dalam bentuk
tersembunyi yang merupakan hasil dari algoritma enkripsi.
4. Algoritma enkripsi, memiliki 2 masukan yaitu teks asli dan kunci rahasia. Kedua
masukan akan diproses sehingga membuat teks asli menghasilkan teks sandi.
5. Algoritma dekripsi, memiliki 2 masukan yaitu teks sandi dan kunci rahasia.
Proses ini mengembalikan teks sandi menjadi teks asli.
2.1.2 Macam – macam algoritma kriptografi
Berdasarkan jenis kuncinya, algoritma kriptografi terbagi menjadi 3 bagian (Ariyus,
2006), yaitu:
- Algoritma Simetris (menggunakan satu kunci untuk enkripsi dan dekripsinya)
Universitas Sumatera Utara

10
- Algoritma Asimetris (menggunakan kunci yang berbeda untuk enkripsi dan
dekripsi)
- Hash Function
1. Algoritma Simetris
Algoritma simetris disebut juga algoritma konvensional atau Symetric
Cryptosystem adalah algoritma yang membuat kunci enkripsi sama dengan kunci
dekripsi. Jadi pembuat pesan dan penerima pesan harus memiliki kunci yang sama.
Keamanan algoritma simetris tergantung pada kuncinya.
Membocorkan kunci berarti siapa pun dapat mengekrip dan mendekrip
pesan. Agar kemunikasi tetap aman, kunci harus tetap dirahasiakan. Masalah yang
paling jelas di sini terkadang bukanlah masalah pengiriman ciphertext-nya,
melainkan masalah bagiamana menyampaikan kunci tersebut kepada pihak yang
diinginkan.
Berikut ini adalah skema algoritma simetris dengan menggunakan kunci
seperti terlihat pada gambar 2.2.
Gambar 2.2 Skema Algoritma Simetris
Tampak pada gambar 2.2, plainteks dienkripsi dengan kunci K dan menghasilkan
ciphertext. Lalu ciphertext dikirim ke penerima, sehingga penerima melakukan
dekripsi ciphertext dengan menggunakan kunci K yang tadi. Sehingga terlihat
bahwa proses enkripsi dan dekripsi menggunakan kunci K.
Terdapat beberapa kelebihan menggunakan algoritma simetris (Basri, 2016), yaitu:
- Kecepatan operasi lebih tinggi bila dibandingkan dengan algortima
asimetris walaupun hal ini berbanding lurus dengan penambahan ukuran
file.
- Kecepatan proses enkripsi/dekrispi bergantung pada besarnya ukuran file,
semakin besar ukuran file semakin banyak waktu yang dibutuhkan.
- Dengan kecepatan yang cukup tinggi, maka algoritma simetris cocok
digunakan pada sistem real-time seperti instant messaging.
Beberapa kekurangan dari algoritma simetris (Basri, 2016), yaitu:
Universitas Sumatera Utara

11
- Untuk tiap pengiriman pesan dengan pengguna yang berbeda dibutuhkan
kunci yang berbeda juga, sehingga akan terjadi kesulitan manajemen kunci
tersebut.
- Perlunya ada kesepatakan untuk jalur yang khusus untuk kunci, hal ini akan
menimbulkan masalah baru karena tidak mudah menentukan jalur yang
aman untuk kunci, masalah ini sering disebut dengan “Key Distribution
Problem”.
- Apabila kunci sampai hilang atau dapat ditebak maka kriptosistem ini tidak
akan aman lagi.
2. Algoritma Asimetris
Algoritma asimetris disebut juga sebagai kunci publik karena kunci yang
digunakan pada proses enkripsi dapat diketahui oleh orang banyak tanpa
membahayakan kerahasiaan kunci dekripsi sehingga sering disebut kunci publik,
sedangkan kunci yang digunakan untuk proses dekripsi hanya diketahui oleh pihak
yang tertentu (penerima) sehingga disebut kunci privat atau kunci rahasia.
Sebagai contoh, jika Bob mengirim pesan untuk Alice, Bob dapat merasa
yakin bahwa pesan tersebut hanya dapat dibaca oleh Alice, karena hanya Alice
yang bisa melakukan dekripsinya dengan kunci privatnya. Tentunya Bob harus
memiliki kunci public Alice untuk melakukan Enkripsi. Bob bisa mendapatkannya
dari Alice, atauapun dari pihak ketiga seperti Tari.
Algoritma asimetris dengan menggunakan kunci seperti terlihat pada gambar 2.3.
Gambar 2.3 Skema Algoritma Asimetri
Beberapa kelebihan dari algoritma asimetris (Ariyus, 2006), yaitu:
- Masalah keamanan pada distribusi kunci dapat diatasi
- Manajemen kunci pada suatu sistem informasi dengan banyak pengguna
menjadi lebih mudah, karena jumlah kunci yang digunakan lebih sedikit.
Kekurangan dari algoritma asimetris (Ariyus, 2016), yaitu:
- Kecepatan proses algoritma ini tergolong lambat bila dibandingkan dengan
algoritma kunci simetris
Universitas Sumatera Utara

12
- Untuk tingkat keamanan yang sama, rata – rata ukuran kunci harus lebih
besar dibandingkan dengan ukuran kunci yang dipakai pada algoritma
kunci simetris.
2.2 Hybrid Cryptosystem
Hybrid Cryptosystem atau kriptografi hibrida adalah salah satu yang
mengkombinasikan keamanan dari kriptografi kunci asimetris (public-key-
cryptosystem) dengan efisiensi dari kriptografi kunci simetris (symmetric-key-
cryptosystem) (Kuppuswamy, 2014).
Enkripsi hibrida dapat dilakukan dengan cara mengenkripsi kunci dari algoritma
simetris dengan kunci kunci publik dari algoritma asimetris. Kemudian, penerima pesan
akan mendekripsi kunci simetris dengan kunci privatnya. Penerima akan
mendekripsikan ciphertext, setelah kunci simetris berhasil didekripsi.
2.3 Algoritma Lehmann
Untuk menghasilkan sebuah kunci pada sistem kriptografi untuk kunci publik RSA
membutuhkan bilangan prima p dan q. Algoritma Lehmann dapat digunakan untuk
menguji apakah sebuah bilangan prima atau tidak.
Syarat pembangkit bilangan prima Lehmann adalah yaitu (Munir, 2016):
1. Bangkitkan bilangan acak a yang lebih kecil dari p.
2. Hitung 𝑎(𝑝−1)/2 mod p.
3. Jika 𝑎(𝑝−1)/2 ≡/ 1 atau -1 (mod p), maka p tidak prima.
4. Jika 𝑎(𝑝−1)/2 ≡ 1 atau -1 (mod p), maka peluang p bukan prima adalah 50%.
Sebagai contoh, akan diuji apakah bilangan 11 merupakan bilangan prima atau
komposit dengan menggunakan metode Lehmann.
Apakah 11 prima ?
p = 11
n = 2
α = (2
11) ≡ 2
11−1
2 ≡ 25 ≡ 32 − 33 = −1
p = 11 prima dengan kemungkinan >50%
ulangi pengujian dengan algoritma Lehmann diatas sebanyak t kali (dengan nilai a
yang berbeda). Jika hasil perhitungan langkah (b) sama dengan 1 atau -1, tetapi
Universitas Sumatera Utara

13
tidak selalu sam dengan 1, maka peluang p adalah prima mempunyai kesalahan
tidak lebih dari 1 2𝑡 ⁄ .
a = 3
α ≡ (3
11) ≡ 2
11−1
2 ≡ 35 ≡ 243 ≡ −1 (𝑚𝑜𝑑 11)
p ≡ 11 prima denga kemungkinan >50% + 1
2 . 50% = 75%
a = 4
α ≡ 4
11 ≡ 45 ≡ 1024 ≡ 1 ( 𝑚𝑜𝑑 11)
p = 11 prima dengan probabilitas >50% + 25% + 1
2 . 25% = 87,5%
2.4 Algoritma RSA Naïve
Algoritma RSA adalah algoritma kriptografi modern yang paling dikenal didalam
sejarah kriptografi modern. Algoritma RSA merupakan algoritma kriptografi asimetris
yang paling sering digunakan pada saat ini dikarenakan kehandalannya. RSA adalah
sistem kriptografi dengan kunci publik yang pertama kali dapat berjalan dan
dipraktekkan, ditemukan pada tahun 1977 dan dipublikasikan pada tahun 1978 oleh
Rivest, Shamir dan Adleman (RSA) di Institut Teknologi Massachusetts. RSA adalah
sistem kriptografi yang masih paling banyak digunakan seperti transaksi online, email,
kartu pintar dan umumnya pada aplikasi mobile commerce (Yan, 2008).
Panjang kunci dalam bit dapat diatur, dengan semakin panjang bit maka semakin
sukar untuk dipecahkan karena sulitnya memfaktorkan dua bilangan yang sangat besar
tersebut, tetapi juga semakin lama pada proses dekripsinya. Keamanan algoritma RSA
terletak pada sulitnya memfaktorkan bilangan yang besar menjadi faktor-faktor prima.
Pemfaktoran dilakukan untuk memperoleh kunci pribadi. Selama pemfaktoran bilangan
besar menjadi faktor-faktor prima yang belum ditemukan algoritma yang efektif, maka
selama itu pula keamanan algoritma RSA tetap terjamin.
Kata Naïve pada banyak algoritma seseorang akan dijumlah kedalam Naïve
Bayes merupakan pengklasifikasian dengan metode probabilitas dan statistik yang
dikemukakan oleh ilmuwan Inggris Thomas Bayes, yaitu memprediksi peluang di masa
depan berdasarkan pengalaman di masa sebelumnya sehingga dikenal sebagai teorema
Bayes. Teorema tersebut dikombinasikan dengan ”naive” dimana diasumsikan kondisi
antar atribut saling bebas.
Universitas Sumatera Utara

14
Penelitian ini menyajikan metode efektif yang menggabungkan teknik yang bisa
digunakan untuk menghasilkan pesan sehingga tidak dapat terbaca oleh pihak-pihak
yang tak diinginkan, tetapi masih dapat dimengerti oleh pihak yang dituju algoritma
RSA, salah satu algoritma kriptografi yang paling efektif dan umum digunakan dan
menambahkan lebih banyak langkah untuk mengurangi serangan. Serangan saluran
samping tidak akan terlalu efektif dalam teknik ini karena tingkat kekuatan dan
kebocoran yang digunakan untuk mengidentifikasi algoritma yang digunakan akan
bervariasi dari algoritma RSA. Jika penyusup diidentifikasi maka pengiriman bisa
dihentikan dan karena itu, dia tidak akan menerima keseluruhan pesan karena pesan
dikirim ke beberapa bagian. ini juga bisa berfungsi secara efektif berfungsi sebagai
software yang bisa digunakan untuk mengenkripsi / mendekripsi pesan
(Meenakshi,2014).
Proses pembangkitan kunci pada kriptografi RSA Naïve adalah sebagai berikut (Smart,
2016):
1. Pilih dua buah bilangan prima sembarangan p dan q. Jaga kerahasiaan p dan q.
2. Hitung 𝑛 = 𝑝. 𝑞 Besaran n ini tidak perlu dirahasiakan. (Sebaiknya p ≠ q, sebab
jika p = q maka n = p2 sehingga p dapat diperoleh dengan menarik akar pangkat
dua dari n).
3. Hitung ɸ (𝑛) = (𝑝 − 1). (𝑞 − 1). Sekali m telah dihitung, p dan q dapat dihapus
untuk mencegah diketahuinya oleh pihak lain.
4. Pilih sebuah bilangan acak untuk kunci publik, sebut namanya e, yang relatif prima
terhadap ɸ (relatif prima berarti GCD(𝑒, ɸ) = 1dengan syarat 1 < 𝑒 < ɸ(𝑛) .
5. Hitung kunci dekripsi d, dengan kekongruenan 𝑒. 𝑑 ≡ 1(𝑚𝑜𝑑 ɸ(𝑛)).
Hasil dari algoritma di atas:
- Kunci publik adalah pasangan (e, n)
- Kunci privat adalah pasangan (d, n)
Catatan: n tidak bersifat rahasia, namun ia diperlukan pada perhitungan
enkripsi/dekripsi.
Contoh penerapan pembangkitan kunci algoritma RSA Naïve :
1. Menetukan bilangan acak p dan q
p =47, q = 71
Universitas Sumatera Utara

15
2. Hitung n dan ɸ
n = 47 * 71 = 3337
ɸ(n) = (p – 1) (q – 1)
= (47 – 1) (71 – 1)
= 3220
3. Cari nilai e
ambil bilangan acak e dimana 1 < e < ɸ (n) adalah bilangan bulat lalu hitung nilai
GCD (e, ɸ) = 1 atau e relatif prima terhadap ɸ.
e = 79
GCD (79, 3220) = 1
4. Lalu cari nilai d
Hitung nilai d secara iterasi sampai pada keadaan dimana d.e ≡ 1 (mod ɸ (n))
d = 1019
e.d ≡ 1 (mod ɸ(n))
79.1019 ≡ 1 (mod 3220)
publik key = (e, n) = (79,3337)
private key = (d,n) = (1019,3337)
2.4.1. Proses enkripsi pada RSA Naïve
Proses enkripsi pesan menggunakan kunnci publik dari hasil pembangkitan
kunci dengan menggunakan rumus :
ci = mie mod n
Tahapan proses enkripsi:
1. Ambil kunci publik penerima pesan, e, dan modulus n.
2. Nyatakan plainteks mi menjadi blok – blok m1, m2, ..., sedemikian sehingga setiap
blok merepresentasikan nilai dalam selang [0, n - 1].
3. Setiap blok mi dienkripsi menjadi blok ci dengan rumus ci = mie mod n
Misalkan B mengirim pesan kepada A. Pesan (plainteks) yang akan dikirim ke A
adalah
m = HARI INI
atau dalam sistem desimal (pengkodean ASCII) adalah:
Universitas Sumatera Utara

16
7265827332737873
B memecah m menjadi blok yang lebih kecil, misalnya m dipecah menjadi enam blok
yang berukuran 3 digit:
m1 = 726 m4 = 273
m2 = 582 m5 = 787
m3 = 733 m6 = 003
Nilai – nilai mi ini masih terletak di dalam selang [0, 3337 - 1] agar transformasi menjadi
satu-ke-satu.
B mengetahui kunci publik A adalah e = 79 dan n = 3337. A dapat mengenkripsikan
setiap blok plainteks sebagai berikut:
c1 = 72679 mod 3337 = 215; c2 = 58279 mod 3337 = 776;
c3 = 73379 mod 3337 = 1743 ; c4 = 27379 mod 3337 = 933;
c5 = 78779 mod 3337 = 1731 ; c6 = 00379 mod 3337 = 158
Sehingga cipherteks yang dihasilkan adalah:
c = 215 776 1743 933 1731 158
2.4.2. Proses dekripsi pada RSA Naïve
Untuk mengembalikan pesan ciphertext menjadi plaintext (pesan asli) adalah dengan
menggunakan rumus dekripsi RSA Naïve sebagai berikut :
mi = cid mod n
Dekripsi dilakukan dengan menggunakan kunci privat:
d = 1019
Blok – blok cipherteks didekripsikan sebagai berikut:
m1 = 2151019 mod 3337 = 726
m2 = 7761019 mod 3337 = 582
m3 = 17431019 mod 3337 = 733
…
Blok plainteks yang lain dikembalikan dengan cara serupa. Akhirnya kita memperoleh
kembali plainteks semula
m = 7265827332737873
Jika diubah dalam sistem pengkodean ASCII adalah:
m = HARI INI
Universitas Sumatera Utara

17
Dari hasi dekripsi diatas dapat dibuktikan bahwa hasil enkripsi pesan dapat didekripsi
kembali ke pesan asli.
2.5 Algoritma RC4+
RC4+ adalah salah satu jenis dari algoritma RC4. Di mana algoritma RC4+ merupakan
salah satu lagoritma kunci simetris yang berbentuk stream cipher yang melakukan
proses enkripsi/dekripsi dalam 1 byte dan menggunakan kunci yang sama.
Stream Cipher digunakan untuk mengenkripsi plaintext menjadi ciphertext bit
per bit (1 bit setiap kali transformasi) atau byte per byte (1 karakter = 1 byte). Struktur
dasar dari RC4+ sama seperti RC4 (Subhadeep, Santanu & Raghu, 2013). RC4
menggunakan variabel yang panjang kuncinya dari 1 sampai 256 bit yang digunakan
untuk menginisialisasikan tabel sepanjang 256 bit.
RC4+ menggunakan struktur seperti RC4 dan menambahkan beberapa operasi
untuk memperkuat cipher. Struktur ini mencoba untuk memanfaatkan poin yang baik
pada algoritma RC4 kemudian memberikan beberapa fitur tambahan untuk batas
keamanan yang lebih baik (Paul & Subhamoy, 2012) untuk mengatasi kelemahan RC4
itu sendiri seperti tingginya peluang untuk menghasilkan.
2.5.1 Key Scheduling Algorithm (KSA+)
KSA+ adalah KSA RC4 yang sudah dimodifikasi. KSA+ menggunakan tiga lapis key
scheduling. Lapisan pertama sama dengan KSA RC4 yang asli. Dalam tahap ini akan
diisi array sepanjang 256 elemen. Adapun KSA dari algoritma RC4+ Cipher sebagai
berikut:
Inisialisai
For i = 0,…,N – 1
S[i] = I;
j = 0;
Gambar 2.4. Inisialisasi KSA
Universitas Sumatera Utara

18
Lapisan 1 : Pengacakan Biasa
For i = 0, . . . ,N – 1
j = (j + S[i] + K[i] mod keylength);
Swap(S[i], S[j]);
Gambar 2.5. Pengacakan dasar di dalam KSA+
2.5.2 Pseudo Random Generation Algorithm (PRGA+)
PRGA dari RC4+ berbeda dengan PRGA dari RC4, meskipun dari pengembangan
RC4. Secara sistematis PRGA algoritma dari RC4+ dituliskan sebagai berikut:
Gambar 2.6. Pseudo Random Generation Algorithm (PRGA+)
Pada tabel di atas menunjukkan Pseudo Random Generation Algorithm (PRGA)
dari algoritma RC4+ cipher, dimana i dan j adalah 8-bit indeks array. S adalah semua
Input: Key-dependent scrambled permutation array S[0 . . .N − 1].
Output: Pseudo-random keystream bytes z.
Initialization:
i = j = 0;
For i = 0, . . . ,N – 1
i = i + 1;
j = j + S[i];
Swap(S[i], S[j]);
t = S[i] + S[j];
t′ = (S[i>>3 ⊕ j<<5] + S[i<<5 ⊕ j>>3 ]) ⊕ 0xAA;
t′′ = j + S[j];
Output z = (S[t] + S[t′]) ⊕ S[t′′];
Universitas Sumatera Utara

19
permutasi 256 yang mungkin terjadi, sedangkan << dan >> adalah left dan right shift,
⊕ adalah exclusive OR.
Contoh:
Misalkan kunci adalah 1, 2 dengan di dalam kode ASCII, 1 = 49 dan 2 =50. Tahap
pertama adalah KSA+. Di dalam KSA+ ada 3 layer, yaitu basic scrambling,
initialization vector dan zig – zag scrambling.
Berikut adalah perhitungannya:
Basic scrambling
j = (i + S[i] + K[i mod keylength]) mod 256
j = (0 + S[0] +K[0 mod 2]) mod 256
j = (0 + 0 + K[0]) mod 256
j = (0 + 0 + 49) mod 256
j = 49 mod 256
j = 49
Selanjutnya, tukarkan S[0] dengan S[49], maka nilai S[0] = 49 dan nilai dari
S[49]=0. Kemudian dengan nilai i = 1, lakukan perhitungan nilai j yang kedua
yaitu j = 49.
Proses perhitungan sebagai berikut :
j = (j+S[i]+K[i] ) mod 256
j = (49+S[1]+K[1]) mod 256
j = (49+1+50) mod 256
j = 100 mod 256
j = 100
Tukarkan nilai S[1] dengan S[100], sehingga nilai dari S[1] = 100 dan nilai dari
S[100] = 1. Kemudian dengan nilai i = 2, lakukan perhitungan nilai j ketiga,
yaitu j = 100. Proses perhitungan sebagai berikut :
j = ( j + S[i] + K[i mod keylength] ) mod 256
j = ( 100 + S[2] + K[2 mod 2] ) mod 256
j = ( 100 + 2 + K[0] ) mod 256
j = ( 100 + 2 + 49 ) mod 256
Universitas Sumatera Utara

20
j = 151 mod 256
j = 151
Tukarkan nilai S[2] dengan S[151], sehingga nilai dari S[2] = 151 dan nilai dari
S[151] = 2. Perhitungan akan terus dilakukan sampai i = 255. Setelah
mendapatkan hasil akhir tahap Key Scheduling Algorithm (KSA) maka
selanjutnya dilakukan proses enkripsi pesan. Pesan yang dienkripsi pada tahap
ini adalah nilai Red dari sebuah pixel. Jika Red = 121, maka perhitungan yang
akan dilakukan adalah :
i = ( i + 1 ) mod 256 = ( 0 + 1) mod 256 = 1
a = S[i] = S[1] = 100 (misalkan S[1] = 100)
j = ( j + a ) mod 256 = ( 0 + 100 ) mod 256 = 100
Tukarkan nilai S[i] dan S[j] dengan cara sebagai berikut:
b = S [j] = S [100] = 5 (misalkan S[100] = 5)
S[i] = b = S [1] = 5
S [j] = a = S [100] = 100
Setelah nilai i, j, a, b diketahui, dicari nilai c dengan rumus sebagai berikut :
c = ( S[((i<<5) ⊕ (j>>3)) mod 256] + S[((j<<5) ⊕ (i>>3)) mod 256]) mod
256
c = ( S[((1<<5) ⊕ (100>>3)) mod 256] + S[((100<<5) ⊕ (1>>3)) mod 256])
mod 256
c = ( S[(32 ⊕ 12) mod 256] + S[(3200 ⊕ 0) mod 256]) mod 256
c = ( S[44 mod 256] + S[3200 mod 256]) mod 256
c = ( S[44] + S[128]) mod 256
c = ( 100 + 102) mod 256 (misalkan S[44] = 100 dan S[128] = 102)
c = 202 mod 256
Universitas Sumatera Utara

21
c = 202
Setelah nilai c berhasil didapatkan, hitung nilai z dengan cara sebagai berikut:
z = ((S[(a+b) mod 256] +S[((c ⊕ 0xAA) mod 256)]) ⊕ S[j+b) mod 256]) mod
256
z = ((S[(100+5) mod 256] +S[((202 ⊕ 170 ) mod 256)]) ⊕ S[100+5) mod 256])
mod 256
z = ((S[105 mod 256] +S[(96 mod 256)]) ⊕ S[105] )mod 256
z = ((S[105 mod 256] +S[(96 mod 256)]) ⊕ S[105 mod 256]) mod 256
z = ((S[105] +S[96])⊕ S[105]) mod 256
(misalkan S[105]=96 dan S[96]=22)
z = ((96 +22) ⊕ 96) mod 256
z = (118 ⊕ 96) mod 256
z = 22 mod 256
z = 22
Lalu lakukan operasi XOR pada nilai P = 121 dengan nilai dari z = 22, yaitu:
01111001
00010110 ⊕
01101111 = 11110 dalam tabel ASCII merupakan karakter “o”.
Proses enkripsi telah berhasil dilakukan. Dekripsi adalah kebalikan dari proses
enkripsi.
2.6 Citra digital
2.6.1 Pengertian Citra Digital
Citra atau gambar dapat didefinisikan sebagai sebuah fungsi dua dimensi, f(f,y), di mana
x dan y adalah koordinat bidang datar, dan harga fungsi f di setiap pasangan koordinat
(x,y) disebut intensitas atau lebel keabuan (grey level) dari gambar di titik itu. Jika x,y
dan f semuanya berhingga (finite), dan nilainya diskrit, maka gambarnya disebut citra
digital (gambar digital) (Hermawati, 2013).
Universitas Sumatera Utara

22
Citra (image) sebagai salah satu komponen multimedia memegang peranan
sangat penting sebagai bentuk informasi visual. Sebuah gambar dapat memberikan
informasi yang lebih banayk daripada informasi tersebut disajikan dalam bentuk kata –
kata (tekstual)(Munir, R. 2004).
Citra digital dipetakan sebagai suatu gabungan titik – titik atau elemen (piksel).
Tiap piksel terdiri dari nilai warna (hitam, putih, derajat keabuan atau warna). Mode
warna yang paling sering dipakai adalah RGB. RGB adalah suatu mode warna yang
terdiri atas 3 buah warna: RED (merah), GREEN (hijau), dan BLUE (biru).
2.6.2 Format File Citra Digital
Beberapa format yang umum digunakan dalam pengolahan citra antara lain, yaitu:
- Format BMP
BMP adalah format gambar yang digunakan untuk menyimpan gambar digital
berupa bitmap dan merupakan file gambar yang tidak terkompresi.
- Format JPG
JPG (Joint Photographic Experts Assemble)adalah format gambar yang digunakan
untuk menyimpan gambar digital dan merupakan format file gambar yang
terkompresi.
- PNG (Portable Network Graphics) adalah salah satu format penyimpanan citra
yang menggunakan metode pemadatan yang tidak menghilangkan bagian dari citra
tersebut (Inggris lossless compression).
2.6.3 Enkripsi pada Citra Digital
Enkripsi citra merpuakan teknik untuk melindungi kerahasiaan citra dari pengaksesan
secara ilegal. Enkripsi diperlukan karena dalam era teknologi sekarang ini, citra digital
mudah disimpan atau ditransmisikan melalui salutran publik seperti internet (Munir,
2012).
Pengiriman citra digital melalui melalui jalur komunikasi yang tidak aman
seperti internet, rawan terhadap pengaksesan ilegal. Enkripsi citra (plain-image) ke
dalam bentuk visual lain yang tidak bermakna (cipher-image). Untuk melakukan
enkripsi citra, nilai RGB dari setiap piksel harus diketahui. Nilai dari RGB inilah yang
akan dimodifikasi dengan memasukkan algoritma kriptografi.
Universitas Sumatera Utara

23
Misalkan sebuah citra RGB dengan ukuran piksel 2 x 2, sehingga banyak piksel RGB
pada citra input tersebut adalah 2 x 2 x 3, yaitu 12 piksel. Citra tersebut diilustrasikan
oleh gambar di bawah ini:
Gambar 2.7. Ilustrasi Citra RGB
Adapun masing –masing nilai piksel pada citra input setelah diterjemahkan ke
dalam suatu matrik RGB, yaitu:
- Matrik R: [1, 103, 205, 12]
- Matrik G: [35, 137. 239, 13]
- Matrik B: [69, 171, 14, 15]
Kemudian nilai Red, Green, Blue akan enkripsi dengan algoritam kriptografi. Sehingga
citra tampak tidak memiliki arti, dapat diperlihatkan seperti pada gambar berikut:
Gambar 2.8. Diagram enkripsi-dekripsi citra digital
Universitas Sumatera Utara

24
2.7 Penelitian yang relevan
Penelitian yang berkaitan dengan algoritma RSA Naïve, algoritma RC4+, citra
digital dan instant messaging diantaranya :
1. Zainal Arifin (2009) dalam judul Studi Kasus Penggunaan Algoritma RSA
Sebagai Algoritma Kriptografi yang Aman: RSA dianggap sebagai algoritma
kriptografi yang paling aman saat ini. Hal ini dikarenakan belum ditemukannya
algoritma yang mangkus (efisien) untuk memecahkan sistem keamanan yang
diberikan oleh sistem RSA. Semakin panjang suatu kunci publik, maka usaha
yang harus dikeluarkan untuk memecahkan kunci tersebut akan lebih lama. Pada
saat ini dianjurkan untuk menggunakan sistem RSA dengan kunci publik 1024
bit.
2. Anil Kumar & Rohini Sharma (2013) pada judul A Secure Image Steganography
Based on RSA Algorithm and Hash-LSB Technique: Pada teknik pengamanan
citra juga menerapkan algoritma RSA yang berfungsi untuk mengamankan
pesan rahasia maka tidak mudah untuk memecah enkripsi tanpa kunci. Sebuah
teknik spesifik yang tertanam menggunakan hash function dan juga
menyediakan enkripsi data menggunakan algoritma RSA membuat sangat
bermanfaat dan terpercaya untuk mengirim informasi pada saluran atau internet
yang tidak aman.
3. Subhadeep Banik, Santanu Sarkar, & Raghu Kacker dalam judul Security
Analysis of the RC4+ Stream Cipher: RC4+ dikembangkan untuk mengatasi
kelemahan dari RC4, dan ternyata RC4+ hanya sedikit lebih lambat
dibandingkan dengan RC4 jika diterapkan dalam software. Sebelumnya RC4+
telah dikembangkan oleh Maitra & Paul (2008), dan penelitian ini lebih fokus
membahas kelemahan pada penelitian sebelumnya.
4. Subhadeep Banik, & Sonu Jha dalam penelitian yang berjudul Some Security
Results of the RC4+ Stream Cipher : membahas tentang keamanan dari
algoritma stream cipher RC4+ melawan serangan yang berbeda berdasarkan bias
dari byte output-nya itu sendiri. Ditambah lagi, pada penelitian ini juga dianalisis
keamanan dari cipher jika odd pads digunakan untuk menjadi parameter desain
dibandingkan dengan pad 0xAA digunakan di cipher yang asli. Algoritma RC4+
stream cipher menyediakan resistansi maksimum untuk membedakan serangan
jika pad digunakan sebagai parameter desain yang dibuat sama dengan 0x03.
Universitas Sumatera Utara

25
5. Satria Prayudi (2013) dalam judul Kombinasi Algoritma RSA 512-BIT dan One
Time Pad untuk Pengamanan Pesan pada NIC MESSEGER: kombinasi sistem
kriptografi kunci publik dan kunci simetris dapat diimplementasikan untuk
mengamankan pertukaran pesan yang memanfaatkan koneksi internet dari
proses penyadapan. Namun karakter pesan yang disimpan menjadi dua kali lipat
dari panjang pesan asli dan proses pengirimaan relatif lebih lama dibanding
tanpa menerapkan sistem kriptografi.
Universitas Sumatera Utara

BAB 3
ANALISIS DAN PERANCANGAN
3.1.Analisis Sistem
Analisis sistem bertujuan untuk memecah sistem ke dalam komponen-komponen
subsistem yang lebih kecil untuk mengetahui hubungan setiap komponen tersebut
dalam mencapai tujuan. Dalam tugas akhir ini, ada tiga fase analisis yaitu analisis
masalah, analisis kebutuhan dan analisis proses.
Analisis masalah bertujuan untuk mengidentifikasi masalah dan menemukan
penyebab atau akar dari masalah serta memahami kelayakan masalah. Analisis
kebutuhan dilakukan untuk menjelaskan fungsi-fungsi yang ditawarkan dan mampu
dikerjakan system, sedangkan analisis proses untuk memodelkan tingkah laku sistem.
3.1.1. Analisis Masalah
Saat ini keamanan dalam pengiriman pesan sangatlah rentan oleh pihak ketiga yang
ingin mengetahui isi pesan tersebut. Masalah utama yang diangkat didalam penelitian
ini adalah bagaimana mengamankan file gambar dengan tipe file jpg agar bisa aman
pihak – pihak yang punya tujuan tertentu untuk membuka file yang ada di database.
Dalam sistem ini, file akan diamankan dengan metode Hybrid cryptosystem, dimana file
akan diamankan oleh algoritma kunci simetris algoritma RC4+ dan kunci simetris
tersebut akan diamankan lagi dengan algoritma kunci asimetris RSA Naïve.
Masalah-masalah pada penelitian ini diidentifikasikan dengan menggunakan
diagram Ishikawa. Diagram Ishikawa atau sering dikenal dengan cause-and-effect
matrix adalah suatu alat visual untuk mengidentifikasi, mengksplorasi, dan secara grafik
menggambarkan secara detail semua penyebab yang berhubungan dengan suatu
permasalahan.
Permasalahan pada penelitian ini secara umum dapat ditunjukan pada diagram
Ishikawa pada gambar 3.1 berikut ini:
Universitas Sumatera Utara

27
Gambar 3.1 Diagram Ishikawa
Pada gambar 3.1 terlihat bahwa terdapat empat kategori penyebab masalah dari
penelitian. Masalah utama pada segi empat paling kanan (kepala ikan) yaitu
implementasi algoritma kriptografi simetris dan algoritma kriptografi asimetris dalam
skema super enkripsi yang berkaitan dengan user, material, metode dan sistem. Tanda
panah yang mengarah ke masing-masing kategori menggambarkan detail penyebab
masalah.
Pengiriman dan penerimaan pesan memungkinkan dapat bersifat tidak aman dan
rahasia. Oleh karena itu dibutuhkan proses pengamanan pesan dengan mekanisme
kriptografi yang disebut juga sistem kriptografi.
3.1.2. Analisis Kebutuhan
Dalam analisis kebutuhan sistem, terdapat dua bagian yaitu analisis kebutuhan
fungsional dan non-fungsional. Kebutuhan fungsional mendeskripsikan fungsi-fungsi
yang harus dilakukan oleh sebuah sistem untuk mencapai tujuan. Sedangkan
kebutuhan non-fungsional mendeskripsikan fitur lain seperti karakteristik, batasan
sistem, performa, dokumentasi dan yang lainnya agar sistem berjalan sukses.
a. Kebutuhan Fungsional
Kebutuhan fungsional yang harus dipenuhi dari sistem yang mengimplementasikan
algoritma RSA - Naïve dan algoritma RC4+ dalam skema super enkripsi adalah sebagai
berikut :
Universitas Sumatera Utara

28
1. Menerima input citra .jpg
Sistem mencari dan meng-upload file citra yang berekstensi .jpg yang tersimpan
pada perangkat smartphone yang digunakan.
2. Mengubah input citra menjadi plainteks
Sistem mengubah input citra yang berektensi .jpeg menjadi plainteks secara
otomatis.
3. Membangkitkan kunci
Sistem membangkitkan kunci secara acak untuk digunakan sebagai kunci
algoritma RSA - Naïve dan algoritma RC4+.
4. Mengenkripsi pesan
Sistem mengenkripsi pesan dengan kunci yang telah ada menggunakan
algoritma RC4+ untuk enkripsi pertama dan RSA - Naïve untuk enkripsi kedua.
5. Menyimpan hasil enkripsi
Sistem menyimpan pesan yang telah dienkripsi beserta kunci ke dalam database.
6. Mendekripsi pesan
Sistem mendekripsi pesan dengan kunci yang tersimpan menggunakan
algoritma RC4+ untuk enkripsi pertama dan RSA - Naïve untuk enkripsi kedua.
7. Mengubah pesan plainteks menjadi citra .jpeg
Sistem mengubah plainteks yang telah didekripsi dengan algoritma yang
digunakan menjadi citra .jpeg.
8. Menampilkan citra .jpeg
Sistem menampilkan citra .jpeg ke dalam aplikasi perangkat smartphone yang
digunakan.
b. Kebutuhan non - fungsional
Kebutuhan non - fungsional dari sistem meliputi karakteristik sebagai berikut :
1. Performa
Sistem dibangun untuk dapat menampilkan dan menyimpan pesan gambar hasil
dari fungsi kriptografi yang dilakukan.
2. Mudah digunakan dan dimengerti
Sistem yang akan dibangun menggunakan desain yang user friendly dan
responsif.
Universitas Sumatera Utara

29
3. Manajemen kualitas
Sistem yang akan dibangun memiliki kualitas yang baik yaitu hasil setelah
didekripsi dan disimpan di database sama dengan citra yang asli.
4. Panduan
Sistem yang akan dibangun memiliki panduan penggunaan.
5. Pengendalian
Untuk setiap input yang tidak sesuai, sistem yang dibangun akan menampilkan
pesan error.
3.1.3. Diagram Umum
Diagram umum dapat digunakan untuk mendekripsikan jalannya sistem secara
keseluruhan. Diagram umum ini juga dapat menjadi tumpuan untuk pembuatan
pemodelan sistem. Diagram umum dapat dilihat pada gambar 3.2.
Gambar 3.2 Diagram Umum
Gambar 3.2 menjelaskan bahwa ciphertext yang dihasilkan adalah hasil dari
proses enkripsi oleh pengirim pesan dengan menggunakan algoritma RC4+. Selanjutnya
pengirim pesan akan melakukan enkripsi dengan algoritma RSA - Naïve yang kemudian
menghasilkan cipherkey. Proses selanjutnya adalah proses dekripsi cipherkey oleh
penerima pesan dengan menggunakan algoritma RSA – Naïve. Proses ini kemudian
Universitas Sumatera Utara

30
menghasilkan kembali key untuk digunakan algoritma RC4+. Proses yang terakhir
adalah dekripsi oleh penerima pesan yang dilakukan dengan menggunakan algoritma
RC4+ yang menghasilkan plaintext yang dikirimkan oleh pengirim pesan.
3.1.4. Pemodelan Sistem
Untuk meggambarkan kerja dari sistem yang akan dibuat, maka akan dibuat pemodelan
sistem dengan menggunakan diagram UML (Unified Modelling Language). Diagram
UML yang digunakan adalah Use Case Diagram, Activity Diagram dan Sequence
Diagram.
a. Diagram Use Case
Tujuan dari diagram use case yaitu untuk menggambarkan siapa saja yang berhubungan
dengan sistem dan apa saja yang dapat dilakukan oleh sistem. Diagram use case
biasanya menggambarkan kebutuhan fungsional yang telah dipaparkan. Pada penelitian
ini diagram use case dapat ditunjukkan pada gambar 3.3.
Gambar 3.3 Diagram use case
Universitas Sumatera Utara

31
Pada gambar 3.3 menjelaskan bahwa sistem diakses oleh dua aktor yang
dinamakan “pengirim” dan “penerima”, kemudian terdapat 6 use case utama pada
sistem yaitu sign up, login, send image, receive image, timeline, logout. Di mana pada
use case send image dan receive image memerlukan use case encryption dan
decryption. Pada tahap inilah proses pengamanan file citra dengan algoritma kriptografi
dilakukan.
b. Diagram Aktivitas
Activity Diagram (diagram aktivitas) menggambarkan aliran kerja atau interaksi
aktivitas antara pengirim dan sistem dari sebuah sistem atau perangkat lunak yang
dikembangkan, dari aktivitas mulai, decision yang mungkin terjadi sampai aktivitas
berhenti.
Gambar 3.4 Diagram aktivitas pada tahap enkripsi
Aktivitas pengirim ditunjukkan pada gambar 3.4 kotak paling kiri sedangkan respon
oleh sistem yang dikerjakan ditunjukkan pada kotak paling kanan.
Universitas Sumatera Utara

32
Pada gambar 3.4, terlihat bahwa sistem melakukan proses enkripsi pesan pada
file citra .jpg dengan cara meng-upload file citra yang ada pada perangkat terlebih
dahulu. Kemudian sistem akan mengubah gambar menjadi plainteks sekaligus meng-
generate key kunci untuk algoritma RC4+ dan algoritma RSA - Naïve.
Proses selanjutnya yaitu melakukan enkripsi algoritma RC4+ dan sistem akan
menghasilkan ciphertext pertama hasil dari enkripsi algoritma tersebut. Setelah
mendapatkan ciphertext, maka sistem akan melakukan enkripsi untuk key dengan
algoritma RSA – Naïve sehingga menghasilkan cipherkey. Langkah terakhir untuk
proses enkripsi adalah dengan menyimpan file hasil enkripsi ke dalam database.
Gambar 3.5 Diagram aktivitas untuk proses dekripsi
Proses dekripsi pesan ditunjukkan pada gambar 3.5. Proses dekripsi dilakukan
dengan cara membuka aplikasi terlebih dahulu kemudian mengakses file enkripsi yang
tersimpan di database. Sistem akan sendirinya melakukan dekripsi cipherkey
menggunakan algoritma RSA – Naïve. Setelah cipherkey didekripsi maka akan menjadi
key yang akan digunakan untuk dekripsi RC4+, maka plainteks pun dapat. Langkah
selanjutnya adalah mengubah plainteks menjadi citra atau gambar dengan ekstensi
.jpeg. Selanjutnya citra yang telah didapat ditampilkan di timeline aplikasi Instant
Messaging
Universitas Sumatera Utara

33
c. Diagram Sequence
Sequence diagram merupakan suatu diagram yang bertujuan untuk menggambarkan
interaksi antara objek dengan apa yang akan dilakukan sistem dalam sebuah urutan
waktu. Sistem ini menggunakan algoritma RC4+ dan algoritma RSA – Naïve. Algoritma
RC4+ terlebih dahulu digunakan pada proses enkripsi kemudian dilanjutkan dengan
algoritma RSA – Naïve.
Pada gambar 3.6 terlihat sequence diagram untuk proses enkripsi antara user
yang menjadi aktor dengan sistem yang akan dibangun. Aktivitas yang terjadi ketika
aktor atau objek berinteraksi ke objek lain digambarkan dengan tanda panah garis
penuh, sedangkan garis putus-putus menggambarkan respon sistem terhadap aktor.
Gambar 3.6 Diagram sequence untuk proses enkripsi
Hasil dari enkripsi dapat disimpan untuk proses dekripsi. Untuk sequence
diagram proses dekripsi dapat dilihat pada gambar 3.7 pada halaman selanjutnya.
Universitas Sumatera Utara

34
Gambar 3.7 Diagram sequence untuk proses dekripsi
Gambar 3.7 menjelaskan tentang sequence diagram proses dekripsi. Dapat diliat
bahwa sequence diagram enkripsi dan dekripsi berbeda. Pada proses dekripsi tidak
menggunakan pengacakan kunci melainkan menggunakan kunci yang digunakan pada
saat enkripsi yang sebelumnya disimpan di database agar mendapatkan plaintext awal.
Kemudian selanjutnya, plaintext yang didapat hasil dari dekripsi diubah kembali
menjadi citra dengan tipe file .jpg.
3.1.5. Flowchart
Terdapat beberapa flowchart pada pembangunan sistem ini, yaitu : flowchart sistem,
flowchart algoritma RC4+ dan flowchart algoritma RSA – Naïve.
a. Flowchart Sistem
Flowchart sistem yang akan dibangun ditunjukkan pada gambar 3.8 yang menunjukkan
urutan-urutan dari prosedur yang ada di dalam sistem secara sistematis. Secara umum,
Universitas Sumatera Utara

35
sistem memiliki empat halaman utama yang dapat dipilih pada sistem oleh user, yaitu
halaman timeline, enkripsi, dekripsi, help, dan about:
Gambar 3.8 Flowchart sistem
Pada gambar 3.8, flowchart menunjukkan proses dimulai dari membuka halaman
timeline. Pada halaman ini ditampilkan seluruh file citra jpg yang hasil dekripsi dari
database. Dari halaman ini, terdapat beberapa pilihan akses ke halaman lain seperti:
halaman help, halaman about, halaman detail image, serta pilihan untuk logout.
Proses kirim foto dimulai dengan menekan button “Kirim Foto”, kemudian
memilih citra dengan resolusi tidak lebih besar dari 500 x 500 piksel dengan ekstensi
file .jpg. Proses enkripsi dilakukan dengan melakukan konversi file citra ke plainteks
yaitu string Base64, kemudian disimpan di database. Proses dekripsi dilakukan setelah
mengambil file pesan yang tersimpan dari database.
Universitas Sumatera Utara

36
b. Flowchart Algoritma RC4+
Flowchart algoritma RC4+ bekerja ditunjukkan pada gambar 3.9. Pada algoritma RC4+
proses enkripsi dan dekripsi tidak berbeda atau sama. Bagian kiri flowchart terdapat
perulangan untuk proses Key Scheduling Algorithm (KSA) sedangkan bagian kanan
merupakan proses Pseudo-Random Generation Algorithm atau PGRA.
Gambar 3.9 Flowchart Algoritma RC4+ Cipher
Proses enkripsi dengan algoritma RC4+ dilakukan dengan memilih plainteks terlebih
dahulu kemudian melakukan pengacakan kunci. Proses enkripsi dimulai dari inisialisasi
nilai ASCII ke array 256 dari i = 0 ... i = 255 dan menghitung nilai j = S[i]+j+kunci[i
mod key.length] mod 256. Kemudian nilai dari S[i] dan S[j] akan ditukar. Proses ini
dilakukan dari 1 sampai mencapai nilai 255, kemudian dilakukan pencarian nilai c dan
z setelah itu nilai yang didapat akan dikonversi menjadi karakter ASCII.
Universitas Sumatera Utara

37
c. Flowchart Algoritma RSA Naïve
Gambar 3.10 Flowchart enkripsi algoritma RSA Naïve
Gambar 3.10 menunjukkan flowchart enkripsi algoritma RSA Naïve yang di awali
dengan input plaintext , nilai p, q, e, dan d. Dimana p dan q merupakan bilangan prima
Dimana dari enkripsi RSA Naïve tersebut akan menghasilkan ciphertext.
Untuk mendapatkan plaintext kembali maka dilakukan proses dekripsi
ciphertext. Proses dekripsi juga memerlukan kunci ciphertext atau cipherkey yang
tersimpan sebelumnya. Kemudian didekripsi dengan mengunakan nilai n dan d
Flowchart dekripsi algoritma RSA Naïve ditunjukkan pada gambar 3.11.
Universitas Sumatera Utara

38
Gambar 3.11 Flowchart dekripsi algoritma RSA Naïve
Proses dekripsi dengan algoritma RSA-Naïve seperti ditunjukkan pada gambar 3.11
dimulai dengna membaca nilai ciphertext, kunci publik n, dan kunci privat d.
Selanjutnnya melakukan proses dekripsi dengan rumus:
M = Cd mod N
Nilai M yang didapat kemduian di-decode menjadi plainteks.
3.2.Perancangan Interface
Sistem akan dibangun pada platform mobile application dengan menggunakan bahasa
pemrograman Java dan mengunakan IDE Android Studio. Rancangan interface akan
disesuaikan dengan kebutuhan dan software yang digunakan.
Perancangan interface dibuat agar mudah dalam pembangunan sistem. Sistem akan
memiliki lima mock-up. Lima mock-up tersebut adalah splash screen, halaman timeline,
detail image info & processing, kotak dialog about, dan halaman bantuan.
Universitas Sumatera Utara

39
a. Halaman Awal
Pada halaman awal ini kita dapat melihat nama dan logo aplikasi dengan durasi tertentu
akan beralih kepada halaman timeline. Halaman awal ditunjukkan pada gambar 3.12.
Gambar 3.12 Perancangan interface halaman awal (splash screen)
Keterangan gambar:
1. ImageView (Logo Aplikasi) : digunakan untuk logo sistem
2. Textview (Nama Aplikasi) : digunakan untuk nama sistem
Universitas Sumatera Utara

40
b. Halaman Tampilan Beranda (timeline)
Halaman beranda (timeline) berisi gambar dan informasi gambar hasil dekripsi dari
database. Halaman beranda terlihat pada gambar 3.13.
Gambar 3.13 Perancangan interface Halaman Beranda (Timeline)
Keterangan gambar:
1. TitleBar (Timeline) : berfungsi untuk menampilkan judul halaman
2. ActionBar (Logout ) : berfungsi untuk keluar dari halaman
3. ActionBar (Menu) : berfungsi untuk menampilkan menu
4. ImageView : berfungsi untuk menampilkan gambar
5. Acvitivy (Konten) : berfungsi sebagai tempat pesan yang terkirim.
6. Button (Add) : digunakan untuk menambah foto yang dikirim dan
sekaligus disimpan di database
Universitas Sumatera Utara

41
c. Halaman Info Detail tentang Citra
Dari halaman timeline, jika gambar diklik maka ditampilkan halaman baru yaitu
halaman info detail tentang citra. Pada halaman ini ada nama pengirim, waktu kirim,
resolusi citra, ukuran citra, info tentang proses enkripsi – dekripsi serta ciphertext
Halaman info detail tentang gambar digambarkan pada interface seperti gambar 3.14.
Gambar 3.14 Perancangan interface halaman info detail tentang gambar
Keterangan gambar:
1. Title Bar (Detail) : berfungsi untuk menampilkan judul halaman
2. Textview : berfungsi untuk menampilkan data pengiriman citra
3. ImageView : berfungsi untuk menampilkan gambar yang diklik dari
timeline
4. Button (Image Info) : digunakan untuk menampilkan kotak dialog detail
proses enkripsi-dekripsi
Universitas Sumatera Utara

42
5. Button (Cipher Text) : digunakan untuk menampilkan kotak dialog ciphertext
d. Kotak dialog About
Kotak dialog about merupakan kotak dialog untuk menampilkan info tentang pembuat
sistem, tahun pembuatan dan juga versi. Gambar 3.16 merupakan rancangan interface
kotak dialog about.
Gambar 3.15 Perancangan kotak dialog about
Keterangan gambar:
1. AlertDialog (About) : berfungsi untuk menampilkan informasi tentang
pembuat aplikasi, jurusan dan kampus pembuat aplikasi, tahun pembuatan dan
versi aplikasi
2. NegativeButton (Close) : berfungsi untuk menutup kotak dialog about
Universitas Sumatera Utara

43
e. Halaman Help
Halaman help merupakan halaman untuk menampilkan panduan penggunaan aplikasi.
Gambar 3.17 merupakan rancangan interface halaman bantuan.
Gambar 3.16 Perancangan interface halaman bantuan
Keterangan gambar:
1. TitleBar : berfungsi untuk menampilkan halaman bantuan
2. TextView : berfungsi untuk menampilkan teks panduan.
Universitas Sumatera Utara

BAB 4
IMPLEMENTASI DAN PENGUJIAN
4.1.Implementasi
Dalam penelitian ini, sistem dibangun dengan menggunakan bahasa pemrograman Java
dan IDE Android Studio 2.3.3. Terdapat lima halaman utama dalam sistem yang
dibangun, yaitu splash screen sebagai tampilan awal untuk menampilkan judul aplikasi,
halaman timeline untuk menampilkan citra dari database yang telah dekripsi, halaman
detail untuk menampilkan informasi detail tentang citra, halaman bantuan untuk
menampilkan informasi tentang cara penggunaan aplikasi, halaman about untuk
menampilkan informasi tentang pembuat sistem dan tahun pembuatan.
Sistem implementasi algoritma RC4+ dan algoritma RSA Naïve dalam konsep
hybrid ini diberi nama “ImageChat”.
4.1.1. Halaman Awal
Gambar 4.1 Tampilan Halaman Awal Sistem
Universitas Sumatera Utara

45
Halaman awal merupakan tampilan halaman yang muncul ketika user pertama kali
menjalankan sistem. Tampilan halaman awal dapat dilihat pada citra 4.1. Pada citra 4.1
terlihat tampilan halaman awal sistem yang berisi logo dan nama aplikasi.
4.1.2. Halaman Timeline
Halaman ini berfungsi untuk menampilkan citra hasil dekripsi dari database. Jadi semua
citra hasil dekripsi dari database akan ditampilkan di halaman timeline. Selain citra,
halaman timeline juga menampilkan nama pengirim, waktu dan tanggal kirim citra.
Halaman ini akan menjadi home dari aplikasi ini. Tampilan halaman timeline dapat
dilihat pada citra 4.2.
Gambar 4.2 Tampilan Halaman Timeline
4.1.3. Halaman Detail
Untuk memberikan informasi detail tentang data file citra yang tersimpan di databse
yang telah dienkripsi. Tampilan halaman detail algoritma ditunjukkan pada citra 4.3.
Universitas Sumatera Utara

46
Gambar 4.3 Tampilan Halaman Detail
Pada citra 4.3 terlihat halaman untuk menampilkan data dari database yang telah
dekripsi kembali menjadi file citra. Pada halaman ditampilkan citra, nama pengirim,
waktu pengiriman, resolusi dan ukuran citra. Di halaman ini juga ada 2 button yaitu
button image info dan button cipher text.
Button image info berfungsi untuk menampilkan informasi tentang tahap proses
enkripsi – dekripsi file citra, seperti cipher key, public key, private key, waktu enkripsi
citra, waktu dekripsi citra, waktu enkripsi key, waktu dekripsi key. Button cipher text
berfungsi untuk menampilkan cipher text hasil enkripsi citra menggunakan algoritma
RC4+.
4.1.4. Halaman Bantuan
Halaman bantuan berfungsi untuk menampilkan cara penggunaan sistem. Tampilan
Halaman Bantuan dapat dilihat pada citra 4.4.
Universitas Sumatera Utara

47
Gambar 4.4 Tampilan Halaman Bantuan
Citra 4.4 terlihat tampilan halaman bantuan untuk cara penggunaan sistem.
Panduannya yaitu mulai dari Sign Up, Sign In, kirim foto, proses enkripsi, about,
bantuan, dan exit.
4.1.5. Halaman About
Halaman about berisi tentang profil pembuat sistem dan tahun pembuatan. Tampilan
halaman dekripsi dapat dilihat pada citra 4.5.
Gambar 4.5 Tampilan Halaman About
Universitas Sumatera Utara











58
d = 100
i = 105
Dengan nilai i =0, dilakukan perhitungan nilai j yang pertama melalui perhitungan
berikut:
j = (j + S[i] + key[i mod keylength]) mod 256
j = (0 + S[0] + key[0 mod 5]) mod 256
j = (0 + 0 + key[0]) mod 256
j = (0 + 0 + 110) mod 256
j = 110 mod 256 = 110
Nilai S[0] ditukar dengan nilai S[110], maka nilai S[0] berubah menjadi 110 dan nilai
S[110] berubah menjadi 0.
Kemudian nilai i yang berikutnya i=1, dilakukan perhitungan untuk nilai j = 110. Proses
perhitungan adalah sebagai berikut ini:
j = (j + S[i] + key[i mod keylength]) mod 256
j = (110 + S[1] + key[1 mod 5]) mod 256
j = (110 + 1 + key[1]) mod 256
j = (110 + 1 + 97) mod 256
j = 108 mod 256 = 108
Nilai S[1] ditukar dengan nilai S[108], maka nilai S[1] berubah menjadi 108 dan nilai
S[108] berubah menjadi 1.
Perhitungan pada i=2:
j = (j + S[i] + key[i mod keylength]) mod 256
j = (108 + S[2] + key[2 mod 5]) mod 256
j = (108 + 2 + key[2]) mod 256
j = (108 + 2 + 108) mod 256
j = 218 mod 256 = 218
Maka S[2] = 218 dan S[218] = 2.
Perhitungan pada i=3:
j = (j + S[i] + key[i mod keylength]) mod 256
j = (218 + S[3] + key[3 mod 5]) mod 256
j = (218 + 3 + key[3]) mod 256
j = (218 + 3 + 100) mod 256
j = 321 mod 256 = 65
Universitas Sumatera Utara

59
Maka S[3] = 65 dan S[65] = 3.
Perhitungan pada i=4:
j = (j + S[i] + key[i mod keylength]) mod 256
j = (65 + S[4] + key[4 mod 5]) mod 256
j = (64 + 4 + key[4]) mod 256
j = (64 + 4 + 105) mod 256
j = 173 mod 256 = 173
Maka S[4] = 173 dan S[173] = 4.
Proses perhitungan j dilakukan hingga i mencapai nilai 255. State akhir yang didapat
dalam tahap KSA setelah i mencapai nilai 255 ditunjukkan pada tabel berikut ini:
Tabel 4.3 Hasil Akhir Tahap Key Scheduling Algorithm (KSA)
0 1 2 3 4 5 6 7 8 9 10 11 12 13
54 143 102 118 18 133 89 234 85 175 65 94 153 202
14 15 16 17 18 19 20 21 22 23 24 25 26 27
142 150 111 6 190 78 141 200 26 197 157 41 188 132
28 29 30 31 32 33 34 35 36 37 38 39 40 41
79 230 97 170 80 220 103 248 125 59 140 15 12 115
42 43 44 45 46 47 48 49 50 51 52 53 54 55
67 154 139 156 108 66 100 244 148 47 155 30 110 177
56 57 58 59 60 61 62 63 64 65 66 67 68 69
138 209 14 55 27 227 217 83 71 45 22 221 93 63
70 71 72 73 74 75 76 77 78 79 80 81 82 83
236 144 74 195 122 251 168 178 1 38 191 203 0 128
84 85 86 87 88 89 90 91 92 93 94 95 96 97
172 16 109 215 159 104 255 43 131 210 49 69 73 24
98 99 100 101 102 103 104 105 106 107 108 109 110 111
28 34 231 62 20 77 179 245 98 187 242 130 81 127
112 113 114 115 116 117 118 119 120 121 122 123 124 125
127 185 50 117 123 64 165 87 201 163 137 222 218 166
126 127 128 129 130 131 132 133 134 135 136 137 138 139
58 75 219 5 136 76 145 253 36 7 149 121 2 180
140 141 142 143 144 145 146 147 148 149 150 151 152 153
152 124 88 44 147 146 207 205 239 68 164 233 184 51
154 155 156 157 158 159 160 161 162 163 164 165 166 167
212 21 160 167 161 37 23 25 4 116 241 129 192 60
168 169 170 171 172 173 174 175 176 177 178 179 180 181
Universitas Sumatera Utara

60
46 158 39 193 199 29 134 126 72 3 53 247 151 246
182 183 184 185 186 187 188 189 190 191 192 193 194 195
70 189 48 232 183 250 176 173 214 10 17 113 96 35
196 197 198 199 200 201 202 203 204 205 206 207 208 209
243 194 186 42 224 229 114 240 213 226 99 211 237 119
210 211 212 213 214 215 216 217 218 219 220 221 222 223
169 91 56 235 84 57 249 162 238 174 90 92 112 40
224 225 226 227 228 229 230 231 232 233 234 235 236 237
107 120 252 9 198 182 196 11 135 208 95 225 31 106
238 239 240 241 242 243 244 245 246 247 248 249 250 251
82 181 171 254 228 52 33 105 86 101 216 13 8 32
252 253 254 255
19 61 223 28
Pada tabel 4.3 di atas, yang berwarna biru menunjukkan nilai i, sedangkan nilai
dari S[i] ditunjukkan oleh baris yang berwarna putih.
Hasil akhir pada tabel 4.3 diatas adalah hasil dari perulangan sebanyak nilai k=1 kali.
Di sini penulis menggunakan KSA+, dimana perulangan itu dilakukan sebanyak k>1.
Pada kasus ini dilakukan untuk perulangan k = 3, jadi didapat nilai akhir KSA jika k=2
seperti berikut ini:
[234, 188, 128, 152, 97, 6, 240, 244, 140, 148, 142, 249, 182, 40, 84, 104, 39, 209, 173, 153,
81, 49, 63, 218, 178, 162, 83, 200, 79, 122, 165, 191, 93, 50, 43, 55, 164, 58, 86, 130, 154, 176,
108, 179, 210, 20, 155, 252, 7, 242, 171, 100, 185, 45, 221, 85, 126, 21, 213, 197, 94, 74, 127,
101, 248, 231, 88, 215, 22, 224, 0, 59, 35, 23, 14, 131, 134, 223, 175, 228, 36, 233, 222, 229,
144, 193, 1, 192, 158, 216, 11, 117, 204, 29, 225, 114, 54, 159, 203, 136, 118, 230, 202, 62, 16,
24, 27, 119, 113, 107, 66, 89, 70, 251, 109, 255, 167, 184, 95, 112, 64, 48, 121, 124, 237, 146,
26, 53, 60, 168, 241, 166, 47, 68, 98, 37, 149, 87, 226, 245, 116, 75, 18, 5, 99, 141, 157, 208,
73, 77, 232, 190, 32, 186, 187, 151, 243, 250, 17, 111, 34, 174, 239, 219, 220, 199, 69, 42, 137,
180, 189, 253, 90, 31, 177, 56, 120, 57, 227, 156, 44, 91, 161, 96, 110, 183, 236, 212, 211, 139,
206, 195, 214, 82, 247, 163, 138, 71, 102, 78, 80, 15, 129, 72, 76, 133, 160, 13, 8, 150, 67, 41,
246, 123, 106, 196, 194, 181, 145, 103, 115, 12, 238, 51, 201, 207, 92, 9, 65, 3, 235, 125, 33,
105, 25, 2, 170, 143, 135, 198, 38, 254, 217, 61, 4, 169, 205, 52, 46, 28, 172, 132, 147, 10, 19,
30]
Berikut ini nilai akhir KSA dengan k = 3:
0 1 2 3 4 5 6 7 8 9 10 11 12 13
52 51 246 78 214 181 67 105 104 43 111 101 200 94
14 15 16 17 18 19 20 21 22 23 24 25 26 27
143 213 173 110 153 185 47 119 5 176 224 237 13 223
28 29 30 31 32 33 34 35 36 37 38 39 40 41
247 228 205 118 248 250 232 58 156 216 245 19 1 253
Universitas Sumatera Utara

61
42 43 44 45 46 47 48 49 50 51 52 53 54 55
198 29 207 49 114 152 171 75 149 252 170 146 183 98
56 57 58 59 60 61 62 63 64 65 66 67 68 69
230 235 33 226 59 124 88 28 81 190 174 65 225 40
70 71 72 73 74 75 76 77 78 79 80 81 82 83
136 57 121 212 187 217 127 60 32 231 148 211 255 155
84 85 86 87 88 89 90 91 92 93 94 95 96 97
113 162 80 26 239 131 167 36 238 140 66 74 89 112
98 99 100 101 102 103 104 105 106 107 108 109 110 111
38 92 37 24 178 109 93 147 132 138 188 64 194 165
112 113 114 115 116 117 118 119 120 121 122 123 124 125
137 161 241 154 70 46 244 195 4 166 85 41 159 44
126 127 128 129 130 131 132 133 134 135 136 137 138 139
83 79 7 99 3 206 150 145 135 218 14 25 139 186
140 141 142 143 144 145 146 147 148 149 150 151 152 153
221 142 22 106 86 180 208 202 191 20 50 82 133 234
154 155 156 157 158 159 160 161 162 163 164 165 166 167
72 229 95 184 219 160 9 242 182 97 76 129 87 199
168 169 170 171 172 173 174 175 176 177 178 179 180 181
243 126 128 115 61 125 73 68 45 84 69 0 220 55
182 183 184 185 186 187 188 189 190 191 192 193 194 195
31 227 30 163 130 172 123 201 102 39 15 196 209 192
196 197 198 199 200 201 202 203 204 205 206 207 208 209
164 120 100 48 189 77 103 203 141 157 108 21 16 35
210 211 212 213 214 215 216 217 218 219 220 221 222 223
254 116 12 17 91 151 215 6 11 62 134 158 240 122
224 225 226 227 228 229 230 231 232 233 234 235 236 237
34 107 71 204 90 18 179 23 96 251 169 249 168 54
238 239 240 241 242 243 244 245 246 247 248 249 250 251
2 10 144 222 177 42 193 27 63 53 56 8 233 210
252 253 254 255
175 117 236 197
b. Tahap Pseudo Random Generation Algoritma (PRGA+)
Pada tahap PRGA, pesan akan dienkripsi. Pesan yang dienkripsi adalah string Base64
hasil konversi dari citra .jpg yang berukuran 20 x 20 piksel. Karena hasil konversi citra
ke string Base64 menghasilkan 1787 karakter, maka penulis melakukan enkripsi pada
karakter pertama, tengah, dan terakhir yaitu karakter ke-1, ke-894, dan ke-1787 yaitu:
“/9k”.
Karakter “/”
Universitas Sumatera Utara

62
Dilakukan inisialisasi pada nilai i dan j sama dengan 0. Kemudian inisialisasi a = S[i]
dan b = S[j]. Selanjutnya lakukan perhitungan i, j, a,b,c dan z yang baru dengan cara:
i = (i+1) mod 256 = (0+1) mod 256 = 1
a=S[i] = S[1] = 51
j = (j + a) mod 256 = (0+51) mod 256 = 51
Selanjutnya tukarkan nilai S[i] dan S[j] dengan cara sebagai berikut
b=S[j] = S[51] =252
S[i]=b = S[1] =252
S[j]=a = S[252] =51
Dari perhitungan di atas didapatkan S[1]=252 dan S[252]=51. Selanjutnya hitung nilai
c dengan cara:
𝑐 = (𝑆[((i≪5) (j≫3)) mod 256] + 𝑆[((j≪5) (i≫3)) mod 256]) mod 256
𝑐 = (S[((1≪5) (252≫3)) mod 256] + S[((252≪5) (1≫3)) mod 256]) mod 256
𝑐 = (S[(32 31) mod 256] + S[(8064 0) mod 256]) mod 256
𝑐 = (S[(63) mod 256] + S[(8064) mod 256]) mod 256
𝑐 = (S[63] + S[128]) mod 256
𝑐 = (28 + 7) mod 256
c = 35 mod 256
c = 35
Setelah mendapatkan nilai c, selanjutnya hitung nilai z dengan cara sebagai berikut :
𝑧 = ((S[(a + b) mod 256] + S[((c 170 ) mod 256)]) S[(j + b) mod 256]) mod 256
𝑧 = ((S[(51 +252) mod 256] + S[((35 170 ) mod 256)]) S[(51 + 252) mod 256])
mod 256
𝑧 = ((S[(303) mod 256] + S[((137) mod 256)]) S[(303) mod 256]) mod 256
𝑧 =((S[47] + S[137]) S[47]) mod 256
𝑧 =((152 + 25 ) 152) mod 256
𝑧 =((177) 152) mod 256
𝑧 = 41 mod 256
z = 41
Universitas Sumatera Utara

63
Kemudian lakukan operasi XOR pada nilai ASCII “/”=47 dan nilai dari z = 41, yaitu:
0010 1111
0010 1001
0000 0110 = 610 dalam tabel ASCII merupakan karakter “ACK” = Non Printable
Karakter “k”
Dilakukan inisialisasi pada nilai i dan j sama dengan 0. Kemudian inisialisasi a = S[i]
dan b = S[j]. Selanjutnya lakukan perhitungan i, j, a,b,c dan z yang baru dengan cara:
i = (i+1) mod 256 = (0+1) mod 256 = 1
a=S[i] = S[1] = 51
j = (j + a) mod 256 = (0+51) mod 256 = 51
Selanjutnya tukarkan nilai S[i] dan S[j] dengan cara sebagai berikut
b=S[j] = S[51] =252
S[i]=b = S[1] =252
S[j]=a = S[252] =51
Dari perhitungan di atas didapatkan S[1]=252 dan S[252]=51. Selanjutnya hitung nilai
c dengan cara:
𝑐 = (𝑆[((i≪5) (j≫3)) mod 256] + 𝑆[((j≪5) (i≫3)) mod 256]) mod 256
𝑐 = (S[((1≪5) (252≫3)) mod 256] + S[((252≪5) (1≫3)) mod 256]) mod 256
𝑐 = (S[(32 31) mod 256] + S[(8064 0) mod 256]) mod 256
𝑐 = (S[(63) mod 256] + S[(8064) mod 256]) mod 256
𝑐 = (S[63] + S[128]) mod 256
𝑐 = (28 + 7) mod 256
c = 35 mod 256
c = 35
Setelah mendapatkan nilai c, selanjutnya hitung nilai z dengan cara sebagai berikut :
𝑧 = ((S[(a + b) mod 256] + S[((c 170 ) mod 256)]) S[(j + b) mod 256]) mod 256
𝑧 = ((S[(51 +252) mod 256] + S[((35 170 ) mod 256)]) S[(51 + 252) mod 256])
mod 256
𝑧 = ((S[(303) mod 256] + S[((137) mod 256)]) S[(303) mod 256]) mod 256
𝑧 =((S[47] + S[137]) S[47]) mod 256
Universitas Sumatera Utara

64
𝑧 =((152 + 25 ) 152) mod 256
𝑧 =((177) 152) mod 256
𝑧 = 41 mod 256
z = 41
Kemudian lakukan operasi XOR pada nilai ASCII “/”=47 dan nilai dari z = 41, yaitu:
0010 1111
0010 1001
0000 0110 = 610 dalam tabel ASCII merupakan karakter “ACK” = Non Printable
2. Enkripsi Algoritma RSA Naïve
Proses enkripsi menggunakan algoritma RSA Naïve dilakukan setelah mendapat kunci
RC4+ dan setelah mendapatkan hasil pengacakan untuk bilangan prima p dan q.
Pada proses pengacakan sebelumnya diperoleh kunci RC4+ adalah “naldi”; nilai p dan
q, yaitu: 1543 dan 5419.
Langkah selanjutnya menghitung nilai kunci publik n dan ɸ:
n = 1543 * 5419 = 83615117
ɸ(n) = 1542*5418 = 8354556
Kemudian mencari nilai kunci publik e dimana 1 < e < ɸ(n) adalah bilangan bulat
kemudian menghitung nilai GCD(e, ɸ)=1 atau e relatif prima terhadap ɸ. Didapat e =
7561. Cek nilai e apakah memenuhi syarat GCD(7561, 8354556) = 1:
8354556 mod 7561 = 7212
7561 mod 7212 = 349
7212 mod 349 = 232
349 mod 232 = 117
232 mod 117 = 115
117 mod 115 = 2
115 mod 2 = 1
Dari pengujian nilai e memenuhi syarat. Kemudian proses enkripsi dimulai untuk kunci
“naldi”
m = naldi
Karakter di atas dipecah menjadi n, a, l, d, dan i kemudian diambil kode ASCII.
n =110 (m1)
a = 97 (m2)
Universitas Sumatera Utara

65
l = 108 (m3)
d = 100 (m4)
i = 105 (m5)
Dengan mendapat nilai e = 7561 dan n = 8361517. Langkah selanjutnya mencari nilai
biner dari e = 7561.
7561 3780 1890 945 472 236 118 59 29 14 7 3 1 0
1 0 0 1 0 0 0 1 1 0 1 1 1
Proses enkripsi untuk karakter “n” dengan kode ASCII = 110
c1 = 1 * 1 * 8361517 mod 8361517 = 110 (e = 1)
c1 = 110 * 110 * 8361517 mod 8361517 = 1331000 (e = 3)
c1 = 1331000 * 1331000 * 8361517 mod 8361517 = 885672 (e = 7)
c1 = 885672 * 885672 mod 8361517 = 4258780 (e = 14)
c1 = 4258780 * 4258780 * 8361517 mod 8361517 = 6167212 (e = 29)
c1 = 6167212 * 6167212 * 8361517 mod 8361517 = 4126406 (e = 59)
c1= 4126406 * 4126406 mod 8361517 = 488376 (e = 118)
c1 = 488376 * 488376 mod 8361517 = 7206468 (e = 236)
c1= 7206468 * 7206468 mod 8361517 = 7985949 (e = 472)
c1 = 7985949 * 7985949 * 8361517 mod 8361517 = 6181923 (e = 945)
c1 = 6181923 * 6181923 mod 8361517 = 675218 (e = 1890)
c1 = 675218 * 675218 mod 8361517 = 7633099 (e = 3780)
c1 = 7633099 * 7633099 * 8361517 mod 8361517 = 2990451 (e = 7561)
Hasil enkripsi yang diambil adalah nilai terakhir setelah nilai e mencapai 7561.
Proses enkripsi untuk karakter “a” dengan kode ASCII = 97
c2 = 1 * 1 * 8361517 mod 8361517 = 97
c2 = 97 * 97 * 8361517 mod 8361517 = 912673
c2 = 912673 * 912673 * 8361517 mod 8361517 = 855692
c2 = 855692 * 855692 mod 8361517 = 7478208
c2 = 7478208 * 7478208 * 8361517 mod 8361517 = 165700
c2 = 165700 * 165700 * 8361517 mod 8361517 = 2581228
c2 = 2581228 * 2581228 mod 8361517 = 5312323
c2 = 5312323 * 5312323 mod 8361517 = 3583003
c2 = 3583003 * 3583003 mod 8361517 = 5202957
c2 = 5202957 * 5202957 * 8361517 mod 8361517 = 2022282
c2 = 2022282 * 2022282 mod 8361517 = 6522824
c2 = 6522824 * 6522824 mod 8361517 = 4864190
c2 = 4864190 * 4864190 * 8361517 mod 8361517 = 2925796
Proses enkripsi untuk karakter “l” dengan kode ASCII = 108
c3 = 1 * 1 * 8361517 mod 8361517 = 108
c3 = 108 * 108 * 8361517 mod 8361517 = 1259712
c3 = 1259712 * 1259712 * 8361517 mod 8361517 = 19745
c3 = 19745 * 19745 mod 8361517 = 5235243
c3 = 5235243 * 5235243 * 8361517 mod 8361517 = 3878118
c3 = 3878118 * 3878118 * 8361517 mod 8361517 = 7199090
Universitas Sumatera Utara

66
c3 = 7199090 * 7199090 mod 8361517 = 7021612
c3 = 7021612 * 7021612 mod 8361517 = 2286370
c3 = 2286370 * 2286370 mod 8361517 = 1132772
c3 = 1132772 * 1132772 * 8361517 mod 8361517 = 7484652
c3 = 7484652 * 7484652 mod 8361517 = 570973
c3 = 570973 * 570973 mod 8361517 = 2980416
c3 = 2980416 * 2980416 * 8361517 mod 8361517 = 4086137
Proses enkripsi untuk karakter “d” dengan kode ASCII = 100
c4 = 1 * 1 * 8361517 mod 8361517 = 100
c4 = 100 * 100 * 8361517 mod 8361517 = 1000000
c4 = 1000000 * 1000000 * 8361517 mod 8361517 = 2639616
c4 = 2639616 * 2639616 mod 8361517 = 4126526
c4 = 4126526 * 4126526 * 8361517 mod 8361517 = 45150
c4 = 45150 * 45150 * 8361517 mod 8361517 = 6827057
c4 = 6827057 * 6827057 mod 8361517 = 6111985
c4 = 6111985 * 6111985 mod 8361517 = 4130624
c4 = 4130624 * 4130624 mod 8361517 = 2922611
c4 = 2922611 * 2922611 * 8361517 mod 8361517 = 4352810
c4 = 4352810 * 4352810 mod 8361517 = 8219610
c4 = 8219610 * 8219610 mod 8361517 = 3063713
c4 = 3063713 * 3063713 * 8361517 mod 8361517 = 4570236
Proses enkripsi untuk karakter “i” dengan kode ASCII = 105
c5 = 1 * 1 * 8361517 mod 8361517 = 105
c5 = 105 * 105 * 8361517 mod 8361517 = 1157625
c5 = 1157625 * 1157625 * 8361517 mod 8361517 = 988178
c5 = 988178 * 988178 mod 8361517 = 4358356
c5 = 4358356 * 4358356 * 8361517 mod 8361517 = 1624502
c5 = 1624502 * 1624502 * 8361517 mod 8361517 = 1901518
c5 = 1901518 * 1901518 mod 8361517 = 8269531
c5 = 8269531 * 8269531 mod 8361517 = 7930509
c5 = 7930509 * 7930509 mod 8361517 = 72875
c5 = 72875 * 72875 * 8361517 mod 8361517 = 821895
c5 = 821895 * 821895 mod 8361517 = 1155629
c5 = 1155629 * 1155629 mod 8361517 = 1974952
c5 = 1974952 * 1974952 * 8361517 mod 8361517 = 2593742
4.2.3 Pengujian Hasil Dekripsi Algoritma RC4+ dan Algoritma RSA Naïve
a. Pengujian Hasil Dekripsi dengan Sistem
Proses dekripsi dimulai dengan melakukan dekripsi pada cipherkey terlebih dahulu
dengan algoritma RSA Naïve sehingga menghasilkan key yang akan digunakan untuk
mengenkripsi ciphertext dengan algoritma RC4+ sehingga didapatkan kembali
plaintext. Data ciphertext dan cipherkey yang didekripsi adalah file yang tersimpan di
Firebase.
Universitas Sumatera Utara

67
Langkah pertama kali dilakukan adalah dengan mengakses data ciphertext,
cipherkey, kunci publik n dan kunci privat d RSA Naïve dari database Firebase.
Selanjutnya cipherkey didekripsi terlebih dahulu menggunakan pasangan kunci publik
n dan kunci privat e untuk mendapatkan kunci algoritma RC4+. Setelah kunci didapat,
selanjutnya ciphertext dienkripsi menggunakan algoritma RC4+ sehingga didapat
plainteks berupa string Base64. Langkah selanjutnya adalah mengkonversi string
Base64 menjadi citra dan ditampilkan di halaman timeline sistem.
Langkah – langkah ini dilakukan sampai semua pesan yang tesimpan di database
selesai didekripsi dan ditampilkan di halaman timeline seperti pada gambar berikut:
Gambar 4.12 Gambar setelah proses dekripsi dari database ditampilkan di
halaman timeline
Universitas Sumatera Utara

68
Data proses enkripsi – dekripsi beserta ciphertext dapat dilihat di halaman detail seperti
pada gambar berikut ini:
Gambar 4. 13 Detail proses enkripsi – dekripsi dan ciphertext ditampilkan di halaman
detail
4.2.4 Waktu Proses
a. Waktu Proses Enkripsi – Dekripsi Citra .jpg menggunakan algoritma RC4+
Tujuan dari pengujian ini adalah untuk memperoleh pengaruh besar resolusi gambar
yang diuji dengan waktu proses algoritma. Pada pengujian ini dilakukan untuk 8 file
citra .jpg dengan resolusi yang berbeda yaitu citra dengan ukuran 20px x 20px, 30px x
30px, 50px x 50px, 75px x 75px, 100px x 100px dan seterusnya yang ditunjukkan pada
tabel 4.4.
Untuk waktu proses setiap citra dapat dilihat pada tabel berikut ini:
Universitas Sumatera Utara

69
Tabel 4.4 Waktu Proses Enkripsi – Dekripsi Citra
Gambar Resolusi Kunci
RC4+
Waktu Proses Citra
Waktu
Enkripsi
(ms)
Waktu
Dekripsi
(ms)
20 x 20px naldi 1,668542 1,059167
30 x 30px naldi 3,345468 1,125469
50 x 50px naldi 4,60401 1,778021
75 x 75px naldi 6,552344 2,7799448
100 x 100px naldi 8,473125 3,846458
125 x 125px naldi 8,648282 5,732604
150 x 150px naldi 20,781042 7,834427
200 x 200px naldi 24,886458 9,699167
Pada tabel di atas uji 5 file citra .jpg dengan resolusi berbeda – beda namun
menggunakan kunci enkripsi algoritma RC4+. Untuk melihat pengaruh resolusi gambar
terhadap waktu proses pada saat enkripsi dan dekripsi dapat dilihat pada grafik berikut
ini:
Universitas Sumatera Utara

70
Gambar 4.14 Pengaruh resolusi citra terhadap waktu proses pada tahap enkripsi dan
dekripsi
Dari grafik di atas, dapat diperoleh kesimpulan bahwa pada tahap enkripsi
maupun tahap dekripsi citra, semakin tinggi resolusinya maka semakin lama pula waktu
proses yang dibutuhkan. Waktu proses meningkat secara linear. Jika dilihat dari grafik,
ternyata waktu proses yang dibutuhkan untuk tahap dekripsi lebih cepat jika
dibandingkan pada tahap enkripsi citra.
a. Waktu Proses Enkripsi – Dekripsi Kunci menggunakan algoritma RSA
Naïve
Proses perhitungan waktu proses dilakukan terhadap kunci hasil pengacakan yang
digunakan untuk enkripsi pada plaintext dengan algoritma RC4+. Kunci ini kemudian
dienkripsi lagi dengan algoritma RSA Naïve sehingga menghasilkan cipherkey.
Pada pengujian ini akan dihitung waktu proses untuk tahap enkripsi dan dekripsi
kunci terhadap 5 kunci hasil pengacakan dari ASCII dengan panjang 5 karakter.
0
5
10
15
20
25
30
20 x 20piksel
30 x 30piksel
50 x 50piksel
75 x 75piksel
100 x 100piksel
125 x 125piksel
150 x 150piksel
200 x 200piksel
Pengaruh Resolusi Citra terhadap Waktu Proses
Enkripsi Dekripsi
Universitas Sumatera Utara

71
Tabel 4.5 Waktu Proses Enkripsi – Dekripsi pada Kunci
Gambar Resolusi Kunci
RC4+
Waktu Proses Kunci
Waktu
Enkripsi
(ms)
Waktu
Dekripsi
(ms)
20 x 20px Ēăê©< 9,318021 3,921459
30 x 20px ¯@Ĉ[Ě 10,117031 4,613073
50 x 50px ÎDÃ|Ĕ 8,738593 3,94724
75 x 75px ęJĿ6a 17,689687 4,765729
100 x 100px H±ĿİÒ 9,560989 4,465313
125 x 125px úēÀÓB 24,137344 4,499062
150 x 150px xīĄ=8 11,340833 4,543125
200 x 200px -Q$üï 8,492657 4,871823
Pada tabel di atas dilakukan pengujian terhadap 5 kunci yang berbeda, hasil dari
pengacakan sepanjang 5 karakter.
Untuk melihat pengaruh resolusi gambar terhadap waktu proses pada saat enkripsi dan
dekripsi dapat dilihat pada grafik berikut ini:
Universitas Sumatera Utara

72
Gambar 4.15 Grafik waktu proses pada tahap enkripsi dan dekripsi kunci dengan
algoritma RSA Naïve
Jika diperhatikan dari grafik di atas, tampak bahwa waktu proses enkripsi dan
dekripsi kunci tidak dipengaruhi oleh tingkat resolusi citra atau pun karakter dari
kunci tersebut. Grafik menunjukkan bahwa proses enkripsi dan dekripsi pada
algoritma RSA-Naïve memiliki waktu yang konstan. Peningkatan waktu pada proses
enkripsi dan dekripsi RSA-Naïve dipengaruhi oleh nilai e dan d.
4.2.5 Panjang Pesan
Tujuan dari pengujian ini adalah untuk memperoleh pengaruh besar resolusi gambar
yang diuji dengan waktu proses algoritma. Pada pengujian ini dilakukan untuk 5 file
citra .jpg dengan resolusi yang berbeda.
Tabel 4.6 Pengaruh Resolusi Citra terhadap Panjang Pesan
Gambar Resolusi Kunci
RC4+
Panjang
Base64
Panjang
Ciphertext
20 x 20px naldi 1826 2834
30 x 30px naldi 2382 3637
0
5
10
15
20
25
30
20 x 20piksel
30 x 30piksel
50 x 50piksel
75 x 75piksel
100 x 100piksel
125 x 125piksel
150 x150piksel
200 x 200piksel
Waktu Proses untuk Enkripsi dan Dekripsi Kunci dengan Algoritma RSA
Enkripsi Dekripsi
Universitas Sumatera Utara

73
50 x 50px naldi 3934 6001
75 x 75px naldi 6310 9565
100 x 100px naldi 8424 114447
Pada sistem ini, citra .jpg yang ingin dienkripsi menjadi pesan teks (Ciphertext)
harus terlebih dahulu dikonversi menjadi string Base64. Setelah didapatkan pesan
dalam bentuk string Base64, maka selanjutnya boleh dienkripsi menggunakan
algoritma RC4+.
Gambar 4.16 Pengaruh Resolusi Citra terhadap Panjang Pesan
0
2000
4000
6000
8000
10000
12000
14000
20 x 20 piksel 30 x 30 piksel 50 x 50 piksel 75 x 75 piksel 100 x 100 piksel
Pengaruh Resolusi Citra terhadap Panjang Pesan
Base64 Ciphertext
Universitas Sumatera Utara

74
Pada gambar 4.16, terlihat grafik yang menampilkan panjang string untuk Base64 dan
ciphertext, dimana pada setiap citra .jpg dengan resolusi tertentu memiliki peningkatan
panjang pesan setelah dienkripsi dari string Base64 menjadi ciphertext.
Universitas Sumatera Utara

BAB 5
KESIMPULAN DAN SARAN
5.1.Kesimpulan
Berdasarkan analisis, perancangan, dan pengujian dari penelitian kombinasi kedua
algoritma RC4+ dan RSA-Naïve, maka diperoleh beberapa kesimpulan:
1. Dalam melakukan enkripsi citra pada bahasa Java, citra .jpg harus dikonversi
terlebih dahulu ke dalam citra bitmap.
2. Proses enkripsi dekripsi dari kombinasi kedua algoritma RC4+ dan algoritma RSA-
Naïve memenuhi kriteria keutuhan data.
3. Semakin besar tingkat resolusi citra .jpg, ciphertext yang dihasilkan semakin
panjang karena dipengaruhi oleh banyaknya piksel.
4. Berdasarkan grafik, peningkatan waktu proses dalam enkripsi dan dekripsi citra
JPG berbanding lurus secara linear terhadap tingkat resolusi citra.
5. Pada algoritma RC4+, waktu proses enkripsi lebih lama dibanding dengan waktu
proses dekripsi, sedangkan pada algoritma RSA-Naïve, waktu proses enkripsi dan
dekripsi dipengaruhi oleh nilai e dan d.
5.2. Saran
Berdasarkan penelitian ini, beberapa saran yang dapat dipertimbangkan untuk
mengembangkan penelitian ini adalah adalah sebagai berikut:
1. Penelitian ini hanya mengamankan file citra dengan ekstensi .jpg, selanjutnya
diharapkan mampu mengamankan file citra dengan ekstensi lainnya, seperti png,
dan lainnya.
2. Penelitian ini hanya mengamankan file citra, selanjutnya dapat mengamankan file
lain seperti file audio, video, dan lainnya.
Universitas Sumatera Utara

76
3. Penelitian ini menggunakan bahasa pemrograman Java, diharapkan pada
penelitian selanjutnya dapat menggunakan bahasa lainnya seperti C#, Javascript,
dan lainnya.
4. Pada penelitian ini, nilai public key RSA-Naïve dibangkitkan setiap mengirimkan
pesan, selanjutnya harapkan nilai public key dibangkitkan sekali saja untuk setiap
akun yang terdaftar dalam sistem.
5. Pada algoritma RSA-Naïve, generate kunci belum memenuhi standar RCSV, diharapkan
selanjutkan memenuhi standar yang telah ditentukan.
Universitas Sumatera Utara

77
DAFTAR PUSTAKA
Arifin, Zainal. 2009. Studi Kasus Penggunaan Algoritma RSA Sebagai Algoritma
Kriptografi yang Aman, Jurnal Informatika Mulawarman Vol 4 No. 3
Ariyus, Dony. 2006. Kriptografi Keamanan Data dan Komunikasi. Yogyakarta:
Penerbit Graha Ilmu.
Banik, Subhadeep., Sarkar, Santanu & R. Kacker. 2013.Security Analysis of RC4+
Stream Cipher. In INDOCRYPT, LNCS, Vol. 8250, pp. 297-307.
Banik, Subhadeep. & Sonu Jha, 2015. “Some Security Results of The RC4+ Stream
Cipher”. Security and Communication Network, 8(18), (ISSN : 1939-0114),
4061-4072.
Basri, 2016. “Kriptografi Simetris dan Asimetris dalam Perspektif Keamanan Data dan
Kompleksitas Komputasi”. Jurnal Ilmiah Ilmu Komputer, 2(2), (ISSN:2442-
4512), 2503 – 3832.
Churchouse, R. F. 2002. Code and Ciphers: Julius Caesar, the enigma and the Internet,
Cambridge University Press.
Dwi Nugroho., Andreas & Rinaldi Munir, 2015. “Aplikasi Enkripsi Instant Messaging
Pada Perangkat Mobile Dengan Menggunakan Algoritma Elliptic Curve
Cryptography (ECC)”. KNIF 2015:146 – 151.
Florez Z., Jimmy, Camila Logreira R., Mario Muñoz & Jesús Francisco Vargas., 2016.
“Architecture of Instant Messaging Systems for Secure Data Transmission”.
Security Technology (ICCST), (ISSN: 2153 – 0742).
Hermawati, F.A. 2013. Pengolahan Citra Digital Konsep & Teori. ANDI : Yogyakarta.
Kumar., Anil & Rohini Sharma. 2013. “A Secure Image Steganography Based on RSA
Algorithm and Hash-LSB Technique”. IJARCSSE Vol. 3, No. 7
Kuppuswamy, P. & Al-Khalidi, S.Q.Y. 2014. “Hybrid Encryption/Decryption
Technique Using New Public Key and Symmetric Key Algorithm”, Vol. 19, No.
2, pp.1-13.
Meenakshi, P.Akshaya Shankara. 2014. Hybrid Cryptographic Technique Using RSA
Algorithm and Schenduling Concepts. International Journal of Network Security
& Its Applications (IJNSA) Vol.6, No.6
Meyer, D. 2013. Chat apps have overtaken SMS by message volume, but how big a
disaster is that for carriers? Diambil dari Gigaom:
https://gigaom.com/2013/04/29/chat-apps-have-overtaken-smsby-message-
volume/, Tanggal akses : 10 Juni 2017.
Munir, Rinaldi. 2006. Kriptografi. Bandung: Penerbit Informatika.
Oppliger, Rolf. 2005. Contemporary Cryptography. London : Artech House.
Universitas Sumatera Utara

78
Paul, Goutam, & Subhamoy Maita. 2012. RC4 Stream Cipher and Its Variants. London
: CRC Press Taylor & Francis Group.
Prayudi, Satria. 2013. Kombinasi Algoritma RSA 512-BIT dan One Time Pad untuk
Pengamanan Pesan pada NIC MESSEGER. Skripsi. Universitas Sumatera
Utara.
Sadikin, Rifki. 2016. Kriptografi untuk Keamanan Jaringan. Yogyakarta: Penerbit
Andi.
Schneier, B. 1996. Applied Cryptography: Protocols, Algorithms, and Source Code in
C. 2nd Edition. New York.
Smart, Nigel P. 2016. Ceriptograpy Made Simple. New York: Springer Internasional
Publishing Switzerland
Wanda, Putra., Selo, & Bimo Sunafri Hantono, 2014. “Review Sistem Keamanan Data
pada Komunikasi Instant Messenger”. CITEE 2014, (ISSN: 2085-6350), 44-48.
Yan, S. Y. 2008. Cryptanalytic Attacks on RSA. Bedfordshire, Cambridge: Springer.
Universitas Sumatera Utara

A-1
LISTING PROGRAM
MainActivity.java package naldi28.skripsi.imagechat; import android.annotation. SuppressLint ; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.support.annotation. NonNull ; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Base64; import android.view.Menu; import android.view.MenuInflater; import android.view. MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.Toast; import com.firebase.ui.auth.AuthUI; import com.firebase.ui.database.FirebaseRecyclerAdapter; import com.google.android.gms.t asks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import java.io.ByteArrayOutputStr eam; import java.io.FileNotFoundException; import java.io.InputStream; import java.text.DateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Random; import naldi28.skripsi.imagechat.algorithm.myRC4Plus; import naldi28.skripsi.imagechat.algorithm.myRSA; import naldi28.skripsi.imagechat.functional.StaticVariable; import naldi28.skripsi.imagechat.functional.ChatModel; import static
naldi28.skripsi.imagechat.fun ctional.StaticVariable. MAX_IMAGE_HEIGHT; import static
naldi28.skripsi.imagechat.functional.StaticVariable. MAX_IMAGE_WIDTH; import static
naldi28.skripsi.imagechat.functional.StaticVariable. MAX_SIZE; public class MainActivity extends AppCompatActivity implements
View.OnClickListener{ static char[] kar = { 'Ā', 'ā', 'į', 'İ', 'ı', 'IJ', 'ij', 'Ă', 'Ĵ', 'ă', 'Ą', 'ą', 'Ć', 'ć', 'Ĉ', 'Ķ', 'ķ',
Universitas Sumatera Utara

A-2
'ĸ', 'Ĺ', 'ĺ', 'Ļ', 'ļ', 'Ľ', 'ľ', 'Ŀ', 'ŀ', 'Ł', 'ł', 'ĉ', 'Ċ', 'ċ', 'Č', ' ', '!', '\"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j','k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', 'Ɗ', 'Ď', 'ď', 'Đ', 'đ', 'Ē', 'ē', 'Ĕ', 'ĕ', 'Ė', 'ė', 'Ę', 'ę', 'Ě', 'ě', 'Ĝ', 'ĝ', 'Ğ', 'ğ', 'Ġ', 'ġ', 'Ģ', 'ģ', 'Ĥ', 'ĥ', 'Ħ', 'ħ', 'Ĩ', 'ĩ', 'Ī', 'ī', 'Ĭ', 'ĭ', 'Į', '¡', '¢', '£', '¤', '¥', '¦', '§', '¨', '©', 'ª', '«', '¬', 'X', '®', '¯', '°', '±', '²', '³', '´', 'µ', '¶', '·', '¸', '¹', 'º', '»', '¼', '½', '¾', '¿', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', '×', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'Þ', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', '÷', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'þ', 'ÿ'}; //random key text
public static String random(){ Random rnd = new Random(); String key = ""; int r; for( int i= 0; i< 5; i++){ r= rnd.nextInt( kar. length); key+= kar[r]; } return key; } final String key = random();
private ArrayList<String> mImageCipherList = new ArrayList<>(); private ArrayList<String> mKeyCipherList = new ArrayList<>(); private ArrayList<String> mPrivateKeyList = new ArrayList<>(); private ArrayList<String> mPrime_pList = new ArrayList<>(); private ArrayList <String> mPrime_qList = new ArrayList<>(); private ArrayList<String> mPublicKey_n = new ArrayList<>(); private ArrayList<String> mPublicKey_e = new ArrayList<>(); private ArrayList<String> mUserList = new ArrayList<>(); private ArrayList< String> mDateList = new ArrayList<>(); private ArrayList<String> mSizeList = new ArrayList<>(); private ArrayList<String> mResolutionList = new ArrayList<>(); private ArrayList<Double> mImageEncryptTimeList = new ArrayList<>(); private Arr ayList<Double> mImageDecryptTimeList = new ArrayList<>(); private ArrayList<Double> mKeyEncryptTimeList = new ArrayList<>(); private ArrayList<Double> mKeyDecryptTimeList = new ArrayList<>();
Universitas Sumatera Utara

A-3
private ArrayList<String> mKeyRC4PlusList = new Arra yList<>(); private ArrayList<Bitmap> mImageList = new ArrayList<>(); DatabaseReference mChatRef = FirebaseDatabase. getInstance().getReference( "chat"); FirebaseRecyclerAdapter<ChatModel, ChatModel.ChatHolder> mAdapter; RecyclerView mRecyclerView; LinearLayoutManager mLinearLayoutManager; FirebaseAuth auth = FirebaseAuth. getInstance(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R. layout. activity_main); forceLogin(); mRecyclerView = findViewById(R.id. recycler_list_chat); mLinearLayoutManager = new LinearLayoutManager(getApplicationContext()); mRecyclerView.setLayoutManager( mLinearLayoutManager); mRecyclerView.setItemAnimator( new DefaultItemAnimator()); mAdapter = new FirebaseRecyclerAdapter<ChatModel, ChatModel.ChatHolder> (ChatModel. class, R.layout. item_chat_image, ChatModel.ChatHolder. class, mChatRef) { @Override protected void populateViewHolder(ChatModel.ChatHolder viewHolder, ChatModel chat, int position) { setChat(viewHolder, ch at); }
@Override public ChatModel.ChatHolder onCreateViewHolder(ViewGroup parent, int viewType){ ChatModel.ChatHolder viewHolder = super.onCreateViewHolder(parent, viewType); viewHolder.setOnClickListener( new
ChatModel.ChatHolder.ClickListener() { @Override public void onItemClick(View view, int position) { onClickChat(position); } }); return viewHolder; } };
mAdapter.registerAdapterDataObserver( new
RecyclerView.AdapterDataObserver() { @Override public void onItemRangeInserted( int positionStart, int
itemCount) { super.onItemRangeInserted(positionStart, itemCount);
Universitas Sumatera Utara

A-4
mLinearLayoutManager.smoothScrollToPosition( mRecyclerView, null, mAdapter.getItemCount()); } }); mRecyclerView.setAdapter( mAdapter); ImageButton btnPickImage = findViewById(R.id. button_add_image); btnPickImage.setOnClickListener( this); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu. menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id. menu_logout: AuthUI. getInstance() .signOut( this) .addOnCompleteListen er( new
OnCompleteListener<Void>( ) { public void onComplete( @NonNull Task<Void> task) { Toast. makeText(getApplicationContext(), "User Sign Out", Toast. LENGTH_LONG).show(); forceLogin(); } }); return true; case R.id. menu_about: AlertDialog.Builder builder = new
AlertDialog.Builder(MainActivity. this); builder.setTitle( "About") .setMessage( "Credited by: \nRonaldi
Tumanggor\nIlmu Komputer USU 2017") .setNegativeButton( "Close", null) .show(); return true; case R.id. menu_help: Intent i = new Intent(MainActivity. this, HelpActivity. class); startActivity(i); default: return super.onOptionsItemSelected(item); } } @Override public void onClick(View view) { switch (view.getId()) { case R.id. button_add_image: Intent pickImage = new Intent(Intent. ACTION_PICK);
Universitas Sumatera Utara

A-5
pickImage.setType( "image/jpg"); startActivityForResult(pickImage, StaticVariable. RC_IMAGE_PICK); break; } } @Override protected void onActivityResult( int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == StaticVaria ble. RC_IMAGE_PICK) { if (resultCode == RESULT_OK) { if ( auth.getCurrentUser() != null) { try { final Uri imageUri = data.getData();
final InputStream imageStream = getContentResolver().openInputStream(imageUri); final Bitmap selectedImage = BitmapFactory. decodeStream(imageStream); if (selectedImage.getHeight() > MAX_IMAGE_HEIGHT || selectedImage. getWidth() > MAX_IMAGE_WIDTH) { Toast. makeText(getApplicationContext(), "Image is too large. Max: " + MAX_IMAGE_WIDTH + "x" + MAX_IMAGE_HEIGHT + " px", Toast. LENGTH_LONG).show(); if
(Integer. parseInt(getImageSize(selectedImage)) > MAX_SIZE) { Toast. makeText(getApplicationContext(), "Image is too big. Max
size: " + MAX_SIZE, Toast. LENGTH_LONG).show(); } } else { newChat(selectedImage); } } catch (FileNotFoundException err) { err.printStackTrace(); Toast. makeText(getApplicationContext(), "File
not found", Toast. LENGTH_LONG).show(); } } else { fo rceLogin(); } } else { Toast. makeText(getApplicationContext(), "Canceled", Toast. LENGTH_LONG).show(); } } if (requestCode == StaticVariable. RC_SIGN_IN) { // Successfully signed in
Universitas Sumatera Utara

A-6
if (resultCode == RESULT_OK) { Toast. makeText(getApplicationContext(), "SignIn
Complete", Toast. LENGTH_LONG).show(); } else { finish(); } } } @Override protected void onDestroy() { super.onDestroy(); mAdapter.cleanup(); } void forceLogin( ){
if (!isSignedIn()) { startActivityForResult( AuthUI. getInstance() .createSignInIntentBuilder() .setIsSmartLockEnabled( false, true) .build(), StaticVariable. RC_SIGN_IN); } } boolean isSignedIn(){ return auth.getCurrentUser() != null; } void onClickChat( int position) { Bundle chatData = new Bundle(); chatData.putString(StaticVariable. ARG_CHAT_USER, mUserList.get(position)); chatData.putString(StaticVariable. ARG_CHAT_DATE, mDateList.get(position)); chatData.putString(StaticVariable. ARG_CHAT_SIZE, mSizeList.get(position)); chatData.putString(StaticVariable. ARG_CHAT_RESOLUTION, mResolutionList.get(position)); chatData.putString(StaticVari able. ARG_CHAT_CIPHER, mImageCipherList.get(position)); chatData.putDouble(StaticVariable. ARG_IMAGE_ENCRYPT_TIME, mImageEncryptTimeList.get(position)); chatData.putDouble(StaticVariable. ARG_IMAGE_DECRYPT_TIME, mImageDecryptTimeList.get(posit ion)); chatData.putDouble(StaticVariable. ARG_KEY_DECRYPT_TIME, mKeyDecryptTimeList.get(position)); chatData.putDouble(StaticVariable. ARG_KEY_ENCRYPT_TIME, mKeyEncryptTimeList.get(position)); chatData.putString(StaticVariable. ARG_PRIVATE_KEY, mPrivateKeyList.get(position)); chatData.putString(StaticVariable. ARG_PRIME_P, mPrime_pList.get(position)); chatData.putString(StaticVariable. ARG_PRIME_Q, mPrime_qList.get(position)); chatData.putString(StaticVariable. ARG_PUBLIC_KEY_N, mPublicKey_n.get(position)); chatData.putString(StaticVariable. ARG_PUBLIC_KEY_E,
Universitas Sumatera Utara

A-7
mPublicKey_e.get(position)); chatData.putString(StaticVariable. ARG_KEY_CIPHER, mKeyCipherList.get(position)); chatData.putString(StaticVariable. ARG_KEY_RC4PLUS, mKeyRC4PlusList.get(position)); chatData.putByteArray(StaticVariable. ARG_CHAT_BITMAP, bitmapToByteArray( mImageList.get(position))); Intent i = new Intent(getApplicationContext(), ImageDetailActivity. class); i.putExtras(chatData); startActivity(i); } void setChat(ChatModel.ChatHolder viewHolder, ChatModel chat) { long tStart, tStop; double tDecryptRc4, tDecryptRSA; String key; String cipherText = chat.getChipperText(); String cipherKey = chat.getChipperKey(); cipherKey = cipherKey.substring( 1, cipherKey.length() - 1); Integer publicKey_n = Integer. parseInt(chat.getPublicKey_n()); Integer privateKe y = Integer. parseInt(chat.getPrivateKey()); tStart = System. nanoTime(); key = new myRSA().decrypt(cipherKey, privateKey, publicKey_n); tStop = System. nanoTime(); tDecryptRSA = (tStop - tStart) / 1E9; tStart = System. nanoTime(); String decryptedText = new myRC4Plus().encrypt(cipherText, key); Bitmap decryptedImage = getBitmapFromString(decryptedText); tStop = System. nanoTime(); tDecryptRc4 = (tStop - tStart) / 1E9; viewHolder.setUser(chat.getUser()); viewHolder.setDat e(chat.getDate());
Bitmap bJPGcompress = BMPtoJPEG(decryptedImage, Bitmap.CompressFormat. JPEG, 10);
viewHolder.setImage(decryptedImage); assert chat.getEncryptTimeRc4Plus() != null; mImageCipherList.add(chat.getChipperText()); mKeyCipherList.add(chat.getChipperKey()); mPrime_pList.add(chat.getPrime_p()); mPrime_qList.add(chat.getPrime_q()); mPublicKey_n.add (chat.getPublicKey_n()); mPublicKey_e.add(chat.getPublicKey_e()); mPrivateKeyList.add(chat.getPrivateKey()); mImageEncryptTimeList.add(chat.getEncryptTimeRc4Plus()); mKeyEncryptTimeList.add(chat.getEncryptTimeRSA()); mUserList.add(chat.getUser());
Universitas Sumatera Utara

A-8
mDateList.add(chat.getDate());
mSizeList.add(getImageSize(bJPGcompress)); mResolutionList.add(getImageResolution(decryptedImage)); mImageDecryptTimeList.add(tDecryptRc4); mKeyDecryptTimeList.add(tDecryptRSA); mKeyRC4PlusList.add(key); mImageList.add(decryptedImage); } void newChat(Bitmap image) { //TODO: Encrypt Image
long tStart, tStop; String publicKey_n, publicKey_e, privateKey, cipher Key, prime_p, prime_q; double tEncryptRc4, tEncryptRSA; tStart = System. nanoTime(); String base64 = getStringFromBitmap(image); String chipperText = new myRC4Plus().encrypt(base64, key); tStop = System. nanoTime(); tEncryptRc4 = (tStop - tStart) / 1E9; tStart = System. nanoTime(); myRSA rsa = new myRSA(); prime_p = rsa.getPrime_P().toString(); prime_q = rsa.getPrime_Q().toString(); publicKey_n = rsa.getPublicKey_n().to String(); publicKey_e = rsa.getPublicKey_e().toString(); privateKey = rsa.getPrivateKey().toString(); cipherKey = rsa. enkrip( key); tStop = System. nanoTime(); tEncryptRSA = (tStop - tStart) / 1E9; // 1E9 = 10^9 = 1 000
000 000 (which is milliseconds)
String user = auth.getCurrentUser() != null ? auth.getCurrentUser().getDisplayName() : "Anon"; mChatRef.push() .setValue( new ChatModel( chipperText, cipherKey, publicKey_n, privateKey, publicKey_e, prime_p, prime_q, user, getFormattedNowTime(getApplicationContext()), tEncryptRc4, tEncryptRSA)); } //method untuk compress bitmap ke jpeg
private static Bitmap BMPtoJPEG(Bitmap src, Bitmap.CompressFormat forma t, int quality) { ByteArrayOutputStream os = new ByteArrayOutputStream(); src.compress(format, quality, os); byte[] array = os.toByteArray();
Universitas Sumatera Utara

A-9
return BitmapFactory. decodeByteArray(array, 0, array. length); } String g etFormattedNowTime(Context context) { Date date = Calendar. getInstance().getTime(); DateFormat dateFormat = android.text.format.DateFormat. getDateFormat(context); DateFormat timeFormat = android.text.format.DateFormat. getTimeFormat(context); return dateFormat.format(date) + " " + timeFormat.format(date); } String getImageSize(Bitmap image) { return humanReadableByteCount(image.getRowBytes() * image.getHeight(), true); } String getImageResolution(Bit map image) { return image.getHeight() + "x" + image.getWidth() + " px"; } byte[] bitmapToByteArray(Bitmap bitmap) { //Convert to byte array
ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress (Bitmap.CompressFormat. JPEG, 100 , stream); return stream.toByteArray(); } @SuppressLint ( "DefaultLocale") static String humanReadableByteCount( long bytes, boolean si) { int unit = si ? 1000 : 1024 ; if (bytes < unit) return bytes + " B"; int exp = ( int) (Math. log(bytes) / Math. log(unit)); String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp - 1) + (si ? "" : "i"); return String. format( "%.1f %sB", bytes / Math. pow(unit, exp), pre); } private String getStringFromBitmap(Bitmap image) { final int COMPRESSION_QUALITY = 100 ; String encodedImage; ByteArrayOutputStream byteArrayBitmapStream = new
ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat. JPEG, COMPRESSION_QUALITY, byteArrayBitmapStream); byte[] b = byteArrayBitmapStream.toByteArray(); encodedImage = Base64. encodeToString(b, Base64. DEFAULT); return encodedImage; } private Bitmap getBitmapFromString(String base64) { byte[] decodedString = Base64. decode(base64, Base64. DEFAULT); return BitmapFactory. decodeByteArray(decodedString, 0, decodedString. length); }
Universitas Sumatera Utara

A-10
ImageDetailActivity.java package naldi28.skripsi.imagechat; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import androi d.widget.Button; import android.widget.ImageView; import android.widget.TextView; import naldi28.skripsi.imagechat.functional.StaticVariable; public class ImageDetailActivity extends AppCompatActivity { @Override protected void onCreate(Bundle s avedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout. activity_image_detail); getSupportActionBar().setTitle( "Detail"); TextView textUser = findViewById(R.id. text_user); TextView textReso lution = findViewById(R.id. text_content_resolution); TextView textSize = findViewById(R.id. text_content_size); TextView textDate = findViewById(R.id. text_received_date); ImageView imageContent = findViewById(R.id. image_content); Bundle extra = getIntent().getExtras(); String user = extra.getString(StaticVariable. ARG_CHAT_USER); String resolution = extra.getString(StaticVariable. ARG_CHAT_RESOLUTION); String size = extra.getString(StaticVariable. ARG_CHAT_SIZE); String date = extra.getString(StaticVariable. ARG_CHAT_DATE); Double imageEncryptTime = extra.getDouble(StaticVariable. ARG_IMAGE_ENCRYPT_TIME); Double imageDecryptTime = extra.getDouble(StaticVariable. ARG_IMAGE_DECRYPT_TIME); byte[] imageByteArray = extra.getByteArray(StaticVariable. ARG_CHAT_BITMAP); final String chipper = extra.getString(StaticVariable. ARG_CHAT_CIPHER); Double keyEncryptTime = extra.getDouble(StaticVariable. ARG_KEY_ENCRYPT_TIME); Double keyDecryptTime = extra.getDouble(StaticVariable. ARG_KEY_DECRYPT_TIME); String prime_q = extra.getString(StaticVariable. ARG_PRIME_P); String prime_p = extra.getString(StaticVariable. ARG_PRIME_Q); String publicKey_n = ext ra.getString(StaticVariable. ARG_PUBLIC_KEY_N); String publicKey_e = extra.getString(StaticVariable. ARG_PUBLIC_KEY_E); String privateKey = extra.getString(StaticVariable. ARG_PRIVATE_KEY); String keyCipher = extra.getString(StaticVari able. ARG_KEY_CIPHER);
Universitas Sumatera Utara

A-11
String keyRC4Plus = extra.getString(StaticVariable. ARG_KEY_RC4PLUS); assert imageByteArray != null; Bitmap image = BitmapFactory. decodeByteArray(imageByteArray, 0, imageByteArray. length); textUser.se tText(user); textResolution.setText(resolution); textSize.setText(size); textDate.setText(date); imageContent.setImageBitmap(image); final String textImageEncrypt = getString(R.string. encrypt_image_time_format, imag eEncryptTime); final String textImageDecrypt = getString(R.string. decrypt_image_time_format, imageDecryptTime); final String textKeyEncrypt = getString(R.string. encrypt_key_time_format, keyEncryptTime); final String textKeyDecrypt = getString(R.string. decrypt_key_time_format, keyDecryptTime); final String textKeyRC4Plus = "Key : "+keyRC4Plus; final String textPrime_p = "p: " + prime_p; final String textPrime_q = "q: " + prime_q; final String textPublicKey_n = "Public Key n: " + publicKey_n; final String textPublicKey_e = "Public Key e: " + publicKey_e; final String textPrivateKey = "Private Key: " + privateKey; final String textKeyCipher = "Cipher Key: " + keyCip her; Button btnChipper = findViewById(R.id. button_show_cipher); btnChipper.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { AlertDialog.Builder builder = new
AlertDialog.Builder(ImageDetailActivity. this); builder.setTitle( "CipherText") .setMessage( chipper ) .setNegativeButton( "Close", null) .show(); } }); Button btnTime = findViewById(R.id. button_show_time); btnTime.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { AlertDialog.Builder builder = new
AlertDialog .Builder(ImageDetailActivity. this); builder.setTitle( "Encrypt - Decrypt Detail Process ") .setMessage( "RC4plus Detail:"+"\n"+ t extKeyRC4Plus + "\n \n" + "RSA Detail:"+"\n"+ textPrime_p + "\n" + textPrime_q + "\n" + textPublicKey_n + "\n" +
Universitas Sumatera Utara

A-12
textPublicKey_e + "\n" + textPrivateKey + "\n" + textKeyCipher + "\n \n" + "Running Time: "+"\n"+ textImageEncrypt + "\n" + textImageDecrypt + "\n" + textKeyEncrypt + "\n" + textKeyDecrypt ) .setNegativeButton( "Close", null) .show(); } }); } }
LandingActivity.java package naldi28.skripsi.imagechat; import android.content.Int ent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.firebase.ui.auth.AuthUI; import com.google.firebase.auth.FirebaseAuth; import naldi28.skripsi.imagechat.functional.StaticVariable; public class LandingActivity extends AppCompatActivity { FirebaseAuth auth = FirebaseAuth. getInstance(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout. activity_landing); if ( auth.getCurrentUser() == null) { startActivityForResult( AuthUI. getInstance() .createSignInIntentBuilder() .setIsSmartLockEnabled( false, true) .build(), StaticVariable. RC_SIGN_IN); } else { Intent mainIntent = new Intent(getApplicationContext(), MainActivity. class); startActivity(mainIntent); finish(); } } @Override protected void onActivityResult( int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == StaticVariable. RC_SIGN_IN) { // Successfully signed in
if (resultCode == RESULT_OK) {
Universitas Sumatera Utara

A-13
Intent mainIntent = new
Intent(getApplicationContext(), MainActivity. class); startActivity(mainIntent); finish(); } else { finish(); } } } }
SplashActivity.java package naldi28.skripsi.imagechat; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Window; import static java.lang.Thread. sleep; public class SplashActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout. activity_splash); getSupportActionBar().hide (); Thread thr = new Thread(){ @Override public void run(){ try{ sleep( 3000 ); Intent i= new Intent(getApplicationContext(), MainActivity. class); st artActivity(i); finish(); } catch (InterruptedException e){ e.printStackTrace(); } } }; thr.start(); } }
HelpActivity.java package naldi28.skripsi.imag echat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; import naldi28.skripsi.imagechat.functional.StaticVariable; public class HelpActivity extends AppCompatActivity {
Universitas Sumatera Utara

A-14
TextView tv, tv2, tv3, tv4, tv5, tv6; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout. activity_help); getSupportActionBar().setTitle( "Cara Penggunaan"); tv=(T extView)findViewById(R.id. tv_detail); tv2=(TextView)findViewById(R.id. tv_detail2); tv3=(TextView)findViewById(R.id. tv_detail3); tv4=(TextView)findViewById(R.id. tv_detail4); tv5=(TextView)findViewById(R.id. tv_detail5); tv6=(TextView)findViewById(R.id. tv_detail6); tv.setText(R.string. detail1); tv2.setText(R.string. detail2); tv3.setText(R.string. detail3); tv4.setText(R.string. detail4); tv5.setText(R.string. detail5); tv6.se tText(R.string. detail6); } }
ChatModel.java package naldi28.skripsi.imagechat.functional; import android.graphics.Bitmap; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import naldi28.skripsi.imagechat.R;
public class ChatModel { private String cipherText; private String cipherKey; private String publicKey_n; private String privateKey; private String publicKey_e; private String prime_p; private String prime_q; private String user; private String date; private Double encryptTimeRc4Plus; private Double encryptTimeRSA; public ChatModel(){} public ChatModel(String cipher_text, String cipher_key, String public_key_n, String private_key, String public_key_e, String prime_p, String prime_q, String user, String date, Double encrypt_time_rc4plus, Double encrypt_time_rsa){ this. cipherText = cipher_text;
Universitas Sumatera Utara

A-15
this. cipherKey = cipher_key; this. publicKey_n = public_key_n; this. privateKey = private_key; this. publicKey_e = public_key_e; this. prime_p = prime_p; this. prime_q = prime_q; this. user = user; this. date = date; this. encryptTimeRc4Plus = encrypt_time_rc4plus; this. encryptTimeRSA = encrypt_time_rsa; } public String getChipperKey() { return cipherKey; } public String getChipperT ext() { return cipherText; } public String getPublicKey_n() { return publicKey_n; } public String getPrivateKey() { return privateKey; } public String getPublicKey_e() { return publicKey_e; } public String getPrime_p() { return prime_p; } public String getPrime_q() { return prime_q; } public String getUser() { return user; } public String getDate() { return date; } public Double getEncryptTimeRc4Plus() { return encryptTimeRc4Plus; } public Double getEncryptTimeRSA() { return encryptTimeRSA; } public void setChipperKey(String cipherKey) { this. cipherKey = cipherKey; }
Universitas Sumatera Utara

A-16
public void setChipperText(String cipherText) { this. cipherText = cipherText; } public void setPublicKey_n(String publicKey_n) { this. publicKey_n = publicKey_n; } public void setPublicKey_e(String publicKey_e){ this. publicKey_e = publicKey_e; } public void setPrivateKey(String privateKey) { this. privateKey = privateKey; } public void setPrime_p(String prime_p) { this. prime_p = prime_p; } public void setPrime_q(String prime_q) { this. prime_q = prime_q; } public void setUser(String user) { this. user = user; } public void setDate(String date) { this. date = date; } public void setEncryptTimeRc4Plus(Double encryptTimeRc4Plus) { this. encryptTimeRc4Plus = encryptTimeRc4Plus; } public void setEncryptTimeRSA(Double encryptTimeRSA) { this. encryptTimeRSA = encryptTimeRSA; } public static class ChatHolder extends RecyclerView.ViewHolder { TextView mUser, mDate, mSize, mDecryptTime; ImageView mImage; RelativeLayout layoutChat; public ChatHolder(View itemView) { super(itemView); layoutChat = itemView.findViewById(R.id. layout_chat); mUser = itemView.findViewById(R.id. text_sender); mDate = itemView.findViewById(R.id. text_received_date);
mImage = itemView.findViewById(R.id. image_content);
itemView.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { mClickListener.onItemClick(view, getAdapterPosition()); }
Universitas Sumatera Utara

A-17
}); } private ClickListener mClickListener; public interface ClickListener { void onItemClick(View view, int position); } public void setOnClickListener(ClickListener clickListener) { mClickListener = clickListener; }
public void setUser(String user) { mUser.setText(user); } public void setDate(String date) { mDate.setText(date); }
public void setImage(Bitmap image) { mImage.setImageBitmap(image); } } }
StaticVariable.java package naldi28.skripsi.imagechat.functional; public class StaticVariable { public static final String ARG_CHAT_USER = "chat_user"; public static final String ARG_CHAT_SIZE = "chat_image_size"; public static final String ARG_CHAT_RESOLUTION = "chat_image_resolution"; public static final String ARG_CHAT_DATE = "chat_date"; public static final String ARG_CHAT_CIPHER = "chat_chipper"; public static final String ARG_CHAT_BITMAP = "chat_image_bitmap"; public static final String ARG_IMAGE_ENCRYPT_TIME = "image_encrypt_time"; public static final String ARG_IMAGE_DECRYPT_TIME = "image_decrypt_time"; public static final String ARG_KEY_DECRYPT_TIME = "time_decrypt_time"; public static final String ARG_KEY_ENCRYPT_TIME = "time_encrypt_time"; public static final String ARG_KEY_CIPHER = "key_chipper"; public static final String ARG_PRIVATE_KEY = "private_key"; public static final String ARG_PUBLIC_KEY_N = "public_key_n"; public static final String ARG_PUBLIC_KEY_E = "public_key_e"; public static final String ARG_PRIME_P ="prime_p"; public static final String ARG_PRIME_Q ="prime_q"; public static final String ARG_KEY_RC4PLUS = "key_rc4plus"; public static final int RC_IMAGE_PICK = 10; public static final int RC_SIGN_IN = 14; public static final int MAX_IMAGE_WIDTH = 500 ; public static final int MAX_IMAGE_HEIGHT = 500 ; public static final int MAX_SIZE = 500 ;
Universitas Sumatera Utara

A-18
}
myRC4Plus.java package naldi28.skripsi.imagechat.algorithm; /**
* RC4+
* Created by naldi28 on 06/09/2017.
*/
public class myRC4Plus { public myRC4Plus() {}
public String encrypt(String t, String e) { StringBuilder hasil = new StringBuilder(); String msg = ""; //int[] i = new int[256];
int[] S = new int[ 256 ]; int n, s, r, o; n=0; if(e.length()< 1) return msg = "Kunci tidak boleh kosong"; for ( int i = 0; i < 256 ; i++) S[i] = i; //KSA process
for ( int k = 0; k < 3; k++) { for ( int i = 0; i < 256 ; i++) { n = (n + S[i] + e.charAt(i % e.length())) % 256 ; r = S[i]; S[i] = S[n]; S[n] = (r); } }
int i = 0; for ( int k=0; k < t.length(); k++) { i = (i + 1) % 256 ; r = S[i]; n = (n + r) % 256 ; r = S[i]; S[i] = S[n]; S[n] = r; r = S[((i << 5) ^ (n >> 3)) % 256 ] + S[((n << 5) ^ (i >> 3)) % 256 ]; hasil.append(Character. toString(( char) (t.charAt(k) ^ ((S[(S[i] + S[n]) % 256 ] + S[(r ^ 0xAA) % 256 ]) ^ S[(n + S[i]) % 256 ]) % 256 ))); } return hasil.toString(); } }
Universitas Sumatera Utara

A-19
package naldi28.skripsi.imagechat.algorithm; import java.math.BigInteger; import java.util.Arrays; import java.util.Random; /**
* Created by naldi28 on 06/09/2017.
*/
public class myRSA { public myRSA() { generate(); } public static int p, q, phi, e, d, n; static char[] kar = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q','r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
private static Long sma(Long x, Long H, Long n) { Long r; int[] bin = new int[ 64]; int i; r = x; i = 0; /* ubah H ke Biner */
while( H > 0 ) { if (H % 2 == 0) { bin[i] = 0; } else { bin[i] = 1; } H = H/ 2; i++; } i -- ; while(i > 0) { r = (r * r) % n; if( bin[ -- i] == 1 ) { r = (r * x) % n; } } return r; } private static int lehmann( int n) { int a = 0,i = 0; Long l; for(i= 1;i<= 2;i++) { a = ( int)(Math. random()*(n - 2)+ 2); int temp = (n - 1)/ 2; l = sma(((Number) a).longValue(), ((Number) temp).longValue(),((Number) n).longValue()); //int64 = integer tapi
lebih panjang
if (l != 1) { break; } } if(i == 2 && n%2!= 0 && n%3!= 0 && n%5!= 0 && n%7!= 0) //bilangan
di check jika = 0 dia balik nyari lagi
Universitas Sumatera Utara

A-20
return n; else
return lehmann(( int)(Math. random()*( 9999 - 1000 )+ 1000 )); } //method mencari GCD
static int GCD(int m, int n){ if(m%n == 0) return n; return GCD(n, m%n); } //method modularInvers
static int modInverse( int a, int b){ int b0 = b; int x0 = 0; int x1 = 1; if(b == 1) return 1; while(a> 1){ if(b== 0) return 1; int q = a/b; int amb = a%b; a=b; b=amb; int xqx = x1 - q*x0; x1 = x0; x0 = xqx; } if(x1< 0) x1 +=b0; return x1; } //method modulo exponensial
static BigInteger modEx( long n, long p, long m){ if(p== 0) return BigInteger. ONE; BigInteger z = modEx(n, p/ 2, m); if(p%2 ==0) z = (z.multiply(z)).mod( new
BigInteger(Long. toString(m))); else
z = (z.multiply(z).multiply( new
BigInteger(Long. toString(n)))).mod( new BigInteger(Long. toString(m))); return z; } //random key text
public static String random(){ Random rnd = new Random(); String key = ""; int r; for( int i= 0; i< 5; i++){ r= rnd.nextInt( kar. length); key+= kar[r];
Universitas Sumatera Utara

A-21
} return key; } public static String Char2Ascii(String plainteks){ long [] ass_code = new long [ 5]; for( int i = 0; i<plainteks.length(); i++){ ass_code[i]=plainteks.toCharArray()[i]; } return Arrays. toString(ass_code); } //enkrip key rsa
public static String enkrip(String key){ int pjg_key = key.length(); int r; long [] hasil = new long [ 5]; long [] hasil_enkrip = new long[ 5]; long [] hasil_dekrip = new long[ 5]; for( int i= 0; i<pjg_key; i++){ hasil[i] = key.toCharArray()[i]; hasil_enkrip[i]= modEx(hasil[i], e, n).longValue(); r= ( int)hasil_enkrip[i]; //cipher_key+=kar_ascii[r];
hasil_dekrip[i]= modEx(hasil_enkrip[i], d, n).longValue(); } return Arrays. toString(hasil_enkrip); } public String decrypt(String cipher, int a, int b) { StringBuilder hasil = new StringBuilder(); cipher = cipher.replace( '[', ' ').replace( ']', ' ').trim(); String[] chipkuncis = cipher.split( ","); Long[] chipkuncid = new Long[chipkuncis. length]; Long tempHasil; for ( int i = 0; i < chipkuncis. length; i++) { chipkuncid[i] = Long. parseLong(chipkuncis[i].trim()); tempHasil = modEx(chipkuncid[i],a,b).longValue(); //dekrip rsa
hasil.append(( char) tempHasil.intValue()); } return hasil.toString(); } //generate bilangan prima
private static boolean isPrime( int n){ int i; for(i= 2; i<= Math. sqrt(n); i++){ if(n%i== 0){ return false; } } return true; } private void generate() {
Universitas Sumatera Utara

A-22
while ( true){ p = lehmann(( int)(Math. random()*( 9999 - 1000 )+ 1000 )); q = lehmann(( int)(Math. random()*( 9999 - 1000 )+ 1000 )); break; } if( p != q){ n = p* q; phi = ( p- 1)*( q- 1); while( true){ e = lehmann(( int)(Math. random()*( 9999 - 4)+ 4)); if( e<phi && GCD( e, phi)== 1){ break; } } d = modInverse( e, phi); } } public Integer getPrivateKey() { return d; } public Integer getPublicKey_n() { return n; } public Integer getPrime_P() { return p; } public Integer getPrime_Q() { return q; } public Integer getPublicKey_e() { return e;} }
Universitas Sumatera Utara

B-1
PROFILE
Full name : Ronaldi Tumanggor
Nickname: Naldi
Gender : Male
Place, Date of birth: Sindias,
February 28th, 1995
Nationality: Indonesia
Religion: Catholic
Address: Cempaka Street,
No.41, Medan, North Sumatera
Email:
m
Marital Status: unmarried
SKILLS
- App & Web Developer
- Graphic Design
- Teacher
- Blogger & SEO Master
- Public Speaking
COMPUTER SKILLS
- Programming: C++,
C#, Java, PHP, Javascript
- Database: MySQL
- IDE : Android Studio,
Sublime Text
- Software: Corel Draw
X7, Adobe Photoshop
CS7, Microsoft Office
- Framework: Bootstrap,
Codeigniter
PERSONAL DATA RONALDI TUMANGGOR
EDUCATION
Bachelor of Computer Science•University of Sumatera Utara•2013 –
2018. GPA: 3.75
Awards & Honors:
- Top 10 Best Team - Youth Entrepreneurship Symposium (YES),
Singapore – 2017
- Indonesia Delegate – Youth Entrepreneurship Symposium
(YES), Singapore – 2017
- Best Teacher – IKLC, USU – 2016
- The Most Outstanding Student – Bidikmisi, USU – 2016
- The Most Outstanding Student – Computer Science, USU – 2016
- Best Participant - Imilkom Basic Organizational Training – 2015,
etc
Higher Secondary Education•SMAN 1 Parlilitan • 2010 - 2013
Awards & Honors:
- Runner Up – Olimpiade Sains Nasional tk. Kabupaten - 2010
Secondary Education•SMPN 1 Parlilitan • 2007 – 2010
Primary Education •SDN 173493 Ambalo Parlilitan • 2001 – 2007
EXPERIENCE & WORKS
TEACHER • IKLC USU • 2015 – 2018
HEAD OF KOMINFO DIVISION • IKLC USU • 2016 – 2017
WASKOM DIVISION• IMILKOM USU • 2015 – 2016
CEO & FOUNDER • RUANGMAHASISWA.COM • 2015 - NOW
VOLUNTEER EXPERIENCE OR LEADERSHIP
- Ilmu Komputer Goes to School (IGTS) 2015 & 2016 – Teacher
- Gerakan Mahasiswa Mengajar 2017 – Volunteer
- Talkshow in Our School (TOS) 2017 – Speaker
- Meet – Up Peserta SBMPTN 2017 – Facilitator
CERTIFICATIONS
- Microsoft Certifications – Microsoft Technology Associate
(MTA) – 2016
- Badan Nasional Sertifikasi Profesi: Sertificate of Competence
for Basic Programming.
Universitas Sumatera Utara