Password Generator

Buat password acak yang kuat dengan panjang dan kumpulan karakter yang dapat disesuaikan

Panjang20
Jumlah5

Apa Itu Password Generator?

Password generator membuat string karakter acak yang digunakan sebagai password untuk akun pengguna, API key, kredensial database, dan rahasia enkripsi. Berbeda dengan password yang dipilih manusia, password yang dibuat menarik dari seluruh ruang kemungkinan kombinasi karakter, sehingga tahan terhadap serangan kamus dan tebakan berbasis pola. Alat ini membuat password acak yang kuat secara online menggunakan generator angka acak kriptografis bawaan browser Anda.

Kekuatan password bergantung pada dua faktor: panjang dan keragaman karakter. Password 20 karakter menggunakan huruf besar, huruf kecil, angka, dan simbol memiliki sekitar 131 bit entropi. Pada level tersebut, serangan brute-force yang menguji satu triliun tebakan per detik membutuhkan waktu lebih lama dari usia alam semesta untuk mencoba setiap kombinasi. Rumusnya sederhana: entropi = panjang x log2(ukuran kumpulan karakter).

Standar seperti NIST SP 800-63B merekomendasikan password minimal 8 karakter tanpa batas atas yang diberlakukan oleh verifier, dan tidak menganjurkan aturan komposisi paksa seperti mensyaratkan tepat satu simbol, melainkan mendukung passphrase yang lebih panjang. Untuk kredensial antar mesin dan akun layanan, 20 karakter acak atau lebih yang diambil dari kumpulan karakter lengkap adalah standar dasar yang diterima di sebagian besar kerangka keamanan dan rezim kepatuhan.

Mengapa Menggunakan Password Generator?

Manusia adalah generator angka acak yang buruk. Kita menggunakan ulang password, memilih kata dari kamus, mengganti huruf dengan pola yang dapat diprediksi (@ untuk a, 3 untuk e), dan cenderung menggunakan string pendek. Password generator menghilangkan bias manusia dari proses tersebut.

๐Ÿ”
Pembuatan mengutamakan privasi
Password dibuat sepenuhnya di browser Anda menggunakan Web Crypto API. Tidak ada karakter yang meninggalkan perangkat Anda, tidak ada yang dicatat, dan tidak ada permintaan jaringan yang dibuat selama proses pembuatan.
โšก
Keluaran batch instan
Buat hingga 20 password sekaligus dengan satu klik. Salin password satu per satu atau semuanya sekaligus untuk skrip provisioning atau brankas kredensial.
๐Ÿ›ก๏ธ
Tanpa akun yang diperlukan
Tanpa pendaftaran, tanpa email, tanpa cookie yang melacak password yang Anda buat. Buka halaman, konfigurasikan opsi Anda, dan buat password.
๐ŸŽ›๏ธ
Kontrol kumpulan karakter penuh
Aktifkan atau nonaktifkan huruf besar, huruf kecil, angka, dan simbol secara independen. Atur panjang dari 4 hingga 128 karakter sesuai persyaratan sistem atau kebijakan apa pun.

Kasus Penggunaan Password Generator

Frontend Development
Buat password uji untuk validasi formulir, pengujian panjang input, dan pengembangan alur autentikasi. Verifikasi bahwa formulir login Anda menangani password 128 karakter dan karakter khusus dengan benar.
Backend & DevOps
Buat kredensial database, token API, dan password akun layanan selama penyiapan infrastruktur. Gunakan pembuatan batch untuk menyediakan beberapa layanan dalam satu sesi.
Security Engineering
Buat rahasia berenkropi tinggi untuk kunci enkripsi, penandatanganan HMAC, dan rotasi JWT secret. Atur panjang ke 64 karakter atau lebih untuk rahasia yang perlu melebihi 256 bit entropi.
QA & Penetration Testing
Uji penegakan kebijakan password dengan membuat string yang menyertakan atau mengecualikan kumpulan karakter tertentu. Verifikasi bahwa sistem dengan benar menolak password di bawah panjang atau kompleksitas minimum.
Data Engineering
Buat kredensial acak untuk lingkungan uji, database staging, dan rahasia pipeline CI/CD. Hindari penggunaan ulang password produksi dalam data uji dengan membuat yang baru untuk setiap lingkungan.
Keamanan Akun Pribadi
Buat password unik untuk setiap akun online. Padukan generator ini dengan pengelola password untuk menyimpan kredensial yang tidak perlu Anda hafal.

