Skip to content

Alat Enkripsi AES — GCM, CBC & CTR

Enkripsi AES online gratis — AES-128/192/256, GCM/CBC/CTR, frasa sandi (PBKDF2) atau kunci mentah. Berjalan 100% di browser Anda; tidak ada yang diunggah.

Tanpa Pelacakan Berjalan di Browser Gratis
Semuanya berjalan di browser Anda — kunci dan data Anda tidak pernah meninggalkan halaman ini.
Direkomendasikan
Ukuran kunci
Jenis kunci
Opsi lanjutan
Ciphertext
Butuh halaman khusus dekripsi?
Ditinjau untuk akurasi kriptografi terhadap FIPS 197, NIST SP 800-38D, OWASP, dan spesifikasi W3C Web Crypto — Tim Keamanan Go Tools · Jul 16, 2026

Apa Itu Enkripsi AES?

AES (Advanced Encryption Standard) adalah cipher blok simetris yang distandardisasi oleh NIST dalam FIPS 197 pada tahun 2001, berdasarkan desain Rijndael oleh Joan Daemen dan Vincent Rijmen. AES mengenkripsi data dalam blok tetap 128-bit menggunakan kunci 128, 192, atau 256-bit, dan kunci yang sama dipakai untuk mengenkripsi maupun mendekripsi. Ini adalah tulang punggung kriptografi modern, melindungi segala hal mulai dari trafik HTTPS hingga enkripsi disk.

Cipher blok mentah hanya mengacak satu blok 16-byte, sehingga AES selalu dijalankan di dalam sebuah mode operasi yang merangkai blok-blok bersama. Alat ini menawarkan tiga mode, semuanya disediakan secara native oleh Web Crypto API milik browser: GCM, CBC, dan CTR. GCM (Galois/Counter Mode, NIST SP 800-38D) adalah default yang direkomendasikan karena bersifat terautentikasi — GCM menghasilkan tag autentikasi 128-bit di samping ciphertext, sehingga perubahan apa pun terdeteksi saat Anda mendekripsi. CBC dan CTR hanya menyediakan kerahasiaan; dengan sendirinya keduanya tidak bisa memberi tahu Anda apakah ciphertext telah diubah, itulah sebabnya TLS 1.3 (RFC 8446) menghapus semua cipher suite CBC demi mode terautentikasi seperti GCM.

Anda akan melihat tidak ada mode ECB di sini, dan itu disengaja. ECB mengenkripsi setiap blok plaintext yang identik menjadi blok ciphertext yang identik, sehingga struktur berskala besar bocor begitu saja — gambar 'ECB penguin' yang terkenal masih terlihat jelas sebagai pinguin setelah dienkripsi. Web Crypto API dengan sengaja tidak mengimplementasikan ECB karena alasan yang persis sama (API ini hanya mengimplementasikan AES-CBC, AES-CTR, dan AES-GCM), dan begitu pula kami. Jika Anda perlu berinteroperasi dengan sistem lama yang memakai ECB, anggap itu sebagai alasan untuk memigrasikannya, bukan untuk mereproduksi kelemahannya.

Karena kebanyakan orang mengetik frasa sandi alih-alih kunci acak 32-byte, alat ini menurunkan kunci AES dari frasa sandi Anda dengan PBKDF2-HMAC-SHA256 pada 600.000 iterasi dan salt acak 16-byte, sesuai panduan OWASP Password Storage saat ini (dan NIST SP 800-132, yang mensyaratkan salt minimal 128 bit). Itu membuat brute-force terhadap frasa sandi yang lemah menjadi lambat, tetapi ini bukan sihir: ini adalah alat untuk mempelajari mode, men-debug ciphertext, dan data pribadi sekali pakai — bukan untuk melindungi rahasia produksi, yang seharusnya berada di sistem manajemen kunci khusus. Untuk frasa sandi yang kuat, hasilkan satu dengan generator kata sandi acak kami; untuk kunci acak sungguhan, gunakan generator kunci rahasia.

