Senin, 05 November 2012

Simple Temperature Conversion Apps for Android (Aplikasi Konversi Suhu Sederhana untuk Android)

Ok, in this post, I'll post a simple apps for conversion of temperature. This apps for only Android phone. And this is the capture of the application.
In this apps, I use spinner to add dropdown box like in a website. Ok, to make this app, so these are the codes you need to write.

First of all is main activity layout, I named it activity_conversion.xml. It's look like this:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="14dp"
        android:text="@string/hello_world"
        tools:context=".ConversionActivity" />

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="16dp" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/spinner1"
        android:layout_below="@+id/spinner1"
        android:layout_marginTop="20dp"
        android:text="@string/hello2" />

    <Spinner
        android:id="@+id/spinner2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView2"
        android:layout_below="@+id/textView2"
        android:layout_marginTop="22dp" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/spinner2"
        android:layout_below="@+id/spinner2"
        android:layout_marginTop="14dp"
        android:text="@string/insert_temp" />

    <EditText
        android:id="@+id/insert_editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView3"
        android:layout_below="@+id/textView3"
        android:layout_marginTop="20dp"
        android:ems="10" />

    <Button
        android:id="@+id/convert_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/insert_editText"
        android:layout_below="@+id/insert_editText"
        android:text="@string/convert_button" />

    <EditText
        android:id="@+id/result_editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/convert_button"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="20dp"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/result_editText"
        android:layout_alignLeft="@+id/result_editText"
        android:layout_marginBottom="22dp"
        android:text="@string/result" />

</RelativeLayout>

And for the second is strings.xml. Here it's the code for strings.xml:
<resources>

    <string name="app_name">TempConversion</string>
    <string name="hello_world">Choose your temperature from</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_conversion">ConversionActivity</string>
    <string name="hello2">Conversion to</string>
    <string name="insert_temp">Insert your temperature</string>
    <string name="result">The result is</string>
    <string name="convert_button">Convert</string>
    <string-array name="nama_suhu">
        <item>Celcius</item>
        <item>Fahrenheit</item>
        <item>Kelvin</item>
        <item>Reamur</item>
    </string-array>
    <string-array name="nama_suhu2">
        <item>Celcius</item>
        <item>Fahrenheit</item>
        <item>Kelvin</item>
        <item>Reamur</item>
    </string-array>

</resources>

Next is the main activity, I named it with ConversionActivity.java. And the codes are:
package org.tempconversion;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;

public class ConversionActivity extends Activity implements OnItemSelectedListener{

    //private String suhu1, suhu2;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_conversion);
       
