CalcMint

Enkripsi dan Dekripsi AES

Enkripsi pesan dengan kata sandi lalu dekripsi kapan saja, atau gunakan kunci dan IV mentah untuk menguji kode Anda sendiri. Enkripsi dilakukan di perangkat Anda dengan Web Crypto API.

Enkripsi / dekripsi AES

Pasang kalkulator ini di situs Anda

Salin kode ini lalu tempelkan ke HTML halaman Anda. Gratis; mohon jangan hapus tautan kreditnya.

Apa yang dilakukan mode kata sandi

Kata sandi Anda diubah menjadi kunci 256-bit dengan PBKDF2-HMAC-SHA256 dan 600.000 iterasi (rekomendasi OWASP), memakai salt acak 16 byte. Teks dienkripsi dengan AES-256-GCM menggunakan nonce acak 12 byte, dan hasilnya adalah salt + nonce + ciphertext + tag 16 byte, ditulis dalam Base64. Mengenkripsi teks yang sama dua kali menghasilkan output berbeda, dan itu memang normal.

Untuk mendekripsinya di tempat lain cukup beberapa baris kode, misalnya di Python dengan paket cryptography:

import base64
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC

data = base64.b64decode(ciphertext)
salt, nonce, body = data[:16], data[16:28], data[28:]
key = PBKDF2HMAC(hashes.SHA256(), 32, salt, 600_000).derive(password.encode())
print(AESGCM(key).decrypt(nonce, body, None).decode())

AES secara singkat

AES (FIPS 197) adalah block cipher yang distandardisasi NIST pada 2001. AES mengenkripsi blok 16 byte dengan kunci 128, 192, atau 256 bit, dan mode menentukan bagaimana blok-blok dirangkai: CBC butuh padding dan IV acak, CTR mengubah AES menjadi stream cipher, dan GCM menambahkan tag autentikasi yang mendeteksi perubahan apa pun pada ciphertext. Kehilangan kata sandi atau kunci berarti kehilangan data: tidak ada cara untuk memulihkannya.

Pertanyaan umum

Opsi mana yang sebaiknya saya pilih?

Untuk pesan Anda sendiri, gunakan mode kata sandi default (AES-256-GCM): mode ini terautentikasi, jadi kata sandi yang salah atau teks yang diubah akan terdeteksi. Gunakan format OpenSSL/CryptoJS untuk bertukar data dengan kode yang memakai CryptoJS.AES atau openssl enc, dan “Kunci dan IV mentah” untuk menyamakan dengan implementasi tertentu.

Bisakah ciphertext yang diawali U2FsdGVkX1 didekripsi di sini?

Bisa, jika Anda tahu kata sandinya. U2FsdGVkX1 adalah “Salted__” dalam Base64, header yang ditulis oleh CryptoJS dan OpenSSL. Derivasi kunci versi lama dengan MD5 dan versi baru dengan SHA-256 sama-sama dicoba secara otomatis.

Kenapa tidak ada mode ECB?

Browser tidak menyediakannya karena tidak aman: blok plaintext yang identik menghasilkan blok ciphertext yang identik, sehingga pola datanya bocor. Gunakan CBC, CTR, atau yang terbaik, GCM.

Apakah yang saya tempel dikirim ke server?

Tidak. Alat ini berjalan sepenuhnya di browser Anda dengan JavaScript dan Web Crypto API bawaan. Apa pun yang Anda ketik, tempel, atau buka tidak di-upload maupun disimpan.

Kalkulator terkait