// AES-256-GCM with a passphrase (PBKDF2-HMAC-SHA256, 600,000 iterations).
// Identical code runs in the browser and in Node.js 20+ via Web Crypto.
async function aesGcmEncrypt(plaintext, passphrase) {
  const enc = new TextEncoder();
  const salt = crypto.getRandomValues(new Uint8Array(16));
  const iv = crypto.getRandomValues(new Uint8Array(12));
  const baseKey = await crypto.subtle.importKey(
    'raw', enc.encode(passphrase), 'PBKDF2', false, ['deriveKey']);
  const key = await crypto.subtle.deriveKey(
    { name: 'PBKDF2', salt, iterations: 600000, hash: 'SHA-256' },
    baseKey, { name: 'AES-GCM', length: 256 }, false, ['encrypt']);
  const ct = new Uint8Array(await crypto.subtle.encrypt(
    { name: 'AES-GCM', iv }, key, enc.encode(plaintext)));
  const packed = new Uint8Array([...salt, ...iv, ...ct]); // salt(16) | iv(12) | ct+tag
  return btoa(String.fromCharCode(...packed));            // self-contained Base64
}

Fitur Utama

Enkripsi terautentikasi GCM secara default

GCM menghasilkan ciphertext plus tag autentikasi 128-bit, sehingga dekripsi gagal secara jelas jika satu byte pun diubah. CBC dan CTR hanya berjarak satu klik untuk saat Anda perlu berinteroperasi dengannya.

Ciphertext mandiri

Mode frasa sandi mengemas salt acak, IV, dan tag ke dalam satu string Base64, sehingga siapa pun yang mendekripsi hanya perlu frasa sandi — tidak ada kolom terpisah untuk disalin atau hilang.

Frasa sandi atau kunci mentah

Ketik frasa sandi (diregangkan dengan PBKDF2-HMAC-SHA256, 600.000 iterasi) atau tempelkan kunci 128/192/256-bit yang persis sebagai hex atau Base64, dengan badge jumlah byte langsung yang mengonfirmasi panjangnya.

Output kompatibel OpenSSL

Aktifkan mode OpenSSL untuk menghasilkan format Salted__ yang dibaca perintah openssl enc dan CryptoJS, dengan perintah CLI yang setara ditampilkan langsung sehingga Anda bisa mereproduksinya di terminal.

100% di browser Anda

Setiap byte dienkripsi secara lokal dengan Web Crypto API. Buka tab Network Anda dan Anda tidak akan melihat apa pun meninggalkan halaman — bahkan bekerja secara offline.

Output Base64 atau Hex

Salin hasilnya dalam encoding apa pun yang diharapkan sistem tujuan Anda, dan periksa panjang salt, IV, ciphertext, dan tag pada strip rincian segmen.

Contoh Enkripsi AES

GCM + frasa sandi (mandiri, non-deterministik)

The quick brown fox jumps over the lazy dog.
salt (16 B) + IV (12 B) + ciphertext + tag (16 B), berformat Base64 — nilai baru setiap kali dijalankan

Dengan Mode GCM, Ukuran kunci 256, Jenis kunci Frasa sandi dan frasa sandi hunter2, kalimat ini terenkripsi menjadi satu string Base64 mandiri. Enkripsi dua kali dan Anda akan mendapatkan dua output yang sama sekali berbeda — itu memang disengaja. Mode Frasa sandi menghasilkan salt 16-byte baru dan IV 12-byte baru untuk setiap enkripsi, sehingga plaintext yang identik tidak pernah menghasilkan ciphertext yang identik dan pengamat tidak bisa tahu bahwa dua pesan itu sama. Strip segmen di bawah output menunjukkan tata letak persisnya: salt, lalu IV, lalu ciphertext dengan tag GCM 128-bit yang ditambahkan di akhir. Untuk mendekripsi, penerima hanya perlu frasa sandi serta mode dan ukuran kunci yang sama — salt, IV, dan tag semuanya ikut di dalam string tersebut.

Output kompatibel OpenSSL (CBC + frasa sandi)

Attack at dawn!
U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=