        final Spinner pilTemp1 = (Spinner)findViewById(R.id.spinner1);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.nama_suhu, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        pilTemp1.setAdapter(adapter);
        final Spinner pilTemp2 = (Spinner)findViewById(R.id.spinner2);
        ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(this, R.array.nama_suhu2, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        pilTemp2.setAdapter(adapter2);
        final EditText inputTemp = (EditText)findViewById(R.id.insert_editText);
        final EditText resultTemp = (EditText)findViewById(R.id.result_editText);
        final Button convertButton = (Button)findViewById(R.id.convert_button);
       
        // event for button
        convertButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                String suhu1 = pilTemp1.getSelectedItem().toString();
                String suhu2 = pilTemp2.getSelectedItem().toString();
                String strSuhu = inputTemp.getText().toString();
                String strSuhuAkhir = "";
                double suhuAwal = Double.parseDouble(strSuhu);
                double suhuResult = 0;
                // selection for converting suhu
                // start with Celcius first
                if(suhu1.equals("Celcius")) {
                    if(suhu2.equals("Fahrenheit")) {
                        suhuResult = (suhuAwal * 9 / 5) + 32;
                    } else if(suhu2.equals("Kelvin")) {
                        suhuResult = suhuAwal + 273;
                    } else if(suhu2.equals("Reamur")) {
                        suhuResult = suhuAwal * 4 / 5;
                    } else {
                        suhuResult = suhuAwal;
                    }
                } else if(suhu1.equals("Fahrenheit")) {
                    if(suhu2.equals("Celcius")) {
                        suhuResult = (suhuAwal - 32) * 5 / 9;
                    } else if(suhu2.equals("Kelvin")) {
                        suhuResult = (suhuAwal - 459) * 5 / 9;
                    } else if(suhu2.equals("Reamur")) {
                        suhuResult = (suhuAwal - 32) * 4 / 9;
                    } else {
                        suhuResult = suhuAwal;
                    }
                } else if(suhu1.equals("Kelvin")) {
                    if(suhu2.equals("Celcius")) {
                        suhuResult = suhuAwal - 273;
                    } else if(suhu2.equals("Fahrenheit")) {
                        suhuResult = suhuAwal * 9 / 5 - 459;
                    } else if(suhu2.equals("Reamur")) {
                        suhuResult = (suhuAwal - 273) * 4 / 5;
                    } else {
                        suhuResult = suhuAwal;
                    }
                } else if(suhu1.equals("Reamur")) {
                    if(suhu2.equals("Celcius")) {
                        suhuResult = suhuAwal * 5 / 4;
                    } else if(suhu2.equals("Kelvin")) {
                        suhuResult = suhuAwal * 5 / 4 + 273;
                    } else if(suhu2.equals("Fahrenheit")) {
                        suhuResult = suhuAwal * 9 / 4 + 32;
                    } else {
                        suhuResult = suhuAwal;
                    }
                }
                strSuhuAkhir = Double.toString(suhuResult);
                resultTemp.setText(strSuhuAkhir);
            }
        });
    }

    public void onItemSelected(AdapterView<?> parent, View view,
            int pos, long id) {
        // An item was selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos)
    }
   
    public void onNothingSelected(AdapterView<?> parent) {
        // Another interface callback
    }
   
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_conversion, menu);
        return true;
    }
}


Ok, that's all for sharing today. Happy coding and go open source.

Rabu, 17 Oktober 2012

Simple Encryption Aplications Using AES and MD5 ( Aplikasi Enkripsi Sederhana Menggunakan AES dan MD5 )

Ok, this time I'll share about simple apps for encryption using AES and MD5. I try to combine AES with MD5. The string will be encrypted with AES first, and then the cipher text will be encrypted again with MD5. So, this is the capture of the applications.
The first field is for key encryption, and the second field is for the teks to be encrypted.
To create this app, I use 3 classes. The first class is an activity called AesMd5.java, GenerateAes.java, Md5Baru.java.
For the source code  to create this simple apps I'll show below.
The first is
AesMd5.java

package org.aesmd5;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.*;
import android.widget.Button;
import android.widget.EditText;

public class AesMd5 extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_aes_md5);
       
        final Button enkripButton = (Button)findViewById(R.id.enkrip_button);
        final EditText inputKunci = (EditText)findViewById(R.id.input_kunci);
        final EditText inputKata = (EditText)findViewById(R.id.input_kata);
        final EditText teksEnkrip = (EditText)findViewById(R.id.teks_enkrip);
        // handling for Encryption
        enkripButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                String ambilKunci = inputKunci.getText().toString();
                String ambilKata = inputKata.getText().toString();
                String enKata = "";
                try {
                    enKata = GenerateAES.encrypt(ambilKunci, ambilKata);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                //teksEnkrip.setText(enKata);
                teksEnkrip.setText(Md5Baru.MD5(enKata));
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_aes_md5, menu);
        return true;
    }
}


GenerateAes.java

package org.aesmd5;

import javax.crypto.*;
import javax.crypto.spec.*;
import java.security.SecureRandom;

public class GenerateAES {
    //private Cipher cipher;
    //private SecretKeySpec sKey;
    public GenerateAES() {
    }
   