Referensi Entropi Password

Entropi mengukur seberapa tidak dapat diprediksinya sebuah password. Dihitung sebagai log2(ukuran_kumpulan_karakter ^ panjang). Entropi yang lebih tinggi berarti lebih banyak kemungkinan kombinasi yang harus dicari penyerang. NIST dan OWASP merekomendasikan setidaknya 80 bit entropi untuk aplikasi keamanan tinggi.

PanjangKumpulan KarakterEntropiWaktu Brute-Force
8lower + digits~41 bitsMinutes to hours
12lower + upper + digits~71 bitsCenturies (offline)
16all character sets~105 bitsBeyond brute-force
20all character sets~131 bitsBeyond brute-force
32all character sets~210 bitsBeyond brute-force
64all character sets~419 bitsBeyond brute-force

Waktu pembobolan mengasumsikan 1 triliun tebakan per detik (serangan offline dengan GPU modern). Serangan online dengan pembatasan laju jauh lebih lambat berberapa orde besarnya.

CSPRNG vs Math.random() untuk Pembuatan Password

Sumber keacakan sama pentingnya dengan panjang password. Password yang dibuat dengan generator angka acak yang dapat diprediksi dapat direkonstruksi oleh penyerang yang mengetahui algoritma dan kondisi seed. Alat ini menggunakan crypto.getRandomValues(), yang merupakan cryptographically secure pseudorandom number generator (CSPRNG) bawaan setiap browser modern.

crypto.getRandomValues()
Menggunakan sumber entropi sistem operasi (hardware RNG, waktu interrupt, dll.). Keluaran tidak dapat diprediksi bahkan jika penyerang mengetahui semua keluaran sebelumnya. Diperlukan oleh spesifikasi W3C Web Crypto untuk operasi yang sensitif terhadap keamanan.
Math.random()
Menggunakan algoritma deterministik yang di-seed dari kumpulan entropi terbatas. Keluaran dapat diprediksi jika kondisi seed diketahui. Spesifikasi ECMAScript secara eksplisit menyatakan bahwa Math.random() tidak menyediakan angka acak yang aman secara kriptografis. Jangan pernah menggunakannya untuk pembuatan password.

Contoh Kode

Buat password secara terprogram dalam berbagai bahasa. Setiap contoh di bawah ini menggunakan sumber acak yang aman secara kriptografis, bukan Math.random() atau PRNG lemah yang setara.

JavaScript (Web Crypto API)
// Generate a random password in the browser or Node.js 19+
function generatePassword(length = 20) {
  const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*'
  const values = new Uint32Array(length)
  crypto.getRandomValues(values)
  return Array.from(values, v => charset[v % charset.length]).join('')
}

console.log(generatePassword())    // โ†’ "kR7!mZp$Xw2&nLq9@Yf3"
console.log(generatePassword(32))  // โ†’ "Hd4%tNx!Qw8#mKp2Rv6&Zj0*Ls3Yb7@"
Python
import secrets
import string

def generate_password(length: int = 20) -> str:
    """Generate a cryptographically secure random password."""
    alphabet = string.ascii_letters + string.digits + string.punctuation
    return ''.join(secrets.choice(alphabet) for _ in range(length))

# Single password
print(generate_password())      # โ†’ "kR7!mZp$Xw2&nLq9@Yf3"

# Batch of 5 passwords
for _ in range(5):
    print(generate_password(24))

# Ensure at least one char from each category
def generate_strong(length: int = 20) -> str:
    required = [
        secrets.choice(string.ascii_uppercase),
        secrets.choice(string.ascii_lowercase),
        secrets.choice(string.digits),
        secrets.choice(string.punctuation),
    ]
    remaining = length - len(required)
    alphabet = string.ascii_letters + string.digits + string.punctuation
    all_chars = required + [secrets.choice(alphabet) for _ in range(remaining)]
    secrets.SystemRandom().shuffle(all_chars)
    return ''.join(all_chars)
CLI (OpenSSL / /dev/urandom)
# OpenSSL โ€” generate 32 random bytes, base64-encode
openssl rand -base64 32
# โ†’ "x7Kp2mNqR4wZ8vLs1Yb0Hd6tFj3Xc9Ga5eUi+Wo="