Aktifkan mode kompatibel OpenSSL dengan Mode CBC, Jenis kunci Frasa sandi, frasa sandi correct-horse, KDF PBKDF2 dan 10.000 iterasi. Alat ini kemudian menghasilkan format Salted__ milik OpenSSL: Base64 yang selalu diawali dengan U2FsdGVkX1, yaitu encoding Base64 dari header Salted__ 8-byte. Karena salt acak 8-byte baru dihasilkan setiap kali, string persisnya berubah pada setiap eksekusi, tetapi setiap string bisa didekripsi di command line dengan: echo 'U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=' | openssl enc -d -aes-256-cbc -pbkdf2 -iter 10000 -pass pass:correct-horse -base64 -A — yang mencetak Attack at dawn!. Pilih EVP-MD5 alih-alih PBKDF2 untuk mencocokkan CryptoJS atau OpenSSL 1.0.2 dan versi lebih lama. Perhatikan bahwa openssl enc tidak mendukung GCM, sehingga mode OpenSSL hanya untuk CBC.

Cara Mengenkripsi Teks dengan AES

  1. 1

    Pilih mode dan ukuran kunci

    Biarkan Mode pada GCM (direkomendasikan) dan Ukuran kunci pada 256 untuk default paling masuk akal dan kuat. Beralih ke CBC atau CTR hanya jika sistem yang Anda tuju mengharuskannya.

  2. 2

    Pilih frasa sandi atau kunci mentah

    Biarkan Jenis kunci pada Frasa sandi dan masukkan frasa sandi yang kuat, atau beralih ke Kunci mentah dan tempelkan kunci 128/192/256-bit yang persis sebagai hex atau Base64. Badge jumlah byte mengonfirmasi apakah kunci mentah Anda memiliki panjang yang valid.

  3. 3

    Masukkan teks untuk dienkripsi

    Ketik atau tempelkan plaintext Anda. Enkripsi berjalan otomatis saat Anda mengetik, sepenuhnya di browser Anda — tanpa bolak-balik tombol dan tanpa unggahan.

  4. 4

    Salin ciphertext mandiri

    Hasil Base64 di sebelah kanan sudah berisi salt, IV, dan tag autentikasi. Gunakan strip segmen untuk melihat tata letak byte-nya, lalu klik Salin. Ubah encoding output ke Hex jika sistem tujuan Anda mengharapkannya.

  5. 5

    Dekripsi kembali saat Anda membutuhkannya

    Berikan ciphertext, frasa sandi, serta mode dan ukuran kunci yang sama kepada penerima, atau buka halaman dekripsi AES untuk membalikkannya sendiri.

Kesalahan Umum Enkripsi AES

Mencampuradukkan frasa sandi dengan kunci mentah

Kunci mentah harus persis 16, 24, atau 32 byte data acak (dimasukkan sebagai hex atau Base64); frasa sandi adalah teks apa pun dan harus diregangkan oleh KDF terlebih dahulu. Memilih Kunci mentah dan menempelkan frasa sandi manusia akan menghasilkan error panjang atau kunci yang lemah.

✗ Salah
Key type: Raw key
Key (hex): correct horse battery staple   (not hex, not 32 bytes)
✓ Benar
Key type: Passphrase
Passphrase: correct horse battery staple   (stretched with PBKDF2)

Menggunakan ulang IV dengan kunci yang sama

IV harus unik per pesan di bawah kunci tertentu. Menggunakannya ulang bersifat fatal untuk GCM (bisa membocorkan kunci autentikasi) dan merusak kerahasiaan untuk CBC dan CTR. Biarkan alat ini menghasilkan IV acak baru setiap kali.

✗ Salah
// same key, same IV for two messages
encrypt(key, iv, a); encrypt(key, iv, b);
✓ Benar
// fresh random IV each time (the default)
encrypt(key, randomIV(), a);

Kehilangan salt, IV, atau tag

Jika Anda hanya menyalin byte ciphertext dan membuang salt/IV yang ada di depan — atau tag GCM yang ditambahkan di akhir — data tidak akan pernah bisa didekripsi. Simpan seluruh string mandiri, bukan hanya bagian tengahnya.

✗ Salah
stored = ciphertext              // salt + IV + tag thrown away
✓ Benar
stored = salt + iv + ciphertext + tag   // the full Base64 string

Mengharapkan output GCM sama di setiap eksekusi

GCM (dan mode frasa sandi umumnya) memakai salt dan IV acak, sehingga teks yang sama akan terenkripsi menjadi string Base64 yang berbeda setiap kali. Itu adalah fitur keamanan, bukan bug — artinya penyadap tidak bisa tahu bahwa dua ciphertext mengenkripsi pesan yang sama.