    public static String encrypt(String seed, String cleartext) throws Exception {
        byte[] rawKey = getRawKey(seed.getBytes());
        byte[] result = encrypt(rawKey, cleartext.getBytes());
        return toHex(result);
}

public static String decrypt(String seed, String encrypted) throws Exception {
        byte[] rawKey = getRawKey(seed.getBytes());
        byte[] enc = toByte(encrypted);
        byte[] result = decrypt(rawKey, enc);
        return new String(result);
}

private static byte[] getRawKey(byte[] seed) throws Exception {
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
        sr.setSeed(seed);
    kgen.init(128, sr); // 192 and 256 bits may not be available
    SecretKey skey = kgen.generateKey();
    byte[] raw = skey.getEncoded();
    return raw;
}


private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
    byte[] encrypted = cipher.doFinal(clear);
        return encrypted;
}

private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, skeySpec);
    byte[] decrypted = cipher.doFinal(encrypted);
        return decrypted;
}

public static String toHex(String txt) {
        return toHex(txt.getBytes());
}

public static byte[] toByte(String hexString) {
        int len = hexString.length()/2;
        byte[] result = new byte[len];
        for (int i = 0; i < len; i++)
                result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue();
        return result;
}

public static String toHex(byte[] buf) {
        if (buf == null)
                return "";
        StringBuffer result = new StringBuffer(2*buf.length);
        for (int i = 0; i < buf.length; i++) {
                appendHex(result, buf[i]);
        }
        return result.toString();
}
private final static String HEX = "0123456789ABCDEF";
private static void appendHex(StringBuffer sb, byte b) {
        sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));
}
}


Md5Baru.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.aesmd5;
import java.security.*;
/**
 *
 * @author nang
 */
public class Md5Baru {

    public static String MD5(String text) {
        String md5 = "";
        byte test[] = text.getBytes();
        int panjang = 16;
        byte[] mesDig = new byte[panjang];
        try {
        MessageDigest mD = MessageDigest.getInstance("MD5");
        mD.reset();
        mD.update(text.getBytes(), 0, text.length());
        mD.digest(mesDig, 0, panjang);
        StringBuffer sB = new StringBuffer();
        for(int i=0; i<mesDig.length;i++) {
            //mesDig = mD.digest(test, 0, test.length);
            String hex = Integer.toHexString(0xFF & mesDig[i]);
            if(hex.length() == 1) {
                sB.append('0');
            }
            sB.append(hex);
        }
        md5 = sB.toString();
        } catch (Exception e){

        }
        return md5;
    }
}

And the last is activity_aes_md5.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView
        android:id="@+id/teks_kunci"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Masukkan kunci"
        />
    <EditText
        android:id="@+id/input_kunci"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
    <TextView
        android:id="@+id/teks_kata"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Masukkan kata"
        />
    <EditText
        android:id="@+id/input_kata"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
    <Button
        android:id="@+id/enkrip_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Enkrip"
        />
    <EditText
        android:id="@+id/teks_enkrip"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
</LinearLayout>

Ok, that's all for today, happy coding, and go Open Source.

Selasa, 02 Oktober 2012

Using pointer to initialize Array 2D ( Menggunakan Pointer untuk menginisialisasi Array 2D)

Ok, in this post, I would like to share about pointer in c. Even this pointer an old stuff, but, if you are interest in kernel and embedded system, it always use. Go to the topics, I'll share a little c code to initialize a 2D array with a pointer. The pointer will be a parameter in a function. This is the code:

#include <stdio.h>

void main(){
 int a[2][2];
 int b[2][2];
 int i,j;
 initArray(a,2,2);
 //display(a,2,2);
 //show(b,2,2);
 //show(a,2,2);
 for(i=0;i<2;i++) {
     for(j=0;j<2;j++) {
         printf("a[%d][%d]: %d ",i,j,a[i][j]);
     }
     printf("\n");
 }
}

