Generator Base64 Acak

Buat string Base64 acak dengan generator bilangan acak aman bawaan browser Anda. Atur panjang dalam byte atau karakter, buat hingga 1000 string sekaligus, dan pilih keluaran standar atau aman untuk URL.

Berjalan sepenuhnya di browser Anda. Tidak ada yang diunggah.

Cara menggunakan

  1. 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.
  2. Atur Jumlah string yang Anda perlukan dan Pemisah di antaranya: Baris baru, Koma, atau Spasi.
  3. Pilih varian Standar atau Aman untuk URL. Dengan satuan byte, Anda juga dapat mematikan Padding jika sistem tujuan tidak mengharapkan tanda =.
  4. 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.

ByteKarakter Base64EntropiPenggunaan umum
121696 bitNonce AES-GCM (IV)
1624 (22 tanpa padding)128 bitSalt, token sesi dan CSRF, kunci AES-128
3244 (43 tanpa padding)256 bitKunci AES-256 dan HMAC-SHA256, kunci rahasia HS256, kunci API
6488 (86 tanpa padding)512 bitKunci 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 .env sebagai APP_KEY=base64:..., bentuk yang sama dengan string 32 byte dari alat ini.
  • Secret Kubernetes. Nilai di bawah data harus 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 bawah stringData.
  • 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?
Jenis nilai yang dihasilkan sama. Dengan panjang 32 byte, varian Standar, dan padding aktif, setiap hasil sepanjang 44 karakter, diakhiri satu =, 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?
Setiap kali nilai tersebut dimasukkan ke URL, query string, cookie, atau nama file. Dalam Base64 standar, / 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.