0Pricing
Java Academy · Pelajaran

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 tampered

Menyimpan 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

  1. Hash Kriptografis dengan MessageDigest
  2. Enkripsi Simetris AES
  3. HMAC-SHA256 untuk Integritas Pesan
  4. JWT: Struktur, Pembuatan, dan Verifikasi
← Kembali ke Java Academy