void initArray(int *k, int r, int c) {
    int i,j,*z;
    for(i=0;i<r;i++) {
        z = k+i*r;
        for(j=0;j<c;j++) {
            printf("arr[%d][%d]: ",i,j);
            scanf("%d", &(*(z+j)));
        }
    }
}
display(int *k,int r,int c){
int i,j,*z;
printf("Display\n");
 for(i=0;i<r;i++){
   z=k+i*r;
   printf("%p \n",z);
      for(j=0;j<c;j++){
          printf("%d, %p\n",*(z+j), &(*(z+j)));
       }
  }
}

show(int *q,int ro,int co){
int i,j;
printf("Show");
   for(i=0;i<ro;i++){
     printf("\n");
     for(j=0;j<co;j++){
      printf("%d",*(q+i*co+j));
      }
   }
}

And this is the capture of the running program.






Go Open Source... and Happy Coding.

Minggu, 16 September 2012

Integrasi Modul Enkripsi Pada VoIP Client berbasis Mobile


Abdi Wahab1, Rizal Bahaweres2 dan Mudrik Alaydrus3


Abstract – The use of VoIP in Indonesia industries is still very low, it’s caused by security problem that haven’t guarenteed by VoIP provider. For this security problem, VoIP users can only access the VoIP client, but not for the VoIP server build by VoIP provider. So, to secure the communication, users can secure the communication data transmitted via VoIP network, with adding encryption module into VoIP client. The growing use of smartphone also effect the increase of mobile application development, one of them is mobile VoIP client apps. This research try to integrate encryption module in VoIP client application especially for Android smartphone. Research methodology for this research use prototyping method for developing VoIP client integrated with encryption module. From the prototyping model, the module will be tested by communicated with the module. The results from the testing with black box method, obtained that the integrated encryption modul can run well to encrypt communication data.
Key Words: VoIP, VoIP Client, Encryption

Selasa, 11 September 2012

Initialize Array From Procedure in C

Sometimes, a very complicated algorithm use a lot of matrix, and I sometimes find a process to initialize a matrix or array from a procedure or function. So, this is a little example how to initialize array from procedure.


#include <stdio.h>

int main() {
// declare array a
int a[5];
int masukan;
printf("Masukkan nilai: ");
scanf("%d",&masukan);
// initialize array with method
test(a, masukan);
int j;
for(j = 0; j < 5; j++) {
printf("a[%d]: %d \n",j,a[j]);
}
return 0;
}

void test(int *b, int c) {
int i;
for(i = 0; i < 5; i++) {
b[i] = c;
}
}

FYI, I build this code in linux, and compile it with gcc. Just a little share today, I hope it can usefull. happy coding, go Open Source.

Rabu, 05 September 2012

Aplikasi Pertama dengan Ktoon

Pernah dengar Ktoon. Yup, sebuah perangkat lunak yang digunakan untuk membuat sebuah animasi berbasis 2D. Mirip dengan Flash, akan tetapi ktoon adalah versi Open Sourcenya.

Memang sedikit sulit untuk membuat sebuah animasi sederhana. Berbeda sekali jika menggunakan Flash. But, that's way open source create this. We can develop it together until this software perfect.

This is my little project from ktoon tutorial.

Dan ini hasil dari project pertama saya di ktoon. Masih belum sempurna sih. But I'll make it complete.
Pertama.ktn.

Go Open Source...

Selasa, 04 September 2012

Aplikasi Enkripsi dan Dekripsi Menggunakan AES di Android

Kriptograpi pada salah satu buku dituliskan sebagai ilmu yang merahasiakan sebuah rahasia. Salah satu metode yang dapat digunakan untuk merahasiakan sebuah rahasia adalah enkripsi.
Untuk kali ini akan saya sharing sebuah aplikasi enkripsi dan dekripsi menggunakan Algoritma AES yang berjalan di Android. Untuk library yang saya gunakan pada aplikasi ini adalah JCE (Java Cryptography Extension). Tampilan dari aplikasi ini adalah sebagai berikut:

