Cara menggunakan
- Atur Panjang, lalu pilih Satuan: Byte data acak, atau Karakter jika panjang dihitung dalam karakter Base64. Untuk kunci, gunakan byte: 32 byte sama dengan kunci 256 bit.
- Atur Jumlah string yang Anda perlukan dan Pemisah di antaranya: Baris baru, Koma, atau Spasi.
- Pilih varian Standar atau Aman untuk URL. Dengan satuan byte, Anda juga dapat mematikan Padding jika sistem tujuan tidak mengharapkan tanda =.
- Klik Buat untuk mendapatkan nilai baru, lalu klik Salin semua atau Unduh daftarnya.
Byte, karakter, dan entropi
Kekuatan string acak diukur dalam bit entropi. Setiap byte acak menambahkan 8 bit, sehingga 16 byte memberikan 128 bit dan 32 byte memberikan 256 bit. Base64 hanya mengubah cara byte tersebut ditulis: setiap karakter membawa 6 bit, dan setiap 3 byte menjadi 4 karakter. Alat ini menampilkan entropi setiap string, sehingga Anda dapat memeriksanya sekilas.
Dengan satuan byte, keluaran didekode menjadi tepat sebanyak itu byte acak, dan itulah yang dibutuhkan kunci dan kunci rahasia. Dengan satuan karakter, Anda mendapatkan jumlah karakter yang persis, masing-masing dipilih secara seragam dari alfabet 64 karakter; gunakan satuan ini jika suatu sistem meminta token dengan panjang tetap dan menyimpannya sebagai teks.
| Byte | Karakter Base64 | Entropi | Penggunaan umum |
|---|---|---|---|
| 12 | 16 | 96 bit | Nonce AES-GCM (IV) |
| 16 | 24 (22 tanpa padding) | 128 bit | Salt, token sesi dan CSRF, kunci AES-128 |
| 32 | 44 (43 tanpa padding) | 256 bit | Kunci AES-256 dan HMAC-SHA256, kunci rahasia HS256, kunci API |
| 64 | 88 (86 tanpa padding) | 512 bit | Kunci HMAC-SHA512, kunci rahasia HS512 |
Kegunaan nilai Base64 acak
- Kunci rahasia JWT. RFC 7518 mewajibkan kunci HMAC yang panjangnya minimal sama dengan keluaran hash: 32 byte untuk HS256, 48 untuk HS384, dan 64 untuk HS512. Sebagian pustaka memakai string kunci rahasia apa adanya, sebagian lain mendekodenya dari Base64 terlebih dahulu, jadi periksa mana yang diharapkan pustaka Anda. Decoder JWT memverifikasi tanda tangan HS256 hingga HS512 dengan kedua jenis kunci rahasia, dan generator HMAC menerima kunci berupa teks, hex, atau Base64.
- Kunci aplikasi. Laravel, misalnya, menyimpan kunci enkripsi 32 byte di file
.envsebagaiAPP_KEY=base64:..., bentuk yang sama dengan string 32 byte dari alat ini. - Secret Kubernetes. Nilai di bawah
dataharus berupa Base64 standar dengan padding. String yang dibuat dalam mode byte dengan varian Standar dan padding aktif dapat langsung dimasukkan ke sana, dan Pod akan menerima byte acak mentahnya. Jika aplikasi mengharapkan teks Base64 itu sendiri, letakkan nilainya di bawahstringData. - Token di URL. Tautan reset kata sandi, kode undangan, dan token lain yang dikirim lewat URL sebaiknya menggunakan varian aman untuk URL, yang mengganti
+dan/dengan-dan_. Lihat Base64URL untuk detailnya.
Mengapa crypto.getRandomValues, bukan Math.random
Math.random() adalah generator serbaguna yang cepat. Keluarannya tidak dirancang agar tidak dapat diprediksi, dan pada beberapa engine JavaScript, keadaan internalnya dapat direkonstruksi hanya dari segelintir nilai. Alat ini menggunakan crypto.getRandomValues(), generator yang aman secara kriptografis dengan seed dari sistem operasi, jenis sumber yang sama dengan yang dipakai openssl rand dan modul secrets di Python. Nilai dibuat di perangkat Anda dan tidak pernah dikirim atau disimpan.
Membuat Base64 acak dengan kode
# Shell: 32 byte acak sebagai Base64 (44 karakter)
openssl rand -base64 32
head -c 32 /dev/urandom | base64
# Python
import base64, secrets
base64.b64encode(secrets.token_bytes(32)).decode()
secrets.token_urlsafe(32) # aman untuk URL, tanpa padding, 43 karakter
// Node.js
const crypto = require('crypto');
crypto.randomBytes(32).toString('base64');
crypto.randomBytes(32).toString('base64url'); // aman untuk URL, tanpa padding
// Browser
const bytes = crypto.getRandomValues(new Uint8Array(32));
btoa(String.fromCharCode(...bytes));
Pertanyaan yang sering diajukan
Seberapa panjang sebaiknya kunci atau kunci rahasia acak?
16 byte (128 bit) sudah cukup untuk nilai yang hanya perlu unik dan mustahil ditebak, seperti ID sesi, token CSRF, dan salt. Gunakan 32 byte (256 bit) untuk kunci AES-256, kunci HMAC-SHA256, dan kunci rahasia HS256, serta 64 byte untuk HMAC-SHA512 dan HS512.
Apakah ini sama dengan openssl rand -base64 32?
=, dan didekode menjadi 32 byte acak. Tentu saja, nilainya sendiri selalu berbeda setiap kali dibuat.Sebaiknya saya memakai satuan byte atau karakter?
Gunakan byte jika string akan didekode, seperti pada kunci enkripsi dan Secret Kubernetes. Gunakan karakter jika sistem memerlukan token dengan panjang yang persis dan memakai teksnya apa adanya. String dari satuan karakter hanya dijamin dapat didekode dengan bersih jika panjangnya kelipatan 4.
Kapan saya memerlukan varian aman untuk URL?
/ memisahkan path URL dan + berubah menjadi spasi dalam query string berformat form-encoded. Base64 aman untuk URL menggunakan - dan _ sebagai gantinya dan biasanya ditulis tanpa padding.Apakah nilai yang dihasilkan disimpan atau dikirim ke suatu tempat?
Tidak. Nilai dibuat oleh JavaScript di browser Anda, tidak pernah dikirim, dan hilang saat Anda meninggalkan halaman. Begitu Anda memakai salah satunya sebagai kunci rahasia sungguhan, simpan di pengelola kata sandi atau penyimpanan kunci rahasia (secret store), bukan di pesan chat atau tiket.