Ok, in this post I'll show my project with my friend, Hendri, for building a car rental
application with sms gateway integrated. In this application, user can reserve a car via sms, but the user must be registered first at office.
This is the screen shoot of application.
That's the first screen of application. I'll complete it later. If you interest with this app, don't hesitate to contact me.
Tampilkan postingan dengan label Open Source. Tampilkan semua postingan
Tampilkan postingan dengan label Open Source. Tampilkan semua postingan
Minggu, 14 April 2013
Car Rental Application with SMS Gateway
Label:
Car Rental,
Java,
Open Source,
Research,
SMS Gateway
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.
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.
Label:
Android,
Java,
Mobile Application,
Open Source,
Security
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...
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) :
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.
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.
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.
Label:
Free,
Networking,
Open Source,
Sharing Internet,
Tutorial
Jumat, 26 Agustus 2011
Restore Glassfish Server 3 in Netbeans 6.9.1 on Ubuntu 10.04
When I made a web application with Netbeans yesterday, I've got a little problem when start the server. For the information, I use Netbeans 6.9.1, and Glassfish server 3 bundled with it. The problem I faced that the port 8080 was already use by other program, so I must change the port to start the server. I follow the instruction from this,but the server was gone. And the project had a warning of resolve server problem.
From my analisys, I must add a new server to Netbeans, especially for Glassfish server. When I add the Glassfish Server 3, and search for the installation path directory, there was a warning "glassfish does not have a usable default domain". But I checked in the directory, there was a domain. In my opinion, may be the permission problem. So, I add the permission to the glassfish installation directory where located in /usr/local/glassfish-3.0.1 with command
$ sudo chmod -R 777 /usr/local/glassfish-3.0.1/
And I add server again, the problem was solved.
From my analisys, I must add a new server to Netbeans, especially for Glassfish server. When I add the Glassfish Server 3, and search for the installation path directory, there was a warning "glassfish does not have a usable default domain". But I checked in the directory, there was a domain. In my opinion, may be the permission problem. So, I add the permission to the glassfish installation directory where located in /usr/local/glassfish-3.0.1 with command
$ sudo chmod -R 777 /usr/local/glassfish-3.0.1/
And I add server again, the problem was solved.
Label:
Edu,
Glassfish,
Java,
Netbeans,
Open Source,
Web Application
Senin, 14 Maret 2011
Creating Tone With Java
Actually this is my little research to make a simple multimedia apps. I start to make an application that make a tone based on the frequency and the duration. A lot of thanks for Princeton to provide this class StdAudio.java. It's very usefull to make this application work well.
This a method for create the tone.
After make that method, we just call the variable that using the tone method, and play it with play method in StdAudio class. The example for implementation is below:
The capture of application

For more source you can download here ( Sorry for using this link, because there is no tools for uploading a file in my blog ). I use netbeans for develop it.
This a method for create the tone.
private double[] tone(double hz, double duration) {
int N = (int) (StdAudio.SAMPLE_RATE * duration);
double[] a = new double[N+1];
for (int i = 0; i <= N; i++) { a[i] = Math.sin(2 * Math.PI * i * hz / StdAudio.SAMPLE_RATE); } return a; }
After make that method, we just call the variable that using the tone method, and play it with play method in StdAudio class. The example for implementation is below:
double[] a = tone(frek, dur);
StdAudio.play(a);
The capture of application

