Implementasi Algoritma Xor Dan Algoritma Rc4 Pada Aplikasi Enkripsi Dan Dekripsi Teks Berbasis Android

78

LISTING PROGRAM

Kode Program Form Home (MainActivity.java) :
package com.example.simpleencryption;

import
import
import
import
import
import
import
import
import
import

android.os.Bundle;
android.app.Activity;
android.app.AlertDialog;

android.content.DialogInterface;
android.content.Intent;
android.view.KeyEvent;
android.view.Menu;
android.view.MenuItem;
android.view.View;
android.widget.Button;

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//pindah ke main menu
Button main_menu = (Button) findViewById(R.id.btn_menu);
main_menu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View menu) {
Intent myIntent = new Intent(menu.getContext(),
MenuActivity.class);

startActivityForResult(myIntent, 0);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it
is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
//pilihan menu item
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.itemHelp:

79

Intent helpIntent = new Intent(MainActivity.this,

HelpActivity.class);
startActivityForResult(helpIntent, 0);
break;
case R.id.itemAbout:
Intent aboutIntent = new
Intent(MainActivity.this, AboutActivity.class);
startActivityForResult(aboutIntent, 0);
break;
case R.id.itemExit:
exit();
break;
}
return false;
}
//fungsi alert dialog button exit
public void exit(){
AlertDialog.Builder keluar = new AlertDialog.Builder(this);
keluar.setMessage("Are you sure want to
exit?").setCancelable(false)
.setPositiveButton("Yes", new

DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
MainActivity.this.finish();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
}).show();
}
//fungsi alert dialog ketika tombol back android ditekan
public boolean onKeyDown(int keyCode, KeyEvent event){
if (keyCode== KeyEvent.KEYCODE_BACK) {
exit();
}
return super.onKeyDown(keyCode, event);

}
}

Kode Program Form Main Menu (MenuActivity.java) :
package com.example.simpleencryption;

import
import
import
import

android.os.Bundle;
android.app.Activity;
android.content.Intent;
android.view.Menu;

80

import android.view.MenuItem;
import android.view.View;

import android.widget.Button;
public class MenuActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_menu);
getActionBar().setDisplayHomeAsUpEnabled(true);
//pindah ke menu enkripsi
Button encryption_menu = (Button)
findViewById(R.id.btn_menuEnkripsi);
encryption_menu.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View encryption_menu) {
Intent myIntent = new
Intent(encryption_menu.getContext(), EncryptionActivity.class);
startActivityForResult(myIntent, 0);
}
});
//pindah ke menu dekripsi

Button decryption_menu = (Button)
findViewById(R.id.btn_menuDekripsi);
decryption_menu.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View decryption_menu) {
Intent myIntent = new
Intent(decryption_menu.getContext(), DecryptionActivity.class);
startActivityForResult(myIntent, 0);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it
is present.
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
//pilihan menu item

@Override
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.itemHelpMenu:
Intent helpIntent = new Intent(MenuActivity.this,
HelpActivity.class);
startActivityForResult(helpIntent, 0);
break;

81

case R.id.itemAboutMenu:
Intent aboutIntent = new
Intent(MenuActivity.this, AboutActivity.class);
startActivityForResult(aboutIntent, 0);
break;
}
return false;
}
}


Kode Program Form Menu Encryption (EncryptionActivity.java) :
package com.example.simpleencryption;

import
import
import
import
import
import
import
import
import
import

android.os.Bundle;
android.text.Editable;
android.text.TextWatcher;
android.view.View;
android.widget.Button;

android.widget.EditText;
android.widget.TextView;
android.widget.Toast;
android.app.Activity;
android.content.Intent;

public class EncryptionActivity extends Activity {
EditText plaintext, kunci_XOR, kunci_RC4, ciphertext;
TextView txt_counter, keyXOR_counter, keyRC4_counter;
String plainteks, key_XOR, key_RC4, cipherteks_XOR, cipherteks_RC4;
int counter, counter2, counter3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.encryption_menu);
// Show the Up button in the action bar.
getActionBar().setDisplayHomeAsUpEnabled(true);
plaintext = (EditText) findViewById(R.id.plaintext);
kunci_XOR = (EditText) findViewById(R.id.key_XOR);
kunci_RC4 = (EditText) findViewById(R.id.key_RC4);

ciphertext = (EditText) findViewById(R.id.ciphertext);
txt_counter = (TextView) findViewById(R.id.text_counter);
keyXOR_counter = (TextView) findViewById(R.id.keyXOR_counter);
keyRC4_counter = (TextView) findViewById(R.id.keyRC4_counter);
//menghitung jumlah karakter plaintext
plaintext.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int
count, int after) {
}

