1. Pilih dua buah bilangan prima sembarang, p dan q.
2. Hitung n = p q (sebaiknya p q, sebab jika p = q maka n =
p2 sehingga p dapat diperoleh dengan menarik akar pangkat dua dari n).
Listing program kelas Achat:
private OnItemClickListener friendClickListener = new
OnItemClickListener() {
public void onItemClick(AdapterView<?> av, View v, int
arg2, long arg3) {
setContentView(R.layout.enkrip1);
btnSend = (Button)
findViewById(R.id.send_button);
//buat mengirim kunci secara otomatis ke server
RSAA bb = new RSAA(256); BigInteger eee = bb.getE(); String ekey = eee.toString();
System.out.println("ekey nya :" + ekey); BigInteger ddd = bb.getD();
d_key = ddd.toString();
BigInteger Nn = bb.getN();
n_key = Nn.toString();
BigInteger p = bb.getPPPP();
System.out.println("ppppppp :" + p); BigInteger q = bb.getQQQQ();
System.out.println("qqqqqqqq :" + q);
sendMsg = ekey.replace(' ', '~');
sendMsg2 = n_key.replace(' ', '~');
friend = ((TextView) v).getText().toString();
chatService.sendMessage2(sendMsg, sendMsg2,
friend, user, "");
....
Gambar 4.11 Source Code Kelas Achat
Listing program kelas RSA
public RSAA(int bits) {
Random r = new Random();
p = BigInteger.probablePrime(bitlength, r); q = BigInteger.probablePrime(bitlength, r); n = p.multiply(q);
.... }
3. Hitung (n) = (p – 1)(q – 1).
4. Pilih kunci publik, e, yang relatif prima terhadap (n). 5. Bangkitkan kunci privat dengan menggunakan persamaan
Listing program kelas RSA
...
phi =
p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE)); e = BigInteger.probablePrime(bitlength/2, r);
while (phi.gcd(e).compareTo(BigInteger.ONE) > 0 &&
e.compareTo(phi) < 0 ) {
e.add(BigInteger.ONE); }
d = e.modInverse(phi); }
Gambar 4.13 Source Code Kelas RSA
2. Algoritma Enkripsi/Dekripsi
1. Enkripsi
1. Ambil kunci publik penerima pesan, e, dan modulus n. 2. Nyatakan plainteks m menjadi blok-blok m1, m2, …,
dalam selang
3. Setiap blok mi dienkripsi menjadi blok cidengan rumus
ci= miemod n
- Listing program kelas Achat untuk enkrip message
case R.id.send_button:
String msgIn = msgOut.getText().toString();
if(msgIn.length()<10){
System.out.println("message yg tertangkap di setup:::"+msgIn);
}else{
String simpan=msgIn.substring(0,9);
msgOut.setText("");
msgOut.setText(simpan);
System.out.println("message yg tertangkap di setup setelah d
potong:::"+msgOut.getText().toString()); }
msgIn = msgOut.getText().toString();
sendMsg = msgIn.replace(' ', '~');
chatService.sendMessage(sendMsg,
friend, user, "");
ChatArrayAdapter.add("Me : " + msgIn);
sendMsg = "";
msgOut.setText("");
break;
- Listing program kelas AchatService
....
private class sendMsg extends Thread {
private String msg, msg2;
private String to;
private String from;
private String r, k, typ;
public sendMsg(String m, String t, String n, String r) { msg = m; to = t; from = n; this.r = r; }
public void run() {
try {
char[] tanda = null;
char[] msg2 = null;
System.out.println("message yang masuk :: " + msg);
if (!kunci_ee.equals("")) {
BigInteger e_key = new
BigInteger(kunci_ee);
BigInteger n_key = new
BigInteger tes2 = new
BigInteger(msg.getBytes());
String tes22 = tes2.toString(); System.out.println("plainteks yang telah d rubah menjadi byte :: " + tes22);
RSAA bb = new RSAA(256); String sandii = "";
System.out.println("nilai e: "
+e_key);
System.out.println("nilai n: "
+n_key);
BigInteger halaa = bb.encrypt(tes2, e_key, n_key);
System.out.println("hasil enkripsi :: " + halaa);
String sandi = halaa.toString();
sendMessagePHP(sandi, to, from, r); System.out.println("message enkrip: " + sandi+"" +to+ " " + from);
} else {
System.out.println("DI ACHATSERVICE: " + to + " " + from);
} catch (Exception err) { }
}
}
- Listing program RSA untuk enkrip data
...
public synchronized BigInteger encrypt(BigInteger message , BigInteger E , BigInteger N ) {
System.out.println("masuk ke dalam method enkrip rsa ");
return message.modPow(E, N); }
....
Gambar 4.16 Source Code Kelas RSA
2. Dekripsi
1. Setiap blok cipherteks cididekripsi kembali menjadi blok mi
dengan rumus
mi= cidmod n
Listing program Achat
private OnItemClickListener friendClickListener = new
OnItemClickListener() {
public void onItemClick(AdapterView<?> av, View v, int
arg2, long arg3) {
setContentView(R.layout.enkrip1);
btnSend = (Button)
findViewById(R.id.send_button);
RSAA bb = new RSAA(256); BigInteger eee = bb.getE(); String ekey = eee.toString();
System.out.println("ekey nya :" + ekey); BigInteger ddd = bb.getD();
d_key = ddd.toString();
System.out.println("dkey nya :" + d_key); BigInteger Nn = bb.getN();
n_key = Nn.toString();
BigInteger p = bb.getPPPP();
System.out.println("ppppppp :" + p); BigInteger q = bb.getQQQQ();
System.out.println("qqqqqqqq :" + q);
sendMsg = ekey.replace(' ', '~');
sendMsg2 = n_key.replace(' ', '~');
friend = ((TextView) v).getText().toString();
chatService.sendMessage2(sendMsg, sendMsg2,
friend, user, "");
friend = ((TextView)
v).getText().toString();
setupChat();
//untuk mengambil data dari user message
chatService.getMsg2(friend, user,
"person", "run"); } };
Listing program Achat service
private class getMsg2 extends Thread {
private String to;
private String from;
private int running = 0;
private String msge = "";
private String type;
public getMsg2(String a, String n, String r) {
to = n;
from = a;
type = r; }
void setRunning(int b) {
this.running = b; }
public void run() { String rs = "";
String rsmessage = "";
EditText pho_no, isi_pesan, kunci_pub1, kunci_n, kunci_e;
EditText pesan_terjemah;
while (running != 0) {//3
try {//4
// Panggil method
rs = getMessagePHP2(from, to, type); String[] kunci = rs.split(","); System.out.println("isi rs: " + rs);
if (!rs.equals("")) {//5
//System.out.println("masuk getMessagePHP2");
//rsmessage = getMessagePHP2(from, to, type);//6
// rsmessage.getBytes(); // msg = rs.toCharArray(); String[] temp1 = rs.split(","); // // isi_pesan = // // (EditText)findViewById(R.id.editText_sendmsg); kunci_ee = temp1[0]; kunci_nn = temp1[1];
System.out.println("E::::::::::::::::::" + kunci_ee); System.out.println("N::::::::::::::::::" + kunci_nn);
//
//Toast.makeText(getApplicationContext(), "Berhasil", Toast.LENGTH_LONG).show();
} else {//7
System.out.println("masuk getMessagePHP");
rsmessage = getMessagePHP(from, to, type);
msg = rsmessage.toCharArray(); Achat.setMe(rsmessage);
System.out.println("get dkehynhya::::::::::::::::::" + Achat.getdkey()); //if (!Achat.getdkey().equals("")) { // System.out //
.println("sudah masuk ifffff::::::::::::::::::" // + rsmessage); if (msg.length > 0) {//8 for (int i = 0; i < msg.length; i++) {//9 // seperate
msg from server based on its
// order
if (msg[i] == '_') {//10
System.out.println("msge:::::cetak men::::: "+ msge);
int
temp = msge.indexOf(":");//11
String fromWHO = msge.substring(0,(temp + 2));
msge =
msge.substring((temp + 2),msge.length());
Achat.setMe(msge);
rsmessage = Achat.hasil();
rsmessage = rsmessage.concat("_"); rsmessage = fromWHO.concat(rsmessage);
msg = rsmessage.toCharArray();
System.out.println("rsmessage:::::cetak men:::::"+ rsmessage);
msge =
"";
} else {//12
System.out.println("msge:::::"+msge);
msge += msg[i]; }//13 }//for }//if 14 }//if 15 //}//16 // share msg to UI if (msg.length > 0) {//17 keluar dari if for (int i = 0; i < msg.length; i++) {//18 // seperate msg from server based on its order
System.out.println("msge:::::cetak men:::::"
+
msge);//20
mhandler.obtainMessage(Achat.MESSAGE_READ, msge)
.sendToTarget();
msge = ""; } else {//21
System.out.println("msge:::::" + msge);
msge += msg[i]; } }//22 } // sleep time sleep(250);//23
} catch (Exception err) { }
} }
}
Listing program RSA
public synchronized BigInteger decrypt(BigInteger message , BigInteger D , BigInteger N) {
System.out.println("masuk ke dalam method dekrip rsa ");
return message.modPow(D, N); }
86