✗ Salah
assert(encrypt(msg) === encrypt(msg))   // fails — and should
✓ Benar
assert(decrypt(encrypt(msg)) === msg)   // this is what must hold

Yang Bisa Anda Lakukan dengan Enkripsi AES

Pelajari cara kerja mode AES
Berpindah-pindah antara GCM, CBC, dan CTR dengan input yang sama untuk melihat bagaimana autentikasi, panjang IV, dan ukuran ciphertext berubah. Cara praktis untuk memahami apa yang sebenarnya ditetapkan NIST SP 800-38D.
Hasilkan ciphertext yang bisa dibaca sistem lain
Hasilkan output dalam format Salted__ milik OpenSSL (atau sebagai kunci mentah plus IV) sehingga backend, skrip, atau rekan tim yang memakai openssl atau pustaka kripto bisa mendekripsinya tanpa hambatan.
Enkripsi catatan atau cuplikan singkat
Lindungi teks pribadi sekali pakai — frasa pemulihan yang Anda pindahkan antar perangkat, cuplikan dalam tiket dukungan — dengan frasa sandi yang hanya Anda ketahui. Bukan untuk rahasia yang diatur regulasi atau produksi.
Buat prototipe format enkripsi
Pastikan tata letak salt/IV/tag dan pengaturan KDF Anda di sini sebelum menulis kode, menggunakan rincian segmen untuk mengonfirmasi urutan dan panjang byte.
Hasilkan vektor uji
Buat ciphertext yang diketahui dengan frasa sandi dan mode tetap untuk memberi makan pengujian dekripsi Anda sendiri, lalu verifikasi round-trip-nya di halaman dekripsi AES.

Mode AES & Derivasi Kunci

GCM (Galois/Counter Mode) — terautentikasi, direkomendasikan
Kerahasiaan plus tag autentikasi 128-bit (NIST SP 800-38D). Mode ini memakai IV 96-bit (12-byte) yang dihasilkan secara acak untuk setiap enkripsi, dan enkripsi maupun dekripsi bisa diparalelkan dengan baik. Satu aturan yang tidak boleh dilanggar: jangan pernah menggunakan ulang IV dengan kunci yang sama. SP 800-38D membatasi satu kunci hingga sekitar 2^32 IV yang dihasilkan secara acak, dan pengulangan membocorkan XOR dari dua plaintext dan bahkan bisa mengekspos kunci autentikasi yang melindungi tag. Terbaik untuk hampir semua kasus.
CBC (Cipher Block Chaining) — kerahasiaan saja
Setiap blok di-XOR dengan blok ciphertext sebelumnya, memakai IV acak 16-byte. CBC tidak memiliki autentikasi bawaan, sehingga harus dipasangkan dengan MAC terpisah — enkripsi-lalu-MAC, misalnya dengan generator HMAC kami — dan CBC secara historis rentan terhadap serangan padding oracle (Vaudenay, EUROCRYPT 2002). Ditawarkan di sini untuk interoperabilitas dengan OpenSSL dan sistem yang lebih lama.
CTR (Counter) — kerahasiaan saja, mirip stream
Mengubah AES menjadi stream cipher dengan mengenkripsi sebuah counter, sehingga panjang byte apa pun berfungsi tanpa padding dan blok-blok bisa diparalelkan secara bebas. Seperti CBC, CTR tidak memberikan integritas dengan sendirinya, dan menggunakan ulang counter/IV di bawah satu kunci adalah bencana. Berguna saat Anda memerlukan akses acak atau semantik streaming.
ECB — tidak ditawarkan (memang disengaja)
Electronic Codebook mengenkripsi setiap blok secara independen, sehingga blok plaintext yang identik menghasilkan ciphertext yang identik dan pola-pola bocor — 'ECB penguin' yang terkenal itu. Web Crypto API dengan sengaja tidak mengimplementasikannya, begitu pula kami. Jika sistem lama memerlukan ECB, anggap itu sebagai bug yang harus diperbaiki, bukan format yang harus direproduksi.
Derivasi kunci: 600.000 vs 10.000 vs 1 iterasi
Dalam mode frasa sandi default, alat ini memakai PBKDF2-HMAC-SHA256 pada 600.000 iterasi (hash SHA-256 yang sama diterapkan ratusan ribu kali) dengan salt 16-byte, sesuai OWASP. Dalam mode kompatibel OpenSSL, PBKDF2 secara default hanya memakai 10.000 iterasi (default openssl enc), dan KDF EVP_BytesToKey lama yang dipakai CryptoJS dan OpenSSL lawas hanya menjalankan satu pass MD5 — jauh lebih lemah beberapa orde besaran. Semakin banyak iterasi berarti brute-force per tebakan semakin lambat, itulah sebabnya default modern jauh lebih tinggi. Argon2 dan scrypt lebih kuat lagi tetapi bukan bagian dari Web Crypto, sehingga di luar cakupan di sini; untuk penyimpanan kata sandi, ikuti OWASP dan pilih Argon2id.

