Enkripsi Simetris AES
Enkripsi dan dekripsi data sensitif dengan AES/CBC/PKCS5Padding menggunakan API javax.crypto milik Java.
Enkripsi Simetris AES adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Enkripsi Simetris vs Asimetris
Enkripsi simetris menggunakan kunci yang sama untuk mengenkripsi dan mendekripsi (cepat, sesuai untuk data dalam jumlah besar). Enkripsi asimetris menggunakan pasangan kunci publik/pribadi (lebih lambat, digunakan untuk pertukaran kunci dan tanda tangan). AES adalah cipher simetris standar.
Mode AES: CBC vs GCM
AES memiliki beberapa mode. AES/CBC/PKCS5Padding umum digunakan, tetapi tidak menyediakan autentikasi. AES/GCM/NoPadding menyediakan enkripsi sekaligus autentikasi (AEAD) — sangat direkomendasikan untuk kode baru.
Membuat Kunci AES
Gunakan KeyGenerator untuk membuat kunci AES 256-bit secara aman.
KeyGenerator kg = KeyGenerator.getInstance("AES");
kg.init(256); // 256-bit key
SecretKey key = kg.generateKey();
// Persist the key:
String b64Key = Base64.getEncoder().encodeToString(key.getEncoded());
// Restore the key:
byte[] decoded = Base64.getDecoder().decode(b64Key);
SecretKey restored = new SecretKeySpec(decoded, "AES");Enkripsi AES/GCM
Mode GCM memerlukan Vektor Inisialisasi (IV) 12 byte yang unik untuk setiap enkripsi. Buat IV acak baru untuk setiap operasi enkripsi — jangan pernah menggunakan kembali IV dengan kunci yang sama.
byte[] iv = new byte[12]; // 96-bit IV for GCM
new SecureRandom().nextBytes(iv);
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
GCMParameterSpec spec = new GCMParameterSpec(128, iv); // 128-bit auth tag
cipher.init(Cipher.ENCRYPT_MODE, key, spec);
byte[] ciphertext = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
// Transmit/store: IV + ciphertext (IV is not secret)Dekripsi AES/GCM
Ambil IV dari data yang disimpan, buat ulang spesifikasinya, lalu lakukan dekripsi. GCM secara otomatis memverifikasi keaslian — data yang dimanipulasi akan memunculkan AEADBadTagException.
// Assume stored = iv + ciphertext:
byte[] iv = Arrays.copyOfRange(stored, 0, 12);
byte[] ciphertext = Arrays.copyOfRange(stored, 12, stored.length);
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, key, new GCMParameterSpec(128, iv));
byte[] plaintext = cipher.doFinal(ciphertext); // throws if tamperedMenyimpan IV Bersama Teks Sandi
IV bukan rahasia — simpan IV di awal atau bersama teks sandi. Penerima memerlukan IV untuk melakukan dekripsi. Kunci harus dirahasiakan.
byte[] encryptedData = new byte[iv.length + ciphertext.length];
System.arraycopy(iv, 0, encryptedData, 0, iv.length);
System.arraycopy(ciphertext, 0, encryptedData, iv.length, ciphertext.length);
String b64 = Base64.getEncoder().encodeToString(encryptedData);Derivasi Kunci dari Kata Sandi (PBKDF2)
Jangan pernah menggunakan kata sandi secara langsung sebagai kunci AES — entropinya terlalu rendah. Turunkan kunci dengan PBKDF2 menggunakan salt acak dan jumlah iterasi yang tinggi.
PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 310_000, 256);
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
byte[] keyBytes = skf.generateSecret(spec).getEncoded();
SecretKey key = new SecretKeySpec(keyBytes, "AES");Menggunakan Penyedia Keamanan Java
Penyedia bawaan JDK menangani AES. Untuk algoritme tambahan atau kepatuhan FIPS, gunakan penyedia BouncyCastleProvider.
// With Bouncy Castle:
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "BC");Pola Enkripsi Amplop
Enkripsi data dengan Kunci Enkripsi Data (DEK) yang dibuat secara acak. Enkripsi DEK dengan Kunci Enkripsi Kunci (KEK) yang disimpan dalam KMS (AWS KMS, HashiCorp Vault). Cara ini membatasi paparan kunci.
AES dalam Aplikasi Spring
TextEncryptor milik Spring Security atau modul Spring Security Crypto menyediakan enkripsi AES tingkat tinggi tanpa harus mengelola Cipher/IV secara manual.
TextEncryptor encryptor = Encryptors.text(password, salt);
String encrypted = encryptor.encrypt("sensitive data");
String decrypted = encryptor.decrypt(encrypted);Kesalahan Umum
Jangan pernah: menggunakan kembali IV dengan kunci yang sama, menggunakan mode ECB (pola tetap terlihat), menggunakan kata sandi secara langsung sebagai kunci, atau mengabaikan tag autentikasi. Selalu gunakan GCM untuk kode baru.
Pemeriksaan Cepat
Apa yang disediakan AES/GCM tetapi tidak disediakan AES/CBC?
Ringkasan
Gunakan AES/GCM/NoPadding untuk enkripsi terautentikasi. Buat IV acak baru berukuran 12 byte untuk setiap enkripsi. Tambahkan IV di awal teks sandi. Turunkan kunci dari kata sandi dengan PBKDF2. Jangan pernah menggunakan kembali IV dengan kunci yang sama.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Enkripsi Simetris AES” gratis?
Ya — teks lengkap “Enkripsi Simetris AES” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Enkripsi Simetris AES”?
Enkripsi dan dekripsi data sensitif dengan AES/CBC/PKCS5Padding menggunakan API javax.crypto milik Java. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Enkripsi Simetris AES” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Hash Kriptografis dengan MessageDigest
- Enkripsi Simetris AES
- HMAC-SHA256 untuk Integritas Pesan
- JWT: Struktur, Pembuatan, dan Verifikasi