Untuk mulai membangun aplikasi ini, terlebih dahulu dibuat layout dari aplikasi. kode untuk menampilkan tampilan seperti di atas adalah sebagai berikut (ditulis di dalam main.xml yang berada di dalam direktory res/layout) :
 <?xml version="1.0" encoding="utf-8"?>  
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
   android:orientation="vertical"  
   android:layout_width="fill_parent"  
   android:layout_height="fill_parent"  
   >  
 <TextView  
      android:id="@+id/teks_kunci"  
      android:layout_width="wrap_content"  
      android:layout_height="wrap_content"  
      android:text="Masukkan kunci"   
      />  
 <EditText  
      android:id="@+id/input_kunci"  
      android:layout_width="fill_parent"  
      android:layout_height="wrap_content"   
      />  
 <TextView  
      android:id="@+id/teks_kata"  
      android:layout_width="wrap_content"  
      android:layout_height="wrap_content"  
      android:text="Masukkan kata"   
      />  
 <EditText  
      android:id="@+id/input_kata"  
      android:layout_width="fill_parent"  
      android:layout_height="wrap_content"   
      />  
 <Button   
      android:id="@+id/enkrip_button"  
      android:layout_width="wrap_content"  
      android:layout_height="wrap_content"  
      android:text="Enkrip"  
      />  
 <EditText  
      android:id="@+id/teks_enkrip"  
      android:layout_width="fill_parent"  
      android:layout_height="wrap_content"   
      />  
 <Button   
      android:id="@+id/dekrip_button"  
      android:layout_width="wrap_content"  
      android:layout_height="wrap_content"  
      android:text="Dekrip"  
      />  
 <EditText  
      android:id="@+id/teks_dekrip"  
      android:layout_width="fill_parent"  
      android:layout_height="wrap_content"   
      />  
 </LinearLayout>  




Selanjutnya adalah Activity utama dari aplikasi. Untuk aplikasi ini saya beri nama AESAndroidActivity dan kelas activitynya adalah AESAndroidActivity.java. Isi dari kelas AESAndroidActivity.java adalah sebagai berikut:


package org.aes;

import android.app.Activity;
import android.os.Bundle;
import android.widget.*;
import android.view.*;
import android.view.View.*;

public class AESAndroidActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // set Instance
        final Button enkripButton = (Button)findViewById(R.id.enkrip_button);
        final Button dekripButton = (Button)findViewById(R.id.dekrip_button);
        final EditText inputKunci = (EditText)findViewById(R.id.input_kunci);
        final EditText inputKata = (EditText)findViewById(R.id.input_kata);
        final EditText teksEnkrip = (EditText)findViewById(R.id.teks_enkrip);
        final EditText teksDekrip = (EditText)findViewById(R.id.teks_dekrip);
        // handling for enkripButton
        enkripButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
        String ambilKunci = inputKunci.getText().toString();
        String ambilKata = inputKata.getText().toString();
        String enKata = "";
        try {
        enKata = GenerateAES.encrypt(ambilKunci, ambilKata);
        } catch (Exception e) {}
        teksEnkrip.setText(enKata);
        }
        });
        // handling for dekripButton
        dekripButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
        String ambilKunci = inputKunci.getText().toString();
        String ambilKata = teksEnkrip.getText().toString();
        String deKata = "";
        if(!ambilKata.equals(null)) {
            try {
            deKata = GenerateAES.decrypt(ambilKunci, ambilKata);
            } catch(Exception e) {
           
            }
            teksDekrip.setText(deKata);
        }
        }
        });
    }
}



Sedangkan kelas untuk menghasilkan algoritma AES pada aplikasi ini saya beri nama GenerateAES.java. Isi dari GenerateAES.java adalah sebagai berikut:


package org.aes;

import javax.crypto.*;
import javax.crypto.spec.*;
import java.security.SecureRandom;

