Saya mulai mempelajari bahasa pemrograman Java kira-kira tahun 1999 dan sampai sekarang tetap terus belajar. Bahasa pemrograman Java menurutku sederhana dan mudah dipelajari dibandingkan dengan bahasa program C++. Dalam blog ini aku ingin berbagi ilmu dengan pengunjung blog tentang apapun mengenai program Java semisal cryptography dan threading. Dan posting sekarang aku ingin menceritakan tentang pengalaman instalasi Bouncy Castle Provider yang tidak berjalan mulus. Untuk pengunjung yang belum tahu Bouncy Castle Provider itu apa? (makhluk apa itu ;-) Akan aku ceritakan sedikit tentang cryptography di bahasa program Java (diasumsikan pembaca lancar dan fasih program Java dan sedikit banyak tahu tentang cryptography). Cryptography (atau kalau boleh aku tulis kriptograpi dan untuk seterusnya) adalah seni dan ilmu tentang menjaga kerahasian pesan atau tulisan. Dalam Java fasilitas untuk kriptograpi disediakan oleh kelas-kelas API JCA/JCE (apa lagi itu? Aku tidak menjelaskan panjang lebar karena pengunjung bisa cari tahu di situs lain hehehe...). Nah untuk lebih memahami kriptograpi di Java akan saya buatkan program sederhana dengan nama  file TulisRahasia.java sebagai berikut :
import java.io.*;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import sun.misc.*;

public class TulisRahasia
{
                public static void main(String[] args) throws Exception
                {
                                byte[] kunciByte = new byte[] { 0x17, 0x02, 0x07,
                                                                                 0x23, 0x02, 0x09,
                                                                                 0x50, 0x31, 0x11,
                                                                                 0x01, 0x05, 0x13,
                                                                                 0x11, 0x03, 0x33,
                                                                                 0x25, 0x14, 0x18,
                                                                                 0x06, 0x12, 0x41,
                                                                                 0x01, 0x09, 0x22 };

                                BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
                                String pesan = null;
                                System.out.print("Pesan: ");
                                pesan = reader.readLine();

                                SecretKeySpec kunci = new SecretKeySpec(kunciByte, "AES");
                                Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
                                cipher.init(Cipher.ENCRYPT_MODE, kunci);
                                byte[] bytePesan = pesan.getBytes("UTF8");
                                byte[] outputCipherTeks = cipher.doFinal(bytePesan);
                                BASE64Encoder kode = new BASE64Encoder();
                                String base64OutputCipherTeks = kode.encode(outputCipherTeks);
                                System.out.println("Output cipherteks: " + base64OutputCipherTeks);
                }
}
      Apabila saudara ingin mencoba cara program ini bekerja, salin kode program diatas dan tempel (paste) ke program editor teks kesukaan anda. Penulis memakai program editor teks TextPad karena sederhana dan cepat. Coba kompilasi apa ada kesalahan dan perbaiki bila ada. Bila saat kompilasi muncul peringatan seperti dibawah ini :
C:\Bahasa\Java\Crypto\bab1\TulisRahasia.java:33: warning: sun.misc.BASE64Encoder is Sun proprietary API and may be removed in a future release
                                BASE64Encoder kode = new BASE64Encoder();
                                ^
C:\Bahasa\Java\Crypto\bab1\TulisRahasia.java:33: warning: sun.misc.BASE64Encoder is Sun proprietary API and may be removed in a future release
                                BASE64Encoder kode = new BASE64Encoder();
                                                         ^
2 warnings

Tool completed successfully
Abaikan peringatan tersebut dan kode program berhasil dikompilasi. Setelah berhasil dikompilasi sekarang saudara coba jalankan. Aku asumsikan bahwa saudara lancar pemrogaman bahasa Java dan untuk diketahui aku menggunakan Java Development Kit versi 6u23 pada saat penulisan blog ini. Tampilan program seperti dibawah ini :
C:\Bahasa\Java\Crypto\bab1>java TulisRahasia
Pesan: Aku suka kriptograpi Java!
Output cipherteks: pCkh78KlGZg39wLBjP60wUojvXb5aWVOncrZFwUg/l0=

C:\Bahasa\Java\Crypto\bab1>
Program mengkodekan pesan “Aku suka kriptographi Java!” menjadi cipherteks “pCkh78KlGZg39wLBjP60wUojvXb5aWVOncrZFwUg/l0=”. Tetapi apabila saudara melihat hal yang lain seperti ini :
C:\Bahasa\Java\Crypto\bab1>java TulisRahasia
Pesan: Aku suka kriptograpi Java!
Exception in thread "main" java.security.InvalidKeyException: Illegal key size or default parameters
        at javax.crypto.Cipher.a(DashoA13*..)
        at javax.crypto.Cipher.a(DashoA13*..)
        at javax.crypto.Cipher.a(DashoA13*..)
        at javax.crypto.Cipher.init(DashoA13*..)
        at javax.crypto.Cipher.init(DashoA13*..)
        at TulisRahasia.main(TulisRahasia.java:29)

C:\Bahasa\Java\Crypto\bab1>
berarti instalasi JDK saudara menggunakan Jurisdiction Policy Files default yang membatasi ukuran kunci hanya 128 bit (kecuali untuk cipher simetris Triple-DES) dan pembuatan kunci RSA sampai hanya 2048 bit. Untuk mengatasi hal tersebut saudara perlu mengunduh Jurisdiction Policy Files yang tanpa pembatasan dengan nama file jce-policy-6.zip yang bisa dicari pada halaman yang sama ketika saudara mengunduh JDK. Yang aku tahu adalah link dengan tulisan seperti “Unlimited Strength Jurisdiction Policy Files”. Setelah saudara peroleh file itu, unziplah (ada 4 file didalamnya, yang berguna cuma 2 file yang bertipe jar) kemudian salin file local_policy.jar dan US_export_policy.jar ke folder instalasi JDK saudara, biasanya adalah C:\Program Files\Java. Umumya ada dua folder didalam C:\Program Files\Java yang satu adalah JRE dan yang lainnya JDK. Yang pertama salin kedua file jar tadi ke C:\Program Files\Java\jdk1.6.0_xx\jre\lib\security. Apabila ada peringatan bahwa file sudah ada dengan nama sama, abaikan saja peringatan tersebut dan klik saja tombol copy and replace. Yang kedua salin kedua file jar tadi ke C:\Program Files\Java\jre6\lib\security. Apabila ada peringatan bahwa file sudah ada dengan nama sama, abaikan saja peringatan tersebut dan klik saja tombol copy and replace. Yang dimaksud jdk1.6.0_xx pada C:\Program Files\Java\jdk1.6.0_xx\jre\lib\security adalah xx merupakan nomer versi JDK, misal karena aku memakai JDK6u23 maka path tersebut adalah seperti ini C:\Program Files\Java\jdk1.6.0_23\jre\lib\security.  Nah apabila tugas diatas dikerjakan dengan sempurna maka cobalah jalankan kembali program TulisRahasia. Sekian dulu lain hari aku sambung mengenai penjelasan program dan instalasi provider BouncyCastle...
     


2 komentar to "Kriptograpi Java"

Posting Komentar

[ Form Komentar Klasik ]