Praktik Terbaik Enkripsi AES

Utamakan GCM kecuali sistem lain mengharuskan sebaliknya
Enkripsi terautentikasi mendeteksi perubahan yang diam-diam diloloskan oleh CBC dan CTR. Turun ke CBC atau CTR hanya untuk interoperabilitas, dan tambahkan MAC jika Anda melakukannya.
Gunakan IV acak baru untuk setiap pesan
Alat ini melakukannya secara otomatis. Jika Anda mengganti IV secara manual, jangan pernah menggunakan ulang satu IV dengan kunci yang sama — untuk GCM, pengulangan adalah bencana, dan untuk CBC, itu merusak keamanan semantik.
Pilih frasa sandi yang kuat dan kunci acak sungguhan
PBKDF2 memperlambat brute force tetapi tidak bisa menyelamatkan frasa sandi yang lemah. Hasilkan frasa sandi yang panjang dengan generator kata sandi, atau kunci acak sungguhan dengan generator kunci rahasia.
Simpan salt, IV, dan tag bersama ciphertext
Ketiganya bukan rahasia, tetapi dekripsi gagal tanpanya. Format mandiri alat ini menggabungkan ketiganya; jika Anda memakai mode kunci mentah dengan ciphertext murni, salin IV secara terpisah dan simpan bersama ciphertext-nya.
Jangan mengenkripsi rahasia produksi atau yang diatur regulasi di alat online mana pun
Bahkan yang sepenuhnya client-side, alat browser ditujukan untuk belajar, debugging, dan penggunaan pribadi sekali pakai. Rahasia sungguhan seharusnya berada di sistem manajemen kunci yang teruji dengan penanganan dan rotasi kunci teraudit. AES-256 sendiri kuat — disetujui di bawah suite CNSA 2.0 milik NSA untuk informasi hingga tingkat TOP SECRET — dan celah dunia nyata berasal dari kesalahan implementasi, bukan dari cipher-nya.

FAQ Enkripsi AES