public class GenerateAES {
//private Cipher cipher;
//private SecretKeySpec sKey;
public GenerateAES() {
}

public static String encrypt(String seed, String cleartext) throws Exception {
        byte[] rawKey = getRawKey(seed.getBytes());
        byte[] result = encrypt(rawKey, cleartext.getBytes());
        return toHex(result);
}

public static String decrypt(String seed, String encrypted) throws Exception {
        byte[] rawKey = getRawKey(seed.getBytes());
        byte[] enc = toByte(encrypted);
        byte[] result = decrypt(rawKey, enc);
        return new String(result);
}

private static byte[] getRawKey(byte[] seed) throws Exception {
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
        sr.setSeed(seed);
    kgen.init(128, sr); // 192 and 256 bits may not be available
    SecretKey skey = kgen.generateKey();
    byte[] raw = skey.getEncoded();
    return raw;
}


private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
    byte[] encrypted = cipher.doFinal(clear);
        return encrypted;
}

private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, skeySpec);
    byte[] decrypted = cipher.doFinal(encrypted);
        return decrypted;
}

public static String toHex(String txt) {
        return toHex(txt.getBytes());
}

public static byte[] toByte(String hexString) {
        int len = hexString.length()/2;
        byte[] result = new byte[len];
        for (int i = 0; i < len; i++)
                result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue();
        return result;
}

public static String toHex(byte[] buf) {
        if (buf == null)
                return "";
        StringBuffer result = new StringBuffer(2*buf.length);
        for (int i = 0; i < buf.length; i++) {
                appendHex(result, buf[i]);
        }
        return result.toString();
}
private final static String HEX = "0123456789ABCDEF";
private static void appendHex(StringBuffer sb, byte b) {
        sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));
}
}



Jika sudah jadi semua, tahap selanjutnya adalah melakukan kompilasi dan menjalankan aplikasi.
Happy coding. Salam open source.

Kamis, 16 Agustus 2012

Sharing Internet di Virtual Box menggunakan Firestarter

Ada masalah ketika saya menggunakan virtual box untuk menjalankan guest OS. Guest OS saya (Mikocok) tidak bisa sharing internet ketika saya terkoneksi dengan modem melalui interface ppp0, sedangkan untuk bridging dengan interface wlan0, koneksi dapat dilakukan. Padahal saya sudah setting di NAT agar dapat koneksi internet dengan interface ppp0. Mungkin ada sedikit konfigurasi yang bermasalah.
Untuk itu saya coba cara lain. Ada satu interface bawaan dari virtual box, yaitu vboxnet0, dengan interface ini, saya bisa terhubung. Diuji dengan ping pun sudah berhasil. IP yang dihasilkan di host adalah 192.168.56.1, kemudian yang di guest adalah 192.168.56.101.
Analisa saya, jika kedua alamat ini bisa berkomunikasi, maka alamat yang di host bisa saya jadikan gateway untuk melakukan koneksi ke internet. Saya sebelumnya pernah melakukan hal ini pada wireless untuk hp android saya di sini. Untuk itu saya akan menggunakan tool yang sama, yaitu firestarter untuk melakukan hal ini.
Untuk tahap pertama adalah merubah settingan pada firestarter. dari File > Preferences > FIrewall > Network Settings, rubah settingan Internet connected network device menjadi Dialup device (ppp0) dan Local networked connected device menjadi Unknown device (vboxnet0). Seperti gambar di bawah ini.

Pastikan matikan terlebih dahulu firestarter sebelum melakukan perubahan, baru kemudian di start kembali.
Selanjutnya adalah merubah settingan network connection pada guest. Guest saya menggunakan win xp, dan saya hanya perlu untuk menambahkan default gateway ke IP dari host, yaitu 192.168.56.1. Gambar di bawah ini menampilkan hasil konfigurasinya.
Kemudian saya perlu menambahkan DNS dari operator di mana saya terhubung menggunakan dial-ip modem. Kebetulan saya menggunakan flexi mobile broadband (lumayan lah, buat koneksi yang unlimited tanpa quota, hanya modem saya saja yg blm support evdo masih cdma 1x) dengan dns-nya adalah sebagai berikut.
Hasil dari konfigurasi tadi jika dilihat dari cmd guest dan melakukan ping ke google.co.id hasilnya dapat dilihat pada gambar di bawah ini.
Terlihat guest os sudah terhubung dengan internet. 
Cukup mudah juga kan menghubungkan dengan internet ke guest OS. Selamat mencoba. Oiya, saya menggunakan host Ubuntu 10.04. Terus knapa saya sharing ini, karena terkadang masih banyak teman-teman saya yang minta bantuan saya untuk mengerjakan "research"-nya menggunakan mikocok. So, apa boleh buat. Terkadang klo hidup terlalu idealis susah juga nyari "sesuap nasi" ^_^. But I love open source more than ....
Go Open Source.