82

@Override
public void onTextChanged(CharSequence s, int start, int
before, int count) {
txt_counter.setText(plaintext.length() + " ");
counter = count;
}
@Override
public void afterTextChanged(Editable s) {
}
});
//menghitung jumlah karakter kunci XOR
kunci_XOR.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s2, int start2,
int count2, int after2) {
}
@Override
public void onTextChanged(CharSequence s2, int start2, int
before2, int count2) {
keyXOR_counter.setText(kunci_XOR.length() + " ");
counter2 = count2;
}
@Override
public void afterTextChanged(Editable s2) {
}
});
//menghitung jumlah karakter kunci RC4
kunci_RC4.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s3, int
start3, int count3, int after3) {
}
@Override
public void onTextChanged(CharSequence s3, int start3,
int before3, int count3) {
keyRC4_counter.setText(kunci_RC4.length() + " ");
counter3 = count3;
}
@Override
public void afterTextChanged(Editable s3) {
}
});

83

//button enkripsi
Button btn_encryption = (Button)
findViewById(R.id.btn_encryption);
btn_encryption.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
plainteks = plaintext.getText().toString();
key_XOR = kunci_XOR.getText().toString();
key_RC4 = kunci_RC4.getText().toString();
String plainteks_check = plainteks;
if(plainteks_check.equals("")){
Toast.makeText(getApplicationContext(),
"Input Plaintext!", Toast.LENGTH_SHORT).show();
} else {
try {
//fungsi jika panjang key_XOR > plainteks
if(key_XOR.length() > plainteks.length()){
Toast.makeText(getApplicationContext(), "Key XOR Length > Plaintext
Length!", Toast.LENGTH_SHORT).show();
ciphertext.setText("");
} else {
//start time
long start_time = System.currentTimeMillis();
//fungsi jika panjang key_XOR < plainteks
if(key_XOR.length() < plainteks.length()) {
String tempkey_XOR = "";
for(int i=0; i Ciphertext
Length!", Toast.LENGTH_SHORT).show();
plaintext_dec.setText("");
} else {
//start time
long start_time = System.currentTimeMillis();
//fungsi jika panjang keyXOR < cipherteksXOR
if(key_XOR.length() < cipherteks_XOR.length()){
String tempkey_XOR = "";
for(int i=0; i Untuk membuat pesan atau informasi
menjadi rahasia/dienkripsi"
+ " silahkan pilih Menu kemudian pilih menu Encryption. Lalu
input pesan/plainteks awal"
+ " pada form Input Plaintext Kemudian input kunci XOR dan
Kunci RC4."
+ " Kedua kunci ini merupakan kunci rahasia yang harus anda"
+ " jaga kerahasiannya. Lalu pilih tombol Encryption"
+ " dan aplikasi akan menampilkan pesan yang telah
dirahasiakan/cipherteks. Kemudian"
+ " pilih tombol Share jika anda ingin membagi/mengirim
cipherteks tersebut via aplikasi"
+ " pihak ketiga seperti pesan, Gmail, WhatsApp, dll."
+ "\n\n--> Untuk mengubah cipherteks menjadi pesan
asli/didekripsi silahkan pilih"
+ " Menu kemudian pilih menu Decryption. Lalu input pesan yang
telah terenkripsi"
+ " /cipherteks pada form Input Ciphertext. Input kunci XOR
dan kunci RC4 sesuai dengan"
+ " proses enkripsi sebelumnya. Lalu pilih tombol Decryption
dan aplikasi akan"
+ " menampilkan pesan asli/plainteks. Kemudian pilih tombol
Share jika anda ingin membagi"
+ "/mengirim plainteks tersebut via aplikasi pihak ketiga
seperti pesan, Gmail, WhatsApp, dll."
+ "\n\n--> Saran kreator bedakan penggunaan kunci antara kunci
XOR dengan kunci RC4"
+ " sehingga cipherteks tidak mudah dipecahkan");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it
is present.
getMenuInflater().inflate(R.menu.help, menu);
return true;
}
}

Kode Program Form Menu About (AboutActivity.java) :
package com.example.simpleencryption;
import android.os.Bundle;
import android.app.Activity;
import android.text.method.ScrollingMovementMethod;

92

import android.view.Menu;
import android.widget.TextView;

public class AboutActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about_menu);
// Show the Up button in the action bar.
getActionBar().setDisplayHomeAsUpEnabled(true);
TextView txt_about = (TextView) findViewById(R.id.text_about);
txt_about.setMovementMethod(new ScrollingMovementMethod());
txt_about.setText("This Application Created By \nTanta Aditya
Pranata a.k.a Zero" +
"\nCopyright ©2015" + "\n\nSpecial thanks to:" +
"\n\n-Allah SWT yang telah memberikan kreator
kekuatan, kesehatan dan ilmu pengetahuan untuk mengerjakan aplikasi ini" +
"\n\n-Keluarga yang merupakan sumber inspirasi
dan motivasi terbesar untuk mengerjakan aplikasi ini" +
"\n\n-Pak Poltak dan Bu Amel sebagai dosen
pembimbing yang telah membimbing dan mengarahkan kreator sehingga dapat
menyelesaikan aplikasi ini" +
"\n\n-Nurhayati Lubis, S.Kom (Cabe) yang telah
memberi dukungan dan semangat kepada kreator sehingga kreator rajin
mengerjakan program" +
"\n\n-4TRA, Nandes, dan Anandini yang telah
memberi inovasi code sehingga kreator dapat membuat source code sesuai
dengan penelitian" +
"\n\n-Laptop yang telah berjuang T_T meskipun
kondisi mu sudah tak sanggup lagi menjalankan program2 jaman sekarang" +
"\n\n-Stackoverflow dan Stackoverchange sebagai
situs sumber pengetahuan kreator ketika banyak eror terjadi" +
"\n\n-Serta teman-teman yang secara langsung
maupun tidak langsung turut membantu dalam pembuatan aplikasi ini");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it
is present.
getMenuInflater().inflate(R.menu.about, menu);
return true;
}
}

Kode Program Algoritma RC4 (RC4.java) :
package com.example.simpleencryption;
import java.security.InvalidKeyException;
public class RC4 {
private char[] key;

93

private int[] SBox;
private static final int sboxLength = 256;
public RC4(String key) throws InvalidKeyException {
setKey(key);
}
public char[] encryptionRC4(final char[] plain) {
SBox = initSBox(key);
char[] cipher = new char[plain.length];
int i = 0;
int j = 0;
//PRGA
for (int n = 0; n < plain.length; n++) {
i = (i + 1) % sboxLength;
j = (j + SBox[i]) % sboxLength;
Swap(i, j, SBox);
int rand = SBox[(SBox[i] + SBox[j]) % sboxLength];
cipher[n] = (char) (rand ^ (int) plain[n]);
}
return cipher;
}
//KSA
private int[] initSBox(char[] key) {
int[] SBox = new int[sboxLength];
int j = 0;
//Sbox awal
for (int i = 0; i < sboxLength; i++) {
SBox[i] = i;
}
//Sbox akhir
for (int i = 0; i < sboxLength; i++) {
j = (j + SBox[i] + key[i % key.length]) % sboxLength;
Swap(i, j, SBox);
}
return SBox;
}
private void Swap(int i, int j, int[] SBox) {
int temp = SBox[i];
SBox[i] = SBox[j];
SBox[j] = temp;
}
public void setKey(String key) throws InvalidKeyException {
this.key = key.toCharArray();
}
}

94

DAFTAR RIWAYAT HIDUP

DATA PRIBADI

Nama Lengkap

: Tanta Aditya Pranata

Jenis Kelamin

: Laki-laki

Tempat, Tanggal Lahir

: Jambi, 12 Oktober 1993

Alamat

: Jl. Jamin Ginting Komplek Pamen No 24 Padang
Bulan, Medan.

Agama

: Islam

E-mail

: tanta.aditya.pranata@gmail.com

Pendidikan Terakhir

: Universitas Sumatera Utara Medan, Fakultas Ilmu
Komputer dan Teknologi Informasi Jurusan S1 Ilmu
Komputer

PENDIDIKAN FORMAL
2011 – 2015

: S1 Ilmu Komputer Universitas Sumatera Utara, Medan

2008 – 2011

: SMA Negeri 11 Jambi

2005 – 2008

: SMP Negeri 22 Jambi

1999 – 2005

: SD Negeri 205 Jambi

PENGALAMAN ORGANISASI DAN KEGIATAN ILMIAH
 Anggota Siswa Pecinta Alam Argawana SMAN 11 Jambi 2008-2009

 Ketua Humas Siswa Pecinta Alam Argawana SMAN 11 Jambi 2009-2010
 Peralatan Pekan Olahraga dan Seni (PORSENI) 2013

 Anggota acara Penerimaan Mahasiswa Baru (PMB) 2013
 Sekretaris Jurnalistik PEMA Fasilkom-TI 2014-2015

 Kemahasiswaan Ikatan Mahasiswa S1 Ilmu Komputer (IMILKOM) 2014-2015
 Praktek Kerja Lapangan PT. Pertamina (Persero) MOR I Medan Juni-Juli 2014