Kriptografi dengan JAVA
Posted: januari 09 2016 Java CryptographyTags: AES java, bouncy castle, java crypto
Telah
kita ketahui bahwa kriptografi banyak diimplementasikan pada kehidupan
sehari – hari terutama pada era sekarang ini yang sudah serba digital.
Banyak aplikasi – aplikasi yang sudah terintegrasi fitur kriptografi
seperti pada aplikasi Skype, Thunderbird, Pidgin dll. Pada tulisan kali
ini saya mengajak anda sekalian bagaimana mudahnya mengimplementasikan
kriptografi untuk membuat aplikasi dengan menggunakan bahasa pemrograman
Java. Java menyediakan framework JCE dan JCA yang terdiri dari kelas –
kelas dan interface untuk membuat aplikasi kriptografi seperti enkripsi,
dekripsi, key generation, message diggest, pembuatan sertifikat digital
dll. Kelas – kelas dan interface API ini dapat dilihat pada package java.security dan javax.crypto (klik documentation untuk lebih lengkap). Supaya lebih paham, langsung saja saya berikan contoh impelementasi algoritma AES 256 bit dengan menggunakan JCE dan JCA :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
| /** * * @author agha */ import sun.misc.*; import javax.crypto.*; import java.security.SecureRandom; import javax.crypto.spec.SecretKeySpec; public class AlgoritmaAES { static byte[] ciphertext, plaintext, ivBytes; public static String encrypt(SecretKeySpec key, String plaintext) throws Exception { byte[] pesan = plaintext.getBytes(); Cipher cipher = Cipher.getInstance( "AES" ); cipher.init(Cipher.ENCRYPT_MODE, key); ciphertext = cipher.doFinal(pesan); String sandi = new BASE 64 Encoder().encode(cipher text); return sandi; } public static String decrypt(SecretKeySpec key, String ciphertext) throws Exception { byte[] sandi = ciphertext.getBytes(); Cipher cipher = Cipher.getInstance( "AES" ); byte[] decodeCipher = new BASE 64 Decoder().decodeBuffer(cipher text); cipher.init(Cipher.DECRYPT_MODE, key); plaintext = cipher.doFinal(decodeCipher); String pesan = new String(plaintext); return pesan; } public static SecretKeySpec genKey(String key) throws Exception { byte[] input = key.getBytes(); SecureRandom secureRandom = SecureRandom.getInstance( "SHA1PRNG" ); KeyGenerator kgen = KeyGenerator.getInstance( "AES" ); byte[] byteseed = new byte[ 256 ]; secureRandom.setSeed(input); kgen.init( 256 , secureRandom); SecretKey kunci = kgen.generateKey(); byte[] bytes = kunci.getEncoded(); SecretKeySpec spec = new SecretKeySpec(bytes, "AES" ); return spec; } public static void main(String[] args) throws Exception { String pesan = "Serang kandang ayam jam 5 subuh" ; String kunci = "Indonesia" ; SecretKeySpec key = genKey(kunci); System.out.println( "Kunci :" +kunci); //Enkripsi Pesan System.out.println( "Plaintext :" +pesan); String cipher = encrypt(key,pesan); System.out.println( "\nEncryption:" +cipher); //Dekripsi Pesan String plain = decrypt(key,cipher); System.out.println( "\nDecryption :" +plain); } } |
Kelas diatas menggunakan 3 method yaitu encrypt, decrypt dan genKey. Pada method genKey saya menggunakan kelas SecureRandom untuk menggenerate random seed
dengan input kunci dari user. Selanjutnya random seed tersebut menjadi
parameter input untuk menggenerate kunci AES dengan panjang 256 bit
seperti terlihat pada listing code dibawah ini.
1
2
3
| ... kgen.init( 256 , secureRandom); ... |
Selain JCE dan JCA, ada juga library bouncy castle
yang disediakan untuk mendukung cryptography pada java. Tidak seperti
JCE dan JCA yang sudah tersedia pada JDK, untuk menggunakan bouncy
castle, kita harus install library secara manual ke JDK atau secara
otomatis dengan menambahkan depedence melalui maven repository. Berikut
ini langkah langkah instalasi Bouncy Castle secara manual.
- Download terlebih dahulu library bouncy castle di http://www.bouncycastle.org/latest_releases.html, lulu esktrak file yang telah di download
- Copy file bcprov-jdk16-14.jar (missal menggunakan jdk 1.6) ke directory jre/lib/ext.Jika menggunakan windows, make file harus dicopy untuk JDK dan JRE pada directory yang sama.
- Edit file java.security yang terdapat pada directory jre/lib/security dan tambahkan provider BC pada list provider seperti contoh dibawah ini.
12345678
#
# List of providers and their preference orders (see
above
):
#
security.provider.
1
=sun.security.provider.Sun
security.provider.
2
=com.sun.net.ssl.internal.ssl.Provider
security.provider.
3
=com.sun.rsajca.Provider
security.provider.
4
=com.sun.crypto.provider.SunJCE
security.provider.
5
=org.bouncycastle.jce.provider.BouncyCastleProvider
- Test apakah Bouncy Castle telah terinstall di JDK dengan listing
code dibawah ini. Jika telah terinstall, maka outputnya adalah BC is
Installed ”
12345678910111213141516171819202122
import java.security.Security;
/**
* Basic class to confirm the Bouncy Castle provider is
* installed.
*/
public class SimpleProviderTest
{
public
static
void main(String[] args)
{
String providerName =
"BC"
;
if (Security.getProvider(providerName) == null)
{
System.out.println(providerName +
" provider not installed"
);
}
else
{
System.out.println(providerName +
" is installed."
);
}
}
}
1
2
3
| ... Cipher cipher = Cipher.getInstance( "AES" , "BC" ); ... |
Tidak ada komentar:
Posting Komentar