Selasa, 07 Agustus 2012

My Mini Lab

Yup, this is one of my dream, having a lab, especially ICT lab. And this lab will produce researches, products, and also recommendations for ICT world.
So, I start to make my mini lab in my room, just consist of a notebook, a usb modem, an all-in-one printer, and a tv tunner ( for watching football match ^_^ ). Alhamdulillah, from this mini lab, I've developed a lot of products. In a short time period, I hope I can launch some of my products.
So this is my capture of my mini lab.
  And I hope this lab can grow and expand. Amin ya Rab...

Rabu, 18 Juli 2012

Implementasi dan Analisis Kualitas Layanan VoIP Pada Jaringan Ad hoc Peer-to-Peer


Tri Angga Bagus Susanto1Abdusy Syarif2, Abdi Wahab3
ABSTRAKS
Teknologi VoIP (Voice over Internet Protocol) adalah sebuah teknologi komunikasi data yang sangat memungkinkan percakapan suara dengan memanfaatkan media jaringan komputer atau jaringan paket Internet Protocol (IP). Pada umumnya, implementasi VoIP menggunakan jaringan Local Area Network (LAN) atau Wireless Local Area Network (WLAN) atau juga Intranet / Internet. Singkatnya, dibutuhkan sebuah infrastruktur untuk dapat mengimplementasikan VoIP. Namun pada penelitian ini akan digunakan jaringan ad hoc peer-to-peer dan akan dilakukan pengukuran serta analisis terhadap kualitas layanan VoIP. Jaringan Ad hoc peer-to-peer adalah sebuah metode yang memungkinkan bagi perangkat keras nirkabel untuk berkomunikasi secara langsung dengan yang lainnya tanpa ketersediaan infrastruktur jaringan. Dalam skenario pengujian digunakan beberapa perangkat keras (seperti laptop, komputer dan telepon seluler), sistem operasi (Windows, Linux Ubuntu, dan Android) dan perangkat lunak softphone yang berbeda (seperti 3Cxphone, Ekiga, Qutecom, Sjphone, X-lite). Dari hasil penelitian dapat dilihat bahwa teknologi VoIP dapat diimplementasikan walaupun tanpa dukungan infrastruktur, yaitu dengan memanfaatkan jaringan Ad Hoc peer-to-peer. Dari hasil pengukuran dan analisa beberapa parameter yang diamati, didapatkan hasil untuk rata-rata delay adalah sebesar 20,54 millidetik, dan throughput sebesar 0,081 Mega Byte/detik, sedangkan banyaknya paket per-detik adalah 94,3842 paket.
Kata Kunci: voip, ad hoc, peer-to-peer

Selasa, 12 Juni 2012

ANALISIS KINERJA VOIP CLIENT SIPDROID DENGAN MODUL ENKRIPSI TERINTEGRASI

Abdi Wahab1, Rizal Bahaweres2, Mudrik Alaydrus3 

