LAMPIRAN A : LISTING PROGRAM
1.
splash.java
import android.app.Activity; import android.os.Bundle; import android.content.Intent;
import android.content.pm.ActivityInfo; import android.view.Window;
public class Splash extends Activity { protected int splash_ = 1000; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_splash);
//getSupportActionBar().hide();
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); setSplash();
}
public void setSplash() { new Thread() {
public void run() { try {
Thread.sleep(2000); } catch (Exception e) {
}
Intent i = new Intent(Splash.this, MainActivity.class); Splash.this.finish();
startActivity(i); }
}.start(); }
}
2.
BuatPesan.java
import android.app.Activity;
import android.content.ContentValues; import android.content.Intent;
import android.database.Cursor; import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone; import android.telephony.SmsManager;
import android.text.TextUtils; import android.util.Log; import android.view.View;
import android.view.View.OnClickListener; import android.widget.Button;
import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import java.util.Random;
public class BuatPesan extends Activity {
EditText nomorKontak, text, hasilencrypt, kunci_p_enk, kunci_q_enk, kuncihill_enk, hasilencryptkunci;
TextView pubkey, nilaiK; // contact picker
private static final int CONTACT_PICKER_RESULT = 1001;
private long waktumulaihill, waktuakhirhill, selisihhill, waktumulairabin;
// phonecontact
public void doLaunchContactPicker(View view) {
Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, uri); startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT); }
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
long temp = binary % 10;
decimal += temp * Math.pow(2, power); binary = binary / 10;
power++; }
}
return decimal; }
public boolean fermat(int p) { boolean hasil = true; Random rand = new Random(); int a = rand.nextInt(20) + 1; if (a % p == 0) {
hasil = false;
} else if (modExp(a, p - 1, p) != 1) { hasil = false;
}
return hasil; }
public static int modExp(int a, int b, int n) { if (b == 0) return 1;
long t = modExp(a, b / 2, n); long c = (t * t) % n;
if (b % 2 == 1) c = (c * a) % n; return (int) c; }
@Override
public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState);
this.setTitle("Encrypt Message");
setContentView(R.layout.buatpesan);
final Button send = (Button) findViewById(R.id.send); final Button encrypt = (Button) findViewById(R.id.encrypt);
final Button encryptkunci = (Button) findViewById(R.id.encryptkunci); text = (EditText) findViewById(R.id.smsBox);
nomorKontak = (EditText) findViewById(R.id.nomorHp); hasilencrypt = (EditText) findViewById(R.id.hasilEncrypt);
hasilencryptkunci = (EditText) findViewById(R.id.hasilEncryptkunci); kunci_p_enk = (EditText) findViewById(R.id.kunci_p_enk);
kunci_q_enk = (EditText) findViewById(R.id.kunci_q_enk); kuncihill_enk = (EditText) findViewById(R.id.KunciHill_enk); pubkey = (TextView) findViewById(R.id.pubkey);
nilaiK = (TextView) findViewById(R.id.Kvalues);
Intent i = getIntent();
if (i.getStringExtra("message") != null) { text.setText(i.getStringExtra("message")); }
encryptkunci.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) { // TODO Auto-generated method stub
waktumulairabin = System.currentTimeMillis(); String enkunciaes = "";
String keyx = kuncihill_enk.getText().toString(); String p = kunci_p_enk.getText().toString(); String q = kunci_q_enk.getText().toString(); try {
if (TextUtils.isEmpty(keyx)) {
kuncihill_enk.setError("Your key is Empty"); } else if (TextUtils.isEmpty(p)) {
kunci_p_enk.setError("Private Keys cannot Empty"); } else if (TextUtils.isEmpty(q)) {
kunci_q_enk.setError("Private Keys cannot Empty"); } else if (!p.matches("[0-9]*")) {
} else if (!q.matches("[0-9]*")) {
kunci_q_enk.setError("Private Keys must be a Number"); } else if (p.equals(q)) {
kunci_p_enk.setError("Private Keys must be Different"); } else if (!fermat(Integer.parseInt(p))) {
kunci_p_enk.setError("Private Key must be a Prime Number");
} else if (!fermat(Integer.parseInt(q))) {
kunci_q_enk.setError("Private Key must be a Prime Number");
} else if (Integer.parseInt(p) % 4 != 3) {
kunci_p_enk.setError("Private Keys must have modulus 3 when devide by 4");
} else if (Integer.parseInt(q) % 4 != 3) {
kunci_q_enk.setError("Private Keys must have modulus 3 when devide by 4");
} else {
long startTime = System.currentTimeMillis(); int uvw = Integer.parseInt(p);
int xyz = Integer.parseInt(q); long publickey = uvw * xyz;
pubkey.setText("public key :" + publickey); //tabelEnc obj1 = new tabelEnc();
for (int i = 0; i < keyx.length(); ++i) {
//Toast.makeText(getApplicationContext(), "ke: "+i+"ms", Toast.LENGTH_LONG).show();
char b = keyx.charAt(i);
int plain = tabelEnc.getIndex(b); String double_text = toBinary(plain) + toBinary(plain);
long double_dectext = Long.parseLong(double_text); long m = toDecimal(double_dectext);
long k = (m - (m % publickey)) / publickey; nilaiK.setText(nilaiK.getText() + " " + k); SimpanKunci.setKkey(String.valueOf(k)); long c = (long) (Math.pow(m, 2) % publickey); SimpanKunci.setCipherkey(String.valueOf(c));
hasilencryptkunci.setText(hasilencryptkunci.getText() + " " + c);
}
// obj2 = new simpanVariabel();
long endTime = System.currentTimeMillis(); long duration = (endTime - startTime);
Toast.makeText(getApplicationContext(), "Encryption Time: " + duration + "ms", Toast.LENGTH_LONG).show();
}
} catch (Exception e1) {
Toast.makeText(BuatPesan.this, enkunciaes, Toast.LENGTH_LONG).show();
e1.printStackTrace(); }
//hasilencryptkunci.setText(enkunciaes); }
});
encrypt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View e) {
String ambilKata = text.getText().toString();
String kunci_enk_hill = kuncihill_enk.getText().toString(); String enKata = "";
try {
if ((kuncihill_enk.getText().toString().equals("") || text.getText().toString().equals(""))) {
Toast.makeText(BuatPesan.this, "Pesan ataupun kunci tidak boleh kosong",
Toast.LENGTH_SHORT).show(); } else {
waktumulaihill = System.currentTimeMillis(); hillCipher obj = new hillCipher();
double sq = Math.sqrt(kunci_enk_hill.length());
System.out.println("ini double " + sq + " ini long " + (long) sq + " ini int " + (int) sq);
if (sq != (long) sq)
System.out.println("panjang kunci salah"); //0+3TLeT*9[I.MV5hk1z%z mOTR$QB>U
else {
int s = (int) sq;
if (obj.check(kunci_enk_hill, s)) { System.out.println("Result:");
obj.divide(ambilKata, s); //pakai kunci ASCII dari 32-126
System.out.println("ini ya guys :" + obj.hasilenkripsi);
Log.i("Kata Asal", ambilKata); enKata = obj.hasilenkripsi; Log.i("Kata Hasil", enKata); obj.cofact(obj.keymatrix, s);
System.out.print("inversi key " + obj.invkey); }
}
hasilencrypt.setText(enKata);
waktuakhirhill = System.currentTimeMillis(); selisihhill = waktuakhirhill - waktumulaihill;
Toast.makeText(BuatPesan.this, "lama enkripsi Hill Cipher " + Long.toString(selisihhill), Toast.LENGTH_SHORT).show();
}
} catch (Exception e1) { e1.printStackTrace(); }
} });
send.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String pesan = hasilencrypt.getText().toString(); String nomor = nomorKontak.getText().toString(); if (pesan.length() > 0 && nomor.length() > 0) { try {
// proses kirim sms
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(nomor, null, pesan, null, null);
// proses simpan sms yang terkirim
ContentValues values = new ContentValues(); values.put("address", nomor);
values.put("body", pesan); getContentResolver().insert(
Uri.parse("content://sms/sent"), values);
Toast.makeText(BuatPesan.this,
"Pesan berhasil dikirim", Toast.LENGTH_SHORT) .show();
finish();
} catch (Exception e) {
Toast.makeText(BuatPesan.this, "Pesan gagal dikirim", Toast.LENGTH_SHORT).show();
e.printStackTrace(); }
} else {
Toast.makeText(BuatPesan.this,
"Nomor atau Isi Pesan Masing Kosong", Toast.LENGTH_SHORT).show();
3.
LihatPesan.java
import android.app.Activity;
import android.content.DialogInterface; import android.content.Intent;
import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.View;
import android.view.View.OnClickListener; import android.widget.Button;
import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import java.nio.charset.Charset; import java.util.Random;
public class LihatPesan extends Activity {
private static final Charset UTF8_CHARSET = Charset.forName("UTF-8"); final int tipe_enkripsi=128;
private long
selisihhill,waktuawalhill,waktuakhirhill,selisihrabin,waktuawalrabin,waktuakhirrab in,selisihtotal;
TextView number, date, msg,hasilDekripsi;
Button forward, hapus,dekripsi,dekripsikunci,btndekriphill;
EditText kunci_p_dek,kunci_q_dek,nilai_k,kuncihill_Dek,hasildekkuncihill; public boolean pil_rad=true;
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.lihatpesan); this.setTitle("Decrypt Message");
number = (TextView) findViewById(R.id.tvNumber); date = (TextView) findViewById(R.id.tvDate); msg = (TextView) findViewById(R.id.tvMsg);
hasilDekripsi = (TextView) findViewById(R.id.hasildekrip); dekripsi = (Button) findViewById(R.id.dekripsiBtn); forward = (Button) findViewById(R.id.btFrd);
btndekriphill=(Button) findViewById(R.id.btnDekripkunci); hapus = (Button) findViewById(R.id.hapus);
kunci_p_dek = (EditText) findViewById(R.id.kunci_p_dek); kunci_q_dek = (EditText) findViewById(R.id.kunci_q_dek);
hasildekkuncihill=(EditText) findViewById(R.id.hasildekkuncihill); kuncihill_Dek = (EditText) findViewById(R.id.kuncihill_dek); nilai_k = (EditText)findViewById(R.id.k_values);
kuncihill_Dek.setText(SimpanKunci.getCipherkey()); nilai_k.setText(SimpanKunci.getKkey());
btndekriphill.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) { // TODO Auto-generated method stub int a_inv = 0;
int flag = 0;
waktuawalrabin=System.currentTimeMillis();
String ambilkata2 = kuncihill_Dek.getText().toString(); String kunci_dek = kunci_p_dek.getText().toString(); String temp="";
String hasil2 = null; try {
String keyx = SimpanKunci.getCipherkey(); String p = kunci_p_dek.getText().toString(); String q = kunci_q_dek.getText().toString(); String k = SimpanKunci.getKkey();
if ("".equals(keyx)) {
kuncihill_Dek.setError("Your Cipherkey is Empty"); } else if ("".equals(p)) {
long Sfinal = Long.parseLong(SS);
dekripsi.setOnClickListener(new OnClickListener() {
} }
double sqt = Math.sqrt(keyaes_dek.length()); System.out.println("ini double "+sq+" ini long "+(long)sq+" ini int "+(int)sq);
if (sqt != (long) sqt)
System.out.println("panjang kunci salah"); //0+3TLeT*9[I.MV5hk1z%z mOTR$QB>U
else {
int s = (int) sqt;
if (obj1.check(keyaes_dek, s)) {
System.out.println("Result:");
obj1.divide(ambilKata, s); //pakai kunci ASCII dari 32-126
System.out.println("ini ya wee :"+obj1.hasilenkripsi);
deKata=obj1.hasilenkripsi; obj1.cofact(obj1.keymatrix, s);
System.out.print("inversi key "+obj1.invkey); }
}
waktuakhirhill=System.currentTimeMillis(); hasilDekripsi.setText(deKata);
selisihhill=(waktuakhirhill-waktuawalhill); selisihtotal=selisihhill+selisihrabin;
Toast.makeText(LihatPesan.this, "waktu dekrips Hill Cipher "+Long.toString(selisihtotal),Toast.LENGTH_SHORT).show();
} else{
Toast.makeText(LihatPesan.this, "PlainText Kunci Hill masih kosong",Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
Log.i("Error", e.getMessage());hasilDekripsi.setText("kunci tidak memenuhi GCD atau tidak memenuhi syarat inversi modulo ");}
} }); }
@Override
protected void onStart() { super.onStart(); Intent i = getIntent();
number.setText(i.getStringExtra("no")); date.setText(i.getStringExtra("date")); msg.setText(i.getStringExtra("msg"));
forward.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent click = new Intent(LihatPesan.this, BuatPesan.class); click.putExtra("message", msg.getText());
startActivity(click);
} });
hapus.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
Dialogs.showConfirmation(LihatPesan.this, R.string.hapuspesan_dialog,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent i = getIntent(); String id_pesan_hapus = i
String id_thread_hapus = i
.getStringExtra("idthread");
// hapus pesan
Uri deleteUri = Uri.parse("content://sms");
getContentResolver() .delete(deleteUri,
"thread_id=? and _id=?", new String[] {
String.valueOf(id_thread_hapus),
String.valueOf(id_pesan_hapus) });
finish();
Toast.makeText(LihatPesan.this,
"Pesan Terhapus", Toast.LENGTH_SHORT) .show();
// redirect data pesan onBackPressed(); }
}); }
});
}
public String toBinary(long n) { if (n == 0) {
return "0"; }
String binary = ""; while (n > 0) { long rem = n % 2; binary = rem + binary; n = n / 2;
}
return binary; }
public long toDecimal(long binary){ long decimal = 0;
long power = 0; while(true){
if(binary == 0){ break; } else {
long temp = binary%10;
decimal += temp*Math.pow(2, power); binary = binary/10;
power++; }
}
return decimal; }
public static int[] gcd(int p, int q) { if (q==0)
return new int[] { p, 1, 0 }; int[] vals = gcd(q, p % q); int d = vals[0];
int a = vals[2];
int b = vals[1] - (p / q) * vals[2]; return new int[] { d, a, b }; }
public static int modExp(int a, int b, int n) { if (b == 0) return 1;
long t = modExp(a, b/2, n); long c = (t*t)%n;
return (int)c; }
public boolean check(String x){ boolean hsl = true;
int a = Math.round(x.length()/2); for(int i=0; i<a; ++i)
if (x.charAt(i)!=x.charAt(i+a)) hsl=false;
return hsl; }
public boolean fermat(int p){ boolean hasil=true;
Random rand = new Random(); int a=rand.nextInt(20)+1; if (a%p==0){
hasil=false; }
else if (modExp(a,p-1,p)!=1){ hasil=false;
}
return hasil; }
public String singlebin(String x){ String n="";
for(int y=0; y<Math.floor(x.length()/2); y++){ n= n+x.charAt(y);
}
return n; }
@Override
public void onBackPressed() {
Intent link = new Intent(LihatPesan.this, DataPesan.class); Intent i = getIntent();
link.putExtra("tipepesan", i.getStringExtra("asal")); startActivity(link);
}}
4.
MainActivity.java
import android.os.Bundle; import android.view.View;
import android.view.View.OnClickListener; import android.view.Window;
import android.widget.Button; import android.app.Activity; import android.content.Intent;
public class MainActivity extends Activity { //Button tentang, bantuan;
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main);
((Button) findViewById(R.id.btnPesanbaru)).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
MainActivity.this.startActivity(new Intent( MainActivity.this, BuatPesan.class)); }
});
((Button) findViewById(R.id.btnPesankeluar)).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
startActivity(click); }
});
((Button) findViewById(R.id.btnPesanmasuk)).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent click = new Intent(MainActivity.this, DataPesan.class);
click.putExtra("tipepesan", "inbox"); startActivity(click);
} });
((Button) findViewById(R.id.btnBantuan)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) { // TODO Auto-generated method stub
Intent i = new Intent(MainActivity.this, bantuan.class); startActivity(i);
} });
((Button) findViewById(R.id.btnTentang)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) { // TODO Auto-generated method stub
Intent i = new Intent(MainActivity.this, tentang.class); startActivity(i);
} });
((Button) findViewById(R.id.btnKeluar)).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
System.exit(0); }
}); } }
5.
DataPesan.java
import java.util.Date; import java.text.DateFormat; import android.app.Activity;
import android.content.ContentResolver; import android.content.Intent;
import android.database.Cursor; import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.v4.widget.SimpleCursorAdapter; import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView;
import android.widget.TextView; import android.view.View;
private SimpleCursorAdapter dataAdapter;
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.listpesan); this.setTitle("List Message"); displayListView();
}
private void displayListView() { Intent i = getIntent(); Uri uriSMS = Uri
.parse("content://sms/" + i.getStringExtra("tipepesan"));
Cursor cursor = getContentResolver().query(uriSMS, null, null, null,
null);
String[] columns = new String[] { "address", "body", "date" };
int[] to = new int[] { R.id.pengirim, R.id.isipesan, R.id.waktu };
dataAdapter = new SimpleCursorAdapter(this, R.layout.pesan_row, cursor,
columns, to, 0);
ListView listView = (ListView) findViewById(R.id.listView1);
dataAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
// ubah nomer hape dengan nama yang ada dikontak
if (columnIndex == 2) {
TextView tv = (TextView) view; String pengirimDB =
cursor.getString(cursor
.getColumnIndex("address"));
// get contact name
Uri contactUri = Uri.withAppendedPath(
ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
Uri.encode(pengirimDB)); Cursor cur =
getContentResolver().query(contactUri, null,
null, null, null); ContentResolver contect_resolver = getContentResolver();
int size = cur.getCount(); if (size > 0 && cur != null) {
for (int i = 0; i < size; i++) { cur.moveToPosition(i);
String id1 = cur.getString(cur
Cursor phoneCur = contect_resolver
.query(contactUri,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = ?",
new String[] { id1 }, null);
if (phoneCur.moveToFirst()) {
String namaKontak = phoneCur.getString(phoneCur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAM E));
phoneCur.close();
tv.setText(namaKontak);
} else {
tv.setText(pengirimDB);
}
}
cur.close(); } else {
tv.setText(pengirimDB); }
return true; }
// konversi tanggal if (columnIndex == 4) {
TextView tv = (TextView) view;
String waktu = cursor.getString(cursor .getColumnIndex("date")); long l = Long.parseLong(waktu);
Date d = new Date(l); String date =
DateFormat.getDateInstance(DateFormat.LONG)
.format(d); String time =
DateFormat.getTimeInstance().format(d);
String view_waktu = date + " " + time;
tv.setText(view_waktu);
return true; }
return false; }
});
// jika di pesan di klik, maka akan dialihkan ke lihat pesan secara full
listView.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> listView, View view,
int position, long id) { // Get the cursor, positioned to the corresponding row in the
// result set
Cursor cursor = (Cursor) listView.getItemAtPosition(position);
// Get the state's capital from this row in the database.
String view_pengirim = cursor.getString(cursor
.getColumnIndexOrThrow("address"));
String view_isipesan = cursor.getString(cursor .getColumnIndexOrThrow("body"));
String waktu = cursor.getString(cursor
.getColumnIndexOrThrow("date"));
// konversi tanggal
long l = Long.parseLong(waktu); Date d = new Date(l);
String date = DateFormat.getDateInstance(DateFormat.LONG)
.format(d); String time =
DateFormat.getTimeInstance().format(d);
String view_waktu = date + " " + time;
String view_idpesan = cursor.getString(cursor .getColumnIndexOrThrow("_id")); String view_thread = cursor.getString(cursor
.getColumnIndexOrThrow("thread_id"));
Intent click = new Intent(DataPesan.this, LihatPesan.class);
// get contact name
Uri contactUri = Uri.withAppendedPath(
ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
Uri.encode(view_pengirim)); Cursor cur =
getContentResolver().query(contactUri, null, null, null, null);
ContentResolver contect_resolver = getContentResolver();
int size = cur.getCount(); if (size > 0 && cur != null) {
for (int i = 0; i < size; i++) { cur.moveToPosition(i);
String id1 = cur.getString(cur
.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
Cursor phoneCur = contect_resolver
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = ?", new String[] { id1 },
null);
if (phoneCur.moveToFirst()) { String namaKontak = phoneCur.getString(phoneCur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAM E));
phoneCur.close(); click.putExtra("no", namaKontak);
} else {
click.putExtra("no", view_pengirim);
}
}
cur.close(); } else {
click.putExtra("no", view_pengirim); }
// kirim data ke view pesan
click.putExtra("msg", view_isipesan); click.putExtra("idpesan", view_idpesan); click.putExtra("idthread", view_thread); click.putExtra("date", view_waktu); Intent i = getIntent();
click.putExtra("asal", i.getStringExtra("tipepesan"));
startActivity(click); }
}); }
@Override
public void onBackPressed() {
Intent link = new Intent(DataPesan.this, MainActivity.class);
startActivity(link); finish();
} }
6.
hillCipher.java
public class hillCipher { int keymatrix[][]; int linematrix[]; int resultmatrix[]; String hasilenkripsi = ""; String invkey = "";
public String divide(String temp, int s) { while (temp.length() > s) {
String sub = temp.substring(0, s); temp = temp.substring(s, temp.length()); perform(sub);
}
else if (temp.length() < s) {
for (int i = temp.length(); i < s; i++) temp = temp + ' ';
perform(temp); }
return hasilenkripsi; }
//E>Ybm=PNu
public void perform(String line) { linetomatrix(line);
linemultiplykey(line.length()); result(line.length());
}
public void keytomatrix(String key, int len) { keymatrix = new int[len][len];
int c = 0;
for (int i = 0; i < len; i++) { for (int j = 0; j < len; j++) {
keymatrix[i][j] = (tabelEnc.getIndex(key.charAt((3*i)+j))); System.out.print(keymatrix[i][j] + " ");
c++; }
System.out.println(); }
}
public void linetomatrix(String line) { linematrix = new int[line.length()]; for (int i = 0; i < line.length(); i++) {
linematrix[i] = (tabelEnc.getIndex(line.charAt(i))); }
}
public void linemultiplykey(int len) { resultmatrix = new int[len]; for (int i = 0; i < len; i++) { for (int j = 0; j < len; j++) {
resultmatrix[i] += keymatrix[i][j] * linematrix[j]; }
resultmatrix[i] %= 97; }
}
public void result(int len) { //System.out.print("len "+len); String result = "";
for (int i = 0; i < len; i++) {
hasilenkripsi += tabelEnc.getChar(resultmatrix[i]); }
}
public boolean check(String key, int len) { keytomatrix(key, len);
int d = determinant(keymatrix, len); int mod = 97;
while (d < 0) { d = d + 97; mod = mod + 97; }
d = d % 97;
if (d == 0) {//YH)&F(lZ;
System.out.println("Invalid key!!! Key is not invertible because determinant=0...");
return false; }
else {
return true; }
}
{
inv[i][j] = b[i][j] % 97; if (inv[i][j] < 0) inv[i][j] += 97; inv[i][j] *= mi; inv[i][j] %= 97; }
}
matrixtoinvkey(inv, r); }
public int mi(int d) {
int q, r1, r2, r, t1, t2, t; r1 = 97;
r2 = d; t1 = 0; t2 = 1;
while (r1 != 1 && r2 != 0) {
q = r1 / r2; r = r1 % r2; t = t1 - (t2 * q); r1 = r2;//"ay&k1F N r2 = r;
t1 = t2; t2 = t; }
return (t1 + t2); }
public void matrixtoinvkey(int inv[][], int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
invkey += (tabelEnc.getChar(inv[i][j])); }
} }}
7.
tabelEnc.java
/**
* Created by Fitri on 16/04/2016. */
public class tabelEnc { static char tabel[] =
{'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','0','1','2','3','4','5','6','7','8',' 9',' ','.',',','@','#','$','%','&','-','+','(',')','*','"','\'',':',';',
'!','?','_','/','~','|','^','=','{','}','\\','[',']','<','>','®','€','©'};
public static int getIndex(char x) { for (int i=0;i<97;i++) {
if (x == (tabel[i])){ return i;
} }
return -1; }
public static char getChar(int x) { return tabel[x];
8.
SimpanKunci.java
public class SimpanKunci {
private static String cipherkey="", Kkey = ""; public static void setCipherkey(String c){ cipherkey += c + " ";
}
public static String getCipherkey(){
return cipherkey; }
public static void setKkey(String c){
Kkey += c + " "; }
public static String getKkey(){
return Kkey; }
public static void Reset(){ cipherkey = "";
Kkey = ""; }
}
9.
Dialog.java
import android.app.AlertDialog; import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
public class Dialogs {
public static void showConfirmation(Context context, int message, OnClickListener onYes) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( context);
// set title
alertDialogBuilder.setTitle(R.string.confirmation);
// set dialog message alertDialogBuilder
.setMessage(message) .setCancelable(false)
.setPositiveButton("Ya", onYes) .setNegativeButton("Tidak",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel(); }
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show(); }
10.
bantuan.java
import android.app.Activity; import android.os.Bundle;
public class bantuan extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.bantuan); this.setTitle("Help");
} }
11.
tentang.java
import android.app.Activity; import android.os.Bundle;
public class tentang extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.tentang); this.setTitle("About");
D
AFTAR
R
IWAYAT
H
IDUP
C
URRICULUM
V
ITAE
I.
D
ATAP
RIBADI/
Personal Identification
Nama Lengkap
: Fitri Rahmadhani
Tempat/Tgl. Lahir : Medan / 28 Februari 1995
Jenis Kelamin
: Perempuan
Agama
: Islam
Kebangsaan
: Indonesia
Alamat
: Jalan AR Hakim Gg.Nangka No.42 A Medan Area,
Medan, Sumatera Utara, Indonesia 20216
Telepon
: +6285277328530
Moto Hidup
: Bermanfaat bagi Orang Lain
: [email protected]
II.
K
EMAMPUAN/ Capabilities
Bahasa
: Bahasa Indonesia, Bahasa Inggris
Bahasa Pemrograman
: C#, PHP,
Java for Mobile
Database
: MySQL
Lainnya
: HTML, CSS, Photoshop, Ms. Office, Adobe Flash
III.
P
ENDIDIKANF
ORMAL/ Formal Education
[ 2012
–
2016 ]
S1 Ilmu Komputer, Fakultas Ilmu Komputer dan Teknologi Informasi
Universitas Sumatera Utara
[ 2009
–
2012 ]
SMA Swasta Eria Medan
[ 2006
–
2009 ]
SMP Swasta Al Washliyah Medan
[ 2000
–
2006 ]
SD Swasta Nurhasanah Medan
IV.
P
ENDIDIKANN
ON-
FORMAL/ Informal Education
[ 2001
–
2006 ]
Ta’limul Qur’an Lil Aulad (TQA) Al
- Fauzi, Medan
[ 2011
–
2012 ]
Ganesha Operation, Medan.
V.
P
RESTASI/ Achievements
1)
Delegasi dari Indonesia di Young ICT Leaders Forum, Busan, Korea Selatan [2015]
2)
Pengajar Muda Gerakan USU Mengajar [2014]
3)
Finalis Desain ARTechno Universitas Sumatera Utara [2014]
4)
Juara 2 Desain Poster “
Islamic Booming
” Aladiyansyah Expo Universitas Sumatera Utara
[2014]
5)
Juara 2 Desain Poster “
Keep Health Tooth
” Mukernas FKG Nasional [2014]
6)
Juara 3 Fotografi “
Healhty Smile
” Mukernas FKG Nasional [2014]
7)
Honorable Participant Of SGC English Universitas Sumatera Utara [2014]
8)
Juara 3 Menulis Puisi untuk Ibu Universitas Sumatera Utara [2013]
VI.
P
ENGALAMANK
ERJA/ Working Experience
1)
Desainer Grafis di Mitra Jaya Solusindo, Medan [2016]
2)
Asisten Laboratorium di Ilmu Komputer
Laboratory Center (IKLC) Fasilkom-TI USU,
Medan [2013-2016]
3)
Volunteer Desain di WWF Indonesia [2016]
VII.
P
ENGALAMANB
ERBICARA/ Speaking Experience
1)
Pemateri Animasi di Al-Khuwarizmi Academy Al-Khuwarizmi USU, Universitas Sumatera
Utara [2015]
2)
Pemateri Animasi di IMILKOM Goes to School, Universitas Sumatera Utara [2015]
3)
Instruktur di Training Islam Ceria dan Kreatif (TRICK), UKMI Al-Khuwarizmi Fasilkom-TI
Universitas Sumatera Utara [2014]
VIII. P
ELATIHAN DANS
EMINAR/ Trainings & Workshop
1)
Peserta Pelatihan
“
Builiding Strong Indonesia Digitalpreneur with Distruptive Mindset
” by
Indigo in DiLo, Medan [2016]
2)
Peserta Seminar Bukalapak [2015]
3)
Peserta Pelatihan Design Top Coder Universitas Sumatera Utara [2015]
4)
Peserta Seminar dan
Workshop
Windows Phone Microsoft
Indonesia [2014]
5)
Peserta Seminar Nasional Literasi Informasi (SENARAI) Fasilkom-TI Universitas Sumatera
Utara [2014]
6)
Peserta Training Junior Multimedia dan Fundamental Graphical from KOMINFO [2014]
7)
Peserta Workshop Desain Grafis [2013]
8)
Peserta Seminar Kongres Nasional ILP2MI (Ikatan Lembaga Penalaran dan Penelitian
Mahasiswa Indonesia) Universitas Sumatera Utara [2013]
9)
Peserta Training Islam Ceria dan Kreatif, UKMI Al-Khuwarizmi, Medan [2013]
10)
Peserta Pelatihan Dasar Organisasi IMILKOM USU [2013]
11)
Peserta Pelatihan dan Kesekretariatan IMILKOM USU [2013]
12)
Peserta Seminar
Smartfren Library
“Kulik Lebih Jauh lagi Teknologi Rev B” Universitas
Sumatera Utara [2012]
13)
Peserta Seminar One Day Building Line Follower Robot Universitas Sumatera Utara [2012]
14)
Peserta Training Ramadhan UKMI AlKhuwarizmi Universitas Sumatera Utara [2012]
15)
Peserta Training dan Workshop Linux KSL (Kelompok Studi Linux) Universitas Sumatera
Utara [2012]
16)
Peserta Seminar
“Perempuan dan Ruang Publik” Universitas Sumatera Utara dan Universitas
Paramadina [2012]
17)
Peserta Pesantren Kilat Ramadhan, SMA Swasta Eria Medan [2010;2011]
XI.
P
ENGALAMANO
RGANISASI/ Organizational Experiences
1)
Sekretaris Relawan TIK (Indonesian ICT Volunteers) Komisariat USU [2013
–
Sekarang]
2)
Manager Digital Marketing Communication AIESEC [2015
–
2016]
3)
Sekretaris Jenderal Pemerintahan Mahasiswa (PEMA) Fasilkom-TI Universitas Sumatera
Utara [2015
–
2016]
4)
Bendahara Smart Generation Community (SGC) Universitas Sumatera Utara [2014
–
2015]
5)
Sekretaris Komisi Pemilihan Umum (KPU) Universitas Sumatera Utara [2014-2015]
6)
Sekretaris Bidang Syiar UKMI Al-Khuwarizmi Universitas Sumatera Utara [2014-2015]
7)
Divisi Blogger Sahabat Beasiswa Untuk Negeri [2013-2014]
8)
Bendahara Kelompok Studi Linux (KSL) Universitas Sumatera Utara [2012
–
2013]
X.
P
ENGALAMANK
EPANITIAAN/ Committee Experiences
1)
Anggota Publikasi dan Dokumentasi di Penyambutan Mahasiswa Baru Ilmu Komputer
Universitas Sumatera Utara [2014]
2)
Sekretaris di Science Competition se-Sumatera Utara [2014]
3)
Anggota Publikasi dan Dokumentasi Pekan Olahraga dan Seni (PORSENI) IMILKOM USU
[2014]
4)
Bendahara di Pesta Akbar Mentoring Universitas Sumatera Utara [2014]
5)
Wakil Sekretaris ARTechno Universitas Sumatera Utara [2014]
6)
Sekretaris Training Islam Ceria dan Kreatif (TRICK) IX UKMI Al Khuwarizmi Universitas
Sumatera Utara [2013]
7)
Tim Kreatif di Dakwah Expo 6 Universitas Sumatera Utara [2013]
8)
Panitia Pelaksana pada Pelatihan Sistem Informasi Geografis di S1 Ilmu Komputer USU
[2013]
9)
Anggota Acara di Kuliah Umum Indonesia-Jepang Universitas Sumatera Utara [2013]
10)
Tim Kreatif di Al Khuwarizmi Festival Universitas Sumatera Utara [2013]
11)
Anggota Konsumsi di Dies Natalis S1 Ilmu Komputer ke-11 Universitas Sumatera Utara
[2012]
XI.
P
ENGABDIAN/
Social Volunteer
1)
Pengabdian SLB Yayasan Pembinaan Anak Cacat (YPAC) Relawan TIK Sumatera Utara
[2016]
2)
Pengabdian Masyarakat SMATerpadu Al-Bukhari Muslim Medan [2016]
3)
Pengabdian Masyarakat SMP Negeri 1 Binjai Sumatera Utara [2016]
4)
Gerakan 1001 Al Quran UKMI Ad Dakwah Universitas Sumatera Utara [2015]
5)
Bakti Sosial Panti Asuhan Bani Adam UKMI Al Khuwarizmi Universitas Sumatera Utara
[2014]
6)
Pengabdian Masyarakat SMA Pakam dan Tanjung Morawa Sumatera Utara [2014]
7)
Bakti Sosial Gunung Sinabung Relawan TIK Sumut [2014]
8)
Pengabdian Masyarakat TK Uswatun Hasanah Medan Relawan TIK Sumatera Utara [2013]
XI.
P
ROJEK YANG TELAH DIKERJAKAN/ Portofolio Project
1)Website
“Sewa Kost”
Projek Pemrograman Internet
2)
IKLC Portal Projek Pemrograman Visual dengan C#
3)
Animasi Company Profile UKMI Al Khuwarizmi Projek Pengajaran Berbantuan Komputer
4)
Aplikasi
Chef’s
Key Projek Mobile Programming
5)
Website “Desa Jatikusuma Namorambe” Projek Sistem Manajemen Database Lanjutan
6)
Website KOM A Directory Projek Sistem Informasi
7)
Interface Design Game Faster Android Projek Kinyu Dev
8)
Interface Design Portal IKLC for Mobile Projek IKLC Dev
XIV. L
AINNYA/ Others
1)
Penerima Beasiswa Peningkatan Prestasi Akademik Fasilkom-TI USU [2013
–
2014]
2)