# /dev/urandom with tr โ€” alphanumeric + symbols, 20 chars
tr -dc 'A-Za-z0-9!@#$%^&*' < /dev/urandom | head -c 20; echo
# โ†’ "kR7!mZp$Xw2&nLq9@Yf3"

# pwgen (install: apt install pwgen / brew install pwgen)
pwgen -sy 20 5
# Generates 5 passwords, 20 chars each, with symbols
Go
package main

import (
    "crypto/rand"
    "fmt"
    "math/big"
)

func generatePassword(length int) (string, error) {
    charset := "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()"
    result := make([]byte, length)
    for i := range result {
        idx, err := rand.Int(rand.Reader, big.NewInt(int64(len(charset))))
        if err != nil {
            return "", err
        }
        result[i] = charset[idx.Int64()]
    }
    return string(result), nil
}

func main() {
    pwd, _ := generatePassword(20)
    fmt.Println(pwd) // โ†’ "kR7!mZp$Xw2&nLq9@Yf3"
}

Pertanyaan yang Sering Diajukan

Seberapa panjang seharusnya sebuah password?
Untuk akun pengguna, 16 karakter dari kumpulan karakter campuran memberikan lebih dari 100 bit entropi, yang cukup untuk semua model ancaman saat ini. Untuk rahasia mesin (API key, kunci enkripsi), gunakan 32 karakter atau lebih. NIST SP 800-63B menetapkan minimum 8 karakter tetapi merekomendasikan agar sistem mengizinkan password yang jauh lebih panjang tanpa pemotongan.
Apakah password generator ini aman digunakan?
Ya. Password dibuat di browser Anda menggunakan Web Crypto API (crypto.getRandomValues). Tidak ada data yang dikirim ke server mana pun. Anda dapat memverifikasi ini dengan membuka tab Network browser dan mengamati bahwa tidak ada permintaan yang dibuat saat Anda mengklik Buat. Kode sumbernya adalah JavaScript sisi klien, yang terlihat di alat developer browser Anda.
Apa itu entropi password?
Entropi adalah ukuran keacakan yang dinyatakan dalam bit. Password dengan N bit entropi memiliki 2^N kemungkinan nilai. Misalnya, password 20 karakter yang diambil dari 95 karakter ASCII yang dapat dicetak memiliki log2(95^20) = 131,1 bit entropi. Setiap bit tambahan menggandakan jumlah tebakan yang dibutuhkan penyerang.
Haruskah saya menyertakan simbol dalam password saya?
Menyertakan simbol memperluas kumpulan karakter dari 62 (huruf + angka) menjadi 95 (ASCII yang dapat dicetak), yang menambahkan sekitar 6,1 bit entropi per karakter. Beberapa sistem membatasi simbol yang diperbolehkan. Jika sistem menolak simbol tertentu, nonaktifkan opsi simbol dan kompensasi dengan password yang lebih panjang. Password alfanumerik 24 karakter memiliki lebih banyak entropi daripada password 16 karakter dengan simbol.
Mengapa tidak menggunakan Math.random() untuk membuat password?
Math.random() tidak aman secara kriptografis. Sebagian besar mesin JavaScript mengimplementasikannya dengan xorshift128+ atau PRNG cepat serupa yang dirancang untuk simulasi dan permainan, bukan keamanan. Penyerang yang mengamati beberapa keluaran dapat memulihkan kondisi internal dan memprediksi semua keluaran di masa mendatang. Web Crypto API menggunakan sumber entropi sistem operasi yang tidak dapat diprediksi.
Bisakah saya menggunakan password yang dihasilkan untuk API key dan token?
Ya, tetapi perhatikan persyaratan format sistem target Anda. Beberapa API mengharapkan kunci yang di-encode base64 atau string hex daripada karakter sembarang. Untuk pembuatan rahasia mentah, gunakan kumpulan karakter lengkap pada 32 karakter atau lebih. Untuk kunci base64, buat byte acak dan encode secara terpisah daripada memperlakukan base64 sebagai kumpulan karakter password.
Seberapa sering sebaiknya saya merotasi password?
NIST SP 800-63B (2017, diperbarui 2024) tidak menganjurkan rotasi berkala yang dipaksakan untuk password pengguna karena hal itu mengarah pada pilihan password yang lebih lemah. Rotasi hanya ketika ada bukti kompromi. Untuk rahasia mesin dan akun layanan, rotasi berdasarkan model risiko organisasi Anda, biasanya setiap 90 hari untuk kredensial dengan hak istimewa tinggi.