Belajar Java - Keamanan Aplikasi & Cryptography Dasar
Series/Belajar Java/Episode 13
Episode 13 of 24

Belajar Java - Keamanan Aplikasi & Cryptography Dasar

Episode ini membahas keamanan aplikasi Java: konsep otentikasi dan otorisasi, Java Cryptography Architecture untuk hashing dan enkripsi, manajemen key-store, secure random, dan TLS sederhana, serta best practice input validation dan handling sensitive data.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Keamanan bukan fitur tambahan — ia fondasi dari setiap aplikasi yang melayani pengguna nyata. Episode 13 membahas keamanan aplikasi dan cryptography dasar di Java: konsep otentikasi dan otorisasi, hashing, enkripsi, key-store, secure random, dan TLS.

Java menyediakan Java Cryptography Architecture (JCA) yang lengkap tanpa library eksternal. Setelah episode ini, kalian akan memahami cara melindungi data sensitif dan menerapkan praktik keamanan yang benar di aplikasi Java.

Dasar Otentikasi dan Otorisasi

Dua Konsep yang Sering Tertukar

Otentikasi menjawab pertanyaan "siapa kamu?" — memverifikasi identitas pengguna. Otorisasi menjawab "apa yang boleh kamu lakukan?" — menentukan hak akses setelah identitas terverifikasi.

Otentikasi lalu otorisasi
login -> otentikasi identitas -> cek hak akses -> otorisasi resource

Contoh nyata: login dengan username dan password adalah otentikasi; hanya admin yang bisa menghapus data adalah otorisasi.

Java Cryptography Architecture untuk Hashing dan Enkripsi

Hashing dengan MessageDigest

Hashing mengubah data menjadi nilai berukuran tetap yang tidak bisa dibalik. Sangat cocok untuk menyimpan password — jangan pernah menyimpan password polos:

Hashing SHA-256
import java.security.*;
import java.util.HexFormat;
 
public class Hashing {
    public static void main(String[] args) throws Exception {
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        byte[] hash = digest.digest("password".getBytes());
        System.out.println(HexFormat.of().formatHex(hash));
    }
}

MessageDigest.getInstance("SHA-256") membuat digest, lalu digest() menghitung hash dari input.

Enkripsi dengan Cipher

Berbeda dengan hashing yang satu arah, enkripsi bisa dibalik dengan kunci. Gunakan Cipher dengan algoritma seperti AES:

Enkripsi dan dekripsi AES
import javax.crypto.*;
import javax.crypto.spec.*;
import java.security.*;
 
public class Enkripsi {
    public static void main(String[] args) throws Exception {
        KeyGenerator keyGen = KeyGenerator.getInstance("AES");
        SecretKey kunci = keyGen.generateKey();
 
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, kunci);
        byte[] terenkripsi = cipher.doFinal("Data rahasia".getBytes());
 
        cipher.init(Cipher.DECRYPT_MODE, kunci);
        byte[] asli = cipher.doFinal(terenkripsi);
        System.out.println(new String(asli));
    }
}

cipher.init(Cipher.ENCRYPT_MODE, kunci) menyiapkan mode enkripsi, dan doFinal memproses data.

Manajemen Key-Store, Secure Random, dan TLS

KeyStore untuk Menyimpan Kunci

KeyStore adalah wadah aman untuk menyimpan kunci dan sertifikat. Kelola dengan tool keytool dari JDK:

Membuat keystore dengan keytool
keytool -genkeypair -alias server -keyalg RSA -keysize 2048 \
  -keystore server.p12 -storetype PKCS12 -storepass changeit

Perintah di atas menghasilkan pasangan kunci RSA 2048-bit yang disimpan di keystore PKCS12.

SecureRandom untuk Nilai Acak Aman

SecureRandom menghasilkan nilai acak yang aman secara kriptografis — jangan gunakan Math.random untuk keamanan:

Membangkitkan secure random
import java.security.SecureRandom;
 
public class AcakAman {
    public static void main(String[] args) {
        SecureRandom random = new SecureRandom();
        byte[] token = new byte[32];
        random.nextBytes(token);
        System.out.println("Token dibangkitkan");
    }
}

random.nextBytes(token) mengisi array byte dengan nilai acak kriptografis — cocok untuk token, salt, dan nonce.

TLS Sederhana

TLS mengenkripsi komunikasi jaringan. JVM memiliki truststore bawaan untuk sertifikat CA publik, sehingga HTTPS bekerja tanpa konfigurasi. Untuk keperluan khusus, keystore bisa diarahkan melalui system properties:

Mengarahkan keystore untuk TLS
java -Djavax.net.ssl.keyStore=server.p12 \
     -Djavax.net.ssl.keyStorePassword=changeit Aplikasi

Best Practice Keamanan

Input Validation dan Sanitasi

Selalu validasi input sebelum memproses — jangan percaya data dari pengguna. Validasi tipe, panjang, dan rentang nilai, serta sanitasi untuk mencegah injection:

Validasi input sederhana
public class Validasi {
    public static boolean emailValid(String email) {
        return email != null
                && email.contains("@")
                && email.length() <= 254;
    }
}

Handling Sensitive Data

Praktik penting untuk data sensitif: jangan pernah mencatat password atau token ke log, enkripsi data saat transit dan saat istirahat, gunakan hashing untuk password, dan rotasi kunci secara berkala.

Warning

Jangan pernah mengimplementasikan algoritma kriptografi sendiri. Selalu gunakan API teruji seperti JCA dengan algoritma standar (AES, SHA-256) dan key size yang direkomendasikan.

Penutup

Episode 13 mengajarkan keamanan aplikasi: konsep otentikasi dan otorisasi, JCA untuk hashing dengan MessageDigest dan enkripsi dengan Cipher, manajemen key-store dengan keytool, SecureRandom untuk nilai acak aman, TLS, serta best practice validasi input dan perlindungan data sensitif.

Inti yang harus dibawa pulang:

  • Otentikasi memverifikasi identitas; otorisasi mengatur hak akses.
  • Jangan pernah menyimpan password polos — gunakan hashing.
  • Enkripsi AES dengan Cipher bisa dibalik dengan kunci; hashing tidak.
  • KeyStore menyimpan kunci; dikelola dengan keytool.
  • Gunakan SecureRandom, bukan Math.random, untuk keamanan.
  • Validasi input dan lindungi data sensitif di setiap lapisan.

Di episode 14 selanjutnya kita akan membahas modern security patterns dan access control — pengantar OAuth 2.0 dan OpenID Connect di ekosistem Java, integrasi dengan Spring Security atau Jakarta Security, secure headers, CORS, CSRF, mitigasi serangan umum, serta pengelolaan credential dan secret di produksi. Saatnya menerapkan keamanan enterprise!

Belajar Java - Keamanan Aplikasi & Cryptography Dasar | Belajar Java