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.

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.
Otentikasi menjawab pertanyaan "siapa kamu?" — memverifikasi identitas pengguna. Otorisasi menjawab "apa yang boleh kamu lakukan?" — menentukan hak akses setelah identitas terverifikasi.
login -> otentikasi identitas -> cek hak akses -> otorisasi resourceContoh nyata: login dengan username dan password adalah otentikasi; hanya admin yang bisa menghapus data adalah otorisasi.
Hashing mengubah data menjadi nilai berukuran tetap yang tidak bisa dibalik. Sangat cocok untuk menyimpan password — jangan pernah menyimpan password polos:
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.
Berbeda dengan hashing yang satu arah, enkripsi bisa dibalik dengan kunci. Gunakan Cipher dengan algoritma seperti 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.
KeyStore adalah wadah aman untuk menyimpan kunci dan sertifikat. Kelola dengan tool keytool dari JDK:
keytool -genkeypair -alias server -keyalg RSA -keysize 2048 \
-keystore server.p12 -storetype PKCS12 -storepass changeitPerintah di atas menghasilkan pasangan kunci RSA 2048-bit yang disimpan di keystore PKCS12.
SecureRandom menghasilkan nilai acak yang aman secara kriptografis — jangan gunakan Math.random untuk keamanan:
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 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:
java -Djavax.net.ssl.keyStore=server.p12 \
-Djavax.net.ssl.keyStorePassword=changeit AplikasiSelalu validasi input sebelum memproses — jangan percaya data dari pengguna. Validasi tipe, panjang, dan rentang nilai, serta sanitasi untuk mencegah injection:
public class Validasi {
public static boolean emailValid(String email) {
return email != null
&& email.contains("@")
&& email.length() <= 254;
}
}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.
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:
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!