For more source you can download here ( Sorry for using this link, because there is no tools for uploading a file in my blog ). I use netbeans for develop it.
Minggu, 06 Februari 2011
Venus VT-80n di Ubuntu 9.10
Sudah 2 minggu ini saya coba mengkoneksikan USB Medom CDMA ( fix wireless ) Venus VT-80n ke Ubuntu 9.10 di netbook-ku. Sebagai informasi, Venus VT80n ini menggunakan chipset Qualcomm, dan memiliki dua buah mode, yaitu mode storage dan mode modem. Ketika pertama kali modem dihubungkan dengan PC/notebook, dia terdeteksi sebagai storage, dengan bantuan dari driver bawaan dari modem, modem berubah sebagai mode modem. Hal ini terjadi jika kita menggunakan sistem operasi Winbloosss....
Hal ini lah yang menyebabkan saya kesulitan untuk mengkoneksikan modem tersebut di Ubuntu. Ketika saya mengkoneksikan modem tersebut di Ubuntu saya, maka modem tersebut terdeteksi sebagai modem. dengan Id 05c6:1000.
Saya sudah mencoba menggunakan usb_modeswitch untuk merubah mode storage ke mode modem. Tapi usb_modeswitch selalu gagal untuk merubah mode-nya. Lalu saya menggunakan ndsiwrapper untuk menginstall driver bawaan dari winblos, yang terjadi adalah driver untuk merubah ke mode modem dianggap driver yang salah. Atau ketika dijalankan command "ndiswrapper -l" muncul tulisan "invalidd driver!".
Satu-satunya cara untuk menggunakan modem ini di Ubuntu adalah dengan cara merubah modem ke mode modem di winbloss, kemudian restart winbloss tanpa harus mencabut modem, setelah itu masuk ke Ubuntu. Hal ini hanya bisa dilakukan jika PC/notebook kita memiliki dual boot. Tapi jika hanya satu OS, yaitu linux aja, maka akan susah sekali untuk menggunakan modem Venus VT80n. Mungkin bisa juga untuk menginstall winbloss menggunakan Virtual box untuk merubah modem menjadi mode modem. Tapi merepotkan saja.
Lanjut lagi, setelah restart tanpa mencabut modem dari winbloss, tinggal mendaftarkan alamat baru dari modem ke module usb_serial. Untuk alamat baru dari modem akan menjadi 05c6:6500.
Untuk mendaftarkan alamat baru dari modem adalah sebagai berikut:
1. remove terlebih dahulu module usbserial
$ sudo rmmod usbserial
2. daftar ulang module usbserial dengan meng-attach id dari modem yang baru.
$ sudo modprobe usbserial vendor=0x05c6 product=0x6500
3. untuk mengecek apakah registrasi module berhasil coba jalankan perintah
$ dmesg | tail
jika terdapat tulisan seperti ttyUSB0, ttyUSB1, dan ttyUSB3, maka telah behasil
Setelah itu konfigurasi wvdial.conf untuk melakukan dial-up.
Saya masih belum dapat menemukan cara yang lebih mudah untuk mengkoneksikan modem tersebut. Masih terus mencari dan mencari. Rencananya, saya mo buat driver dari modem tersebut di Linux :D. Tapi itu baru sekedar impian. Masih di dalam pikiran aja. Semoga aja bisa terwujud, nanti klo dah bisa saya share lagi caranya. Go Open SOurce.
Hal ini lah yang menyebabkan saya kesulitan untuk mengkoneksikan modem tersebut di Ubuntu. Ketika saya mengkoneksikan modem tersebut di Ubuntu saya, maka modem tersebut terdeteksi sebagai modem. dengan Id 05c6:1000.
Saya sudah mencoba menggunakan usb_modeswitch untuk merubah mode storage ke mode modem. Tapi usb_modeswitch selalu gagal untuk merubah mode-nya. Lalu saya menggunakan ndsiwrapper untuk menginstall driver bawaan dari winblos, yang terjadi adalah driver untuk merubah ke mode modem dianggap driver yang salah. Atau ketika dijalankan command "ndiswrapper -l" muncul tulisan "invalidd driver!".
Satu-satunya cara untuk menggunakan modem ini di Ubuntu adalah dengan cara merubah modem ke mode modem di winbloss, kemudian restart winbloss tanpa harus mencabut modem, setelah itu masuk ke Ubuntu. Hal ini hanya bisa dilakukan jika PC/notebook kita memiliki dual boot. Tapi jika hanya satu OS, yaitu linux aja, maka akan susah sekali untuk menggunakan modem Venus VT80n. Mungkin bisa juga untuk menginstall winbloss menggunakan Virtual box untuk merubah modem menjadi mode modem. Tapi merepotkan saja.
Lanjut lagi, setelah restart tanpa mencabut modem dari winbloss, tinggal mendaftarkan alamat baru dari modem ke module usb_serial. Untuk alamat baru dari modem akan menjadi 05c6:6500.
Untuk mendaftarkan alamat baru dari modem adalah sebagai berikut:
1. remove terlebih dahulu module usbserial
$ sudo rmmod usbserial
2. daftar ulang module usbserial dengan meng-attach id dari modem yang baru.
$ sudo modprobe usbserial vendor=0x05c6 product=0x6500
3. untuk mengecek apakah registrasi module berhasil coba jalankan perintah
$ dmesg | tail
jika terdapat tulisan seperti ttyUSB0, ttyUSB1, dan ttyUSB3, maka telah behasil
Setelah itu konfigurasi wvdial.conf untuk melakukan dial-up.
Saya masih belum dapat menemukan cara yang lebih mudah untuk mengkoneksikan modem tersebut. Masih terus mencari dan mencari. Rencananya, saya mo buat driver dari modem tersebut di Linux :D. Tapi itu baru sekedar impian. Masih di dalam pikiran aja. Semoga aja bisa terwujud, nanti klo dah bisa saya share lagi caranya. Go Open SOurce.
Senin, 30 November 2009
Komponen Java Tidak Muncul di Window Ubuntu
Kemarin saya dapat masalah sedikit tentang menjalankan aplikasi java saya di Ubuntu. Ini terjadi beberapa minggu yang lalu, padahal sebelumnya tidak apa-apa, saya dapat dengan baik menjalankan aplikasi java.
Permasalahannya adalah saya tidak dapat melihat komponen java swing yang saya buat. Yang tampil hanya ada window saja, Komponen-komponen yang ada tidak terlihat seperti gambar berikut:
Tampilan Tanpa Komponen
Setelah saya browsing-browsing, akhirnya ketemu juga masalahnya. Ternyata java gui bentrok dengan compiz. Compiz itu salah satu desktop animasi, fungsinya hanya untuk memperindah tampilan desktop saja. Saya baru sadar, beberapa minggu yang lalu saya baru saja mengaktifkan compiz saya, memang cukup mengasyikkan melihat tmpilan desktop dengan segala animasinya. Tapi ternyata aplikasi java yang saya buat tidak dapat berjalan dengan baik.
Untuk memperbaikinya, maka compiz harus dinon-aktifkan. Cara untuk menon-aktifkan compiz adalah dari System > Preferences > Appearence. Setelah itu muncul window baru, kemudian pilih tab 'Visual Effects', lalu pilih "None : Provides ...". Lalu tekan close. Tampilan nya seperti gambar dibawah ini:
Appearence Preferences
Nah setelah di rubah, saya coba untuk menjalankan aplikasi java saya akhirnya berjalan dengan mulus sebagai mana biasa. He..he..he..Tampilannya jadi seperti ini deh:
Permasalahannya adalah saya tidak dapat melihat komponen java swing yang saya buat. Yang tampil hanya ada window saja, Komponen-komponen yang ada tidak terlihat seperti gambar berikut:

Setelah saya browsing-browsing, akhirnya ketemu juga masalahnya. Ternyata java gui bentrok dengan compiz. Compiz itu salah satu desktop animasi, fungsinya hanya untuk memperindah tampilan desktop saja. Saya baru sadar, beberapa minggu yang lalu saya baru saja mengaktifkan compiz saya, memang cukup mengasyikkan melihat tmpilan desktop dengan segala animasinya. Tapi ternyata aplikasi java yang saya buat tidak dapat berjalan dengan baik.
Untuk memperbaikinya, maka compiz harus dinon-aktifkan. Cara untuk menon-aktifkan compiz adalah dari System > Preferences > Appearence. Setelah itu muncul window baru, kemudian pilih tab 'Visual Effects', lalu pilih "None : Provides ...". Lalu tekan close. Tampilan nya seperti gambar dibawah ini:

Nah setelah di rubah, saya coba untuk menjalankan aplikasi java saya akhirnya berjalan dengan mulus sebagai mana biasa. He..he..he..Tampilannya jadi seperti ini deh:

Langganan:
Postingan (Atom)