Suatu kali pernah saya mengalami kesulitan ketika ingin menggunakan library Bouncy Castle untuk membuat aplikasi sekuriti (secure xxx, secure qqq, secure zzz, dst). Library Bouncy Castle ini dirilis oleh Legionare of Bouncy Castle yang menyediakan library untuk lingkungan pemrograman java, baik itu J2SE maupun J2ME. Mungkin pembaca yang lain juga pernah merasakan kesulitan yang sama. Buat yang belum punya bisa dunlod free dengan lisensi GPL disini.

Aplikasi yang saya buat menggunakan bahasa java pada lingkungan J2ME. Ceritanya aplikasi tersebut akan diimplementasikan pada ponsel yang sudah mendukung Java MIDP dan CLDC.

MIDP tuh apa ya?

Mungkin ada temen-temen pembaca yang belum tau. Kalo mau tahu jawabannya, coba deh tanya aja sama mbah Google. :-D Dengan senang hati mbah Google akan kasih jawabannya, bahkan dapet tambahan bonus jawaban tentang CLDC.

Jadi buat aplikasi apa?

Oh iya, aplikasinya sih bebas… bisa SMS, Email, MMS, Chat, Blutooth application, atau apa saja tergantung kebutuhan dan kemampuan. Cuma intinya adalah bagaimana data yang di transmisi terlindung alias ngak kebaca sama orang lain yang ngak berhak.

Apa pentingnya sih ngacak-ngacak data kaya gitu?

Kalo ditanya begitu ya… jawabnya simple aja sih. Apa pentingnya sih yang kita kirimin? Kalo temen-temen pembaca merasa cuma orang biasa aja, mungkin emang ngak penting-penting amat. Tapi kalo temen-temen pembaca ada yang berprofesi sebagai koruptor, playboy, gembong narkoba, mucikari, gigolo atau produser film porno, kayanya itu bisa jadi penting deh. (mohon mangap kalo yang dicontohkan koq profesi ancur..piss).

Kali ini saya coba gunakan algoritma enkripsi IDEA, kenapa? Biar mudah aja, karena memang saya sudah implementasi algoritma tersebut dan tidak ada kendala. Algoritma lain bisa saja dan pakenya pun sama mudahnya dengan IDEA.

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

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import org.bouncycastle.crypto.BufferedBlockCipher;
import org.bouncycastle.crypto.DataLengthException;
import org.bouncycastle.crypto.InvalidCipherTextException;
import org.bouncycastle.crypto.engines.IDEAEngine;
import org.bouncycastle.crypto.modes.CBCBlockCipher;
import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher;
import org.bouncycastle.crypto.params.KeyParameter;

/**
* @author Lenovo
*/
public class IDEAMidlet extends MIDlet {
public void startApp() {
byte[] plainbyte = “nilai plain”.getBytes();
byte[] realKey = “nilai key”.getBytes();

try {
// Enkripsi
BufferedBlockCipher cipherEngine = new PaddedBufferedBlockCipher(new CBCBlockCipher(new IDEAEngine()));
cipherEngine.init(true, new KeyParameter(realKey));
byte[] cipherbyte = new byte[cipherEngine.getOutputSize(plainbyte.length)];
int cipherteksLength = cipherEngine.processBytes(plainbyte, 0, plainbyte.length, cipherbyte, 0);
cipherEngine.doFinal(cipherbyte, cipherteksLength);
System.out.println(“Ciphernya: ” + new String(cipherbyte));

// Dekripsi
cipherEngine.init(false, new KeyParameter(realKey));
byte[] recovery = new byte[cipherEngine.getOutputSize(cipherbyte.length)];
int plainteksLength = cipherEngine.processBytes(cipherbyte, 0, cipherbyte.length, recovery, 0);
cipherEngine.doFinal(recovery, plainteksLength);
System.out.println(“Recoverynya: ” + new String(recovery).trim());

} catch (DataLengthException ex) {
ex.printStackTrace();
} catch (IllegalStateException ex) {
ex.printStackTrace();
} catch (InvalidCipherTextException ex) {
ex.printStackTrace();
}
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}
}

Kalo tidak ada error dan kawan-kawannya, maka output yang dihasilkan akan seperti berikut:

Ciphernya: œY:(ÑðøÙ?¨Ë}ÐÒ?£
Recoverynya: nilai plain

Mudah khan, penasaran mau coba algoritma yang lain..? Silahkan, selamat belajar.