Abstrak --
Jumlah pengguna VoIP di Indonesia masih kecil sekali, walaupun cost yang ditawarkan oleh VoIP lebih kecil dibandingkan dengan menggunakan telepon berpulsa. Salah satu alasannya adalah keamanan yang diberikan oleh penyedia layanan VoIP yang masih kurang. Pengguna VoIP belum mendapat layanan keamanan yang dapat menjamin keamanan komunikasi. Penelitian ini mencoba untuk mengamankan komunikasi antara pengguna VoIP dengan menggunakan modul enkripsi yang diintegrasikan dengan VoIP client Sipdroid yang berjalan di smartphone Android. Hal ini dimungkinkan oleh pengguna VoIP karena hanya VoIP client yang dapat diakses oleh pengguna VoIP. Hasil yang diperoleh setelah dilakukan integrasi dengan modul enkripsi menggunakan tiga buah skema enkripsi yaitu AES, DES, dan RC4, Sipdroid mampu menahan serangan pasif dari penyadapan informasi ( eavesdropping ) selama terjadi komunikasi. Dan hasil dari pengukuran QoS terdapat peningkatan delay sebesar 0.01 ms dan tidak terjadi perubahan yang signifikan terhadap througput dan packet loss, untuk throughput yang dihasilkan berkisar di 78 kbps, dan untuk packet loss rata-rata adalah 0.8 %. Akan tetapi terdapat noise yang mengikuti komunikasi pada Sipdroid yang terintegrasi dengan modul enkripsi akibat skew gelombang dari penambahan waktu proses ketika enkripsi. Kata Kunci: VoIP, VoIP client, Enkripsi

Insya'Allah paper ini akan dipresentasikan di SNATI 2012 pada tanggal 15-16 Juni 2012.

Sabtu, 21 April 2012

Sharing Internet dari Modem ke Wireless Router Menggunakan Firestarter di Ubuntu 10.04

Saya akan coba sharing untuk sharing internet dari modem ke wireless router. Hal ini saya lakukan untuk mengkoneksikan hp android saya ke internet menggunakan wireless router dengan merek TP-LINK TL-WR740N. Sumber internet dari modem cdma saya, kebetulan saya menggunakan flexinet, walaupun lelet tapi lumayan untuk buka-buka email aja. Selanjutnya untuk sharing internetnya adalah sebagai berikut: - Jalankan firestarter, jika belum diinstall lakukan dulu dengan perintah: $ sudo apt-get install firestarter - Setelah dijalankan, masuk ke dalam pengaturan, di setting, dan konfigurasi pada Internet Connected Network Device Detect device(s) arahkan ke -> Dialup Device (ppp0) Local network connected device Detect device(s) arahkan ke -> Wireless Device (wlan0) Dan "Enable Internet connection sharing" di cek list. Berikut tampilan dari settingannya.
- Start firestarter dengan mengklik tombol start - Koneksikan PC/laptop dengan Wireless router dari network manager. - Masuk ke dalam settingan dari wireless router, dan konfigurasi menjadi seperti berikut: Default Gateway -> Arahkan ip dari Wireless device (wlan0) yang ada di PC/laptop. Sebagai contoh alamat di wlan0 pc saya adalah 192.168.1.103 Dan untuk Primary DNS dan Secondary DNS diisi dari DNS dari hasil Dial up modem. Tampilan dari konfigurasi saya adalah sebagai berikut:
- Selanjutnya koneksikan modem dengan menggunakan wvdial. Lihat perubahan di firestarter untuk aktifitas yang terjadi. - Koneksikan hp Android dan coba untuk browsing. Selamat Mencoba.

Selasa, 10 April 2012

Find your Lecture Competency in Google Scholar

Finally, I can post something to my blog again. It's a long time I didn't post something in my blog, because I've benn busy with my research. My research that brings me to a master degree, thanks God. In my research I got a lot of experience and also a lot of knowledge, especially for making a report of research. And I've seen a lot of style from my lecturer adviser. Every person have a good and a bod, so there are no body perfect. But, when you want to make a research, I suggest you choose an adviser lecturer that have a good competency in his research object. That can help you to discuss the problem in your research. So, to find your lecturer competency, you can find in google scholar. Just, type your lecturer name on search column, all of the research that your lecturer have done will appear in it. You can see your lecturer competence from his research. And what about if your lecturer hasn't appear in google scholar?? What have he done for the time he become a lecturer?? May be he prefer take a project than a research ^_^.