Apakah aman mengenkripsi teks secara online?
Dengan alat ini, enkripsi itu sendiri sepenuhnya terjadi di browser Anda — teks, frasa sandi, dan kunci Anda tidak pernah dikirim ke server, yang bisa Anda konfirmasi dengan mengamati tab Network. Itu membuatnya aman untuk belajar, debugging, dan data pribadi sekali pakai. Ini bukan tempat yang tepat untuk rahasia produksi, data yang diatur regulasi, atau apa pun yang memerlukan manajemen kunci jangka panjang, dan itu berlaku untuk alat online mana pun: halaman browser tidak bisa memberi Anda penyimpanan kunci teraudit, rotasi, atau kontrol akses. Enkripsi hal-hal sekali pakai dan pribadi di sini, dan simpan rahasia sungguhan di sistem khusus.
Bisakah AES didekripsi tanpa kunci?
Tidak. AES tidak memiliki celah praktis yang diketahui, sehingga tanpa kunci atau frasa sandi tidak ada jalan pintas — penyerang hanya bisa mencoba kunci satu per satu. AES-256 memiliki 2^256 kemungkinan kunci; bahkan dengan satu triliun triliun tebakan per detik, Anda tetap membutuhkan waktu jauh lebih lama daripada usia alam semesta untuk mencari sebagian kecil yang berarti. Risiko yang realistis tidak pernah berasal dari cipher itu sendiri: risiko itu adalah frasa sandi yang lemah, IV yang digunakan ulang, kunci yang bocor, atau padding oracle pada sistem yang dibangun dengan buruk. Pilih frasa sandi yang kuat dan tidak satu pun dari itu berlaku. Siapa pun yang mengiklankan 'pemulihan AES' tanpa kunci sedang menjual penipuan.
GCM vs CBC — mode mana yang harus saya pakai?
Gunakan GCM. Mode ini memberi Anda kerahasiaan plus tag autentikasi 128-bit bawaan, sehingga jika satu byte pun dari ciphertext diubah, dekripsi akan gagal alih-alih diam-diam mengembalikan data yang rusak. CBC hanya menyembunyikan data; dengan sendirinya CBC tidak bisa mendeteksi perubahan dan memiliki riwayat panjang kerentanan padding oracle (Vaudenay, EUROCRYPT 2002), itulah sebabnya TLS 1.3 (RFC 8446) menghapus semua cipher suite CBC. Satu-satunya alasan bagus untuk memilih CBC di sini adalah interoperabilitas dengan sistem yang sudah ada — misalnya perintah enc milik OpenSSL, yang tidak mendukung GCM.
AES-128 vs AES-256 — apakah 256 sepadan?
Keduanya dianggap aman; AES-128 belum dipecahkan dan sedikit lebih cepat. AES-256 memiliki kunci yang lebih besar dan margin keamanan yang lebih besar, dan itu adalah ukuran yang disetujui di bawah suite CNSA 2.0 milik NSA untuk informasi hingga tingkat TOP SECRET, itulah sebabnya ukuran ini menjadi default yang masuk akal. Biayanya kecil — beberapa ronde tambahan per blok. Kecuali Anda sedang mengoptimalkan jalur yang sangat sibuk, enkripsi dengan AES-256; margin keamanan ekstra itu pada praktiknya nyaris gratis.
Apakah data saya diunggah saat saya mengenkripsi di sini?
Tidak. Semua enkripsi berjalan secara lokal melalui Web Crypto API milik browser (crypto.subtle), implementasi teraudit yang sama yang dipakai browser Anda untuk HTTPS. Tidak ada yang Anda ketik dikirim ke mana pun — Anda bisa membuka panel Network di developer tools, mengenkripsi sesuatu, dan mengamati nol permintaan terpicu, atau memutus koneksi internet sepenuhnya dan alat ini tetap bekerja. SubtleCrypto hanya tersedia dalam konteks aman (HTTPS), yang menjadi salah satu alasan jaminan ini berlaku.
Apa perbedaan antara frasa sandi dan kunci?
Kunci adalah data acak yang persis 128, 192, atau 256 bit — untuk AES-256 itu berarti 32 byte mentah, biasanya ditulis sebagai hex atau Base64. Frasa sandi adalah teks yang diketik manusia dengan panjang berapa pun dan bukan kunci itu sendiri: frasa sandi harus diregangkan menjadi kunci oleh fungsi derivasi kunci. Alat ini melakukannya secara otomatis dalam mode frasa sandi dengan PBKDF2-HMAC-SHA256, 600.000 iterasi, dan salt acak. Mencampuradukkan keduanya — menempelkan frasa sandi ke kolom kunci mentah, atau sebaliknya — adalah salah satu alasan paling umum dua sistem gagal sepakat soal sebuah ciphertext. (Untuk token yang ditandatangani alih-alih enkripsi, lihat JWT encoder.)
Bisakah saya mengenkripsi sehingga OpenSSL atau CryptoJS bisa mendekripsinya?
Bisa. Aktifkan mode kompatibel OpenSSL (dengan AES-CBC dan frasa sandi) dan alat ini menghasilkan format Salted__ yang dipahami perintah openssl enc dan CryptoJS, dan alat ini menunjukkan perintah openssl yang setara persis. Pilih fungsi derivasi kunci yang cocok: PBKDF2 untuk OpenSSL modern (default openssl -pbkdf2 adalah 10.000 iterasi), EVP-SHA256 untuk OpenSSL 1.1+ tanpa -pbkdf2, atau EVP-MD5 untuk CryptoJS dan OpenSSL 1.0.2 ke bawah. Untuk melakukan sebaliknya dan membaca ciphertext milik orang lain, gunakan alat dekripsi AES.