Alat Pembuat & Validator Kata Sandi

Alat profesional untuk membuat dan memvalidasi kata sandi, menghasilkan kata sandi yang kuat dan frasa sandi yang mudah diingat dengan dukungan pembuatan batch, jaminan keunikan, penilaian kekuatan, dan validasi kebijakan. Fitur mencakup sumber acak yang aman secara kriptografi, set karakter yang dapat dikonfigurasi, penyaringan karakter serupa, statistik deduplikasi batch, dan fungsi salin satu klik. Termasuk contoh kode multibahasa, basis pengetahuan kata sandi, praktik terbaik keamanan, dan alat pengujian kebijakan. Semua operasi dilakukan secara lokal di browser Anda, memastikan privasi dan keamanan.

Generator Kata Sandi

Pilih Grup Simbol
Tips: Kecualikan karakter dengan memilih grup atau mengeklik langsung pada karakter individu.
Hasil

Penguji Kebijakan Kata Sandi

Hasil
  • Panjang
  • Huruf Kecil
  • Huruf Besar
  • Angka
  • Simbol
  • Berurutan
  • Pengulangan
  • Daftar Terlarang
Semua pemeriksaan dilakukan secara lokal di peramban Anda.

Generator Frasa Sandi

Kata dipilih secara acak dengan aman secara kriptografis (Web Crypto) dari daftar 1271 kata yang tidak ambigu; 6 kata memberikan sekitar 62 bit entropi — gunakan 8 kata untuk kekuatan lebih.

Panduan Ringkas Hashing Kata Sandi

Argon2id
  • Gunakan Argon2id dengan parameter memori-kerja yang wajar
  • Waktu ≥ 2 putaran, memori ≥ 64MB (sesuaikan sesuai lingkungan)
  • Simpan salt unik per pengguna; secara opsional gunakan pepper di lapisan aplikasi
PBKDF2
  • Pilih SHA-256 atau SHA-512 dengan iterasi ≥ 210k (sesuaikan sesuai kebutuhan)
  • Gunakan salt unik untuk setiap hash; dukung peningkatan parameter
  • Pindah ke parameter biaya lebih tinggi saat pengguna login berikutnya
BCrypt
  • Atur biaya antara 10–14, bergantung pada kemampuan server
  • Hindari masalah pemotongan; hash seluruh kata sandi
  • Terapkan pembatasan tingkat dan pemantauan pada endpoint otentikasi
Referensi: NIST SP 800-63B, OWASP ASVS. Parameter harus sesuai dengan kemampuan perangkat dan SLO.

Evaluator Kekuatan Kata Sandi

Kekuatan diperkirakan dari entropi: entropi = log2(ukuran kumpulan karakter) × panjang. Kumpulan karakter yang lebih besar dan panjang yang lebih baik meningkatkan ketahanan terhadap tebakan.

  • Lemah: < 50 bit —— Hanya cocok untuk skenario sekali pakai atau bernilai rendah
  • Cukup: 50–80 bit —— Dapat diterima untuk skenario berisiko rendah
  • Kuat: 80–110 bit —— Target bawaan yang direkomendasikan
  • Sangat Kuat: > 110 bit —— Direkomendasikan untuk akun admin atau akun penting

Catatan: Model serangan di dunia nyata dapat bervariasi; hindari penggunaan kembali kata sandi dan aktifkan autentikasi multifaktor (MFA).

Cara Penggunaan

  • Panjang dan set karakter (Huruf Kecil/Besar/Angka/Simbol); aktifkan hindari karakter serupa dan wajib sertakan setiap jenis jika diperlukan
  • Untuk kontrol lebih detail: kecualikan karakter tertentu atau grup karakter, atau pilih subset simbol
  • Pilih berapa banyak kata sandi yang ingin Anda hasilkan, lalu klik Hasilkan; hasil batch akan diduplikasi secara otomatis dan dapat disalin sekaligus
  • Untuk memvalidasi kata sandi yang ada, gunakan Penguji Kebijakan; untuk frasa sandi yang mudah diingat, gunakan Pembuat Frasa Sandi

Fitur

  • Sumber acak yang aman secara kriptografi (Web Crypto)
  • Set karakter dan grup simbol yang dapat dikonfigurasi
  • Penyaringan karakter serupa dan pengecualian khusus
  • Pembuatan batch 1-100 kata sandi, selalu unik
  • Metrik kekuatan dan entropi
  • Penguji Kebijakan dan Pembuat Frasa Sandi
  • Contoh kode multibahasa
  • Salin satu klik (satu atau semua)

Contoh Pembuatan Kata Sandi

Kuat
Panjang 24, terdiri dari huruf besar, huruf kecil, digit, dan simbol
Mudah Diingat
Panjang 16, terdiri dari huruf besar, huruf kecil, dan digit; menghindari karakter serupa

Basis Pengetahuan Kata Sandi

1) Kekuatan Kata Sandi dan Entropi
  • Entropi ≈ log2(ukuran set karakter) × panjang; panjang biasanya memberikan kontribusi lebih besar
  • Target yang disarankan: Akun umum ≥ 80 bit; Akun hak akses tinggi/keuangan ≥ 110 bit
  • Set karakter yang lebih besar + panjang lebih lama → ketahanan lebih tinggi terhadap tebakan
2) Panjang vs. Kompleksitas
  • Menambahkan simbol secara acak kurang efektif daripada menambah panjang
  • Hindari pola yang dapat diprediksi (misal: selalu 'Huruf kapital di awal + angka di akhir!')
  • Prioritaskan panjang yang cukup, lalu tingkatkan keragaman karakter secara moderat
3) Kesalahan Umum dan Pola Buruk
  • Urutan keyboard (misal: qwerty), blok berulang, tanggal lahir/tahun mudah menjadi target aturan pemecah kata sandi
  • Menggunakan 'kata sandi root + akhiran situs' menciptakan variasi penggunaan ulang, memusatkan risiko dan membuat kata sandi lebih mudah ditebak
  • Jangan pernah menggunakan kata sandi yang sama di banyak situs web
4) Rekomendasi Pengelolaan Kata Sandi
  • Gunakan pengelola kata sandi; pastikan kata sandi unik per situs; aktifkan MFA untuk akun penting
  • Hindari mengirim kata sandi dalam teks biasa melalui saluran publik; gunakan frasa sandi yang 'mudah diucapkan' jika diperlukan
  • Segera ganti dan buat kata sandi unik jika terdeteksi kebocoran atau penggunaan ulang
5) Pedoman Frasa Sandi
  • Kombinasi 4–6 kata acak biasanya kuat dan mudah diingat
  • Campurkan pemisah, gunakan huruf awal besar, dan sisipkan angka untuk meningkatkan kekuatan serta keterbacaan
  • Jangan langsung menggabungkan frasa umum, lirik lagu, atau kutipan terkenal

Praktik Terbaik Keamanan Kata Sandi

Praktik Terbaik
  • Gunakan panjang yang cukup: minimal 16 karakter untuk akun umum, 24+ untuk akun krusial
  • Untuk kemudahan diingat, prioritaskan frasa sandi; gunakan pengelola sandi untuk menyimpan sandi acak berkekuatan tinggi
  • Aktifkan autentikasi multi-faktor (MFA) jika memungkinkan
  • Jangan pernah menggunakan kembali sandi di berbagai situs—setiap akun harus memiliki sandi unik
Entropi dan Kekuatan

Entropi mengukur ketidakprediktabilitas berdasarkan panjang dan ukuran set karakter—semakin banyak bit entropi, biasanya semakin kuat sandinya.

  • Prioritaskan peningkatan panjang untuk mendapatkan peningkatan kekuatan maksimal
  • Gunakan beberapa set karakter jika memungkinkan
  • Mengecualikan terlalu banyak karakter mengurangi kumpulan karakter dan melemahkan kekuatan
Kebijakan dan Rotasi
  • Lebih baik gunakan persyaratan panjang dan daftar hitam sandi umum yang bocor daripada aturan komposisi yang rumit
  • Jangan melakukan rotasi wajib yang sering; ganti sandi hanya saat terdeteksi pelanggaran atau risiko
  • Gunakan daftar sandi yang dikompromikan untuk memblokir sandi umum atau yang bocor
Frasa Sandi
  • Gunakan 4–6 kata acak yang digabungkan dengan pemisah, contoh: danau-WORTEL-planet_7
  • Jangan gunakan kutipan terkenal, lirik lagu, atau frasa umum lainnya; keacakan lebih penting daripada "kelincahan"
  • Untuk akun krusial, gunakan pengelola sandi untuk menyimpan sandi acak dengan entropi yang benar-benar tinggi
Tips Pengaturan Pembuatan
  • "Membutuhkan setiap set yang dipilih" memastikan setidaknya satu karakter dari setiap kategori yang dipilih muncul
  • "Hindari karakter serupa" meningkatkan keterbacaan namun sedikit mengurangi ukuran kumpulan karakter
  • Simbol dapat dibatasi pada subset yang didukung oleh sistem target
Penyimpanan di Server
  • Jangan pernah menyimpan sandi dalam teks biasa; gunakan hashing kuat (Argon2id/PBKDF2/Bcrypt) dengan salt
  • Konfigurasi parameter (memori/waktu/biaya) dengan tepat; pertimbangkan untuk menggunakan pepper jika diperlukan
  • Batasi jumlah percobaan login dan pantau kegagalan; terapkan CAPTCHA atau verifikasi perangkat saat terjadi serangan
Multi-Faktor & Pemulihan
  • Lebih baik gunakan TOTP atau kunci perangkat; hindari SMS jika memungkinkan
  • Alur pemulihan yang aman dengan verifikasi multi-faktor atau email dan terapkan periode tunggu
  • Berikan kode pemulihan cadangan dan dorong pengguna untuk menyimpannya dengan aman
Perlindungan Brute Force
  • Terapkan penundaan progresif atau penguncian dengan skor risiko IP/perangkat
  • Terapkan WAF dan pembatasan laju pada API dan formulir login
  • Pantau serangan credential stuffing dan dorong pengguna untuk menggunakan sandi unik
Penyimpanan & Penanganan Lokal
  • Gunakan pengelola sandi terpercaya untuk penyimpanan dan pengisian otomatis
  • Jangan pernah membagikan kata sandi dalam teks biasa melalui obrolan atau email; gunakan alat manajemen rahasia untuk tim
  • Jika menuliskan kata sandi secara offline, pastikan keamanan fisiknya
Penafian: Alat ini menghasilkan kata sandi secara lokal di peramban Anda menggunakan Web Crypto; tidak ada data yang dikirim ke server mana pun.

Cara Membuat Kata Sandi melalui Bahasa Pemrograman

JavaScript (Web Crypto)
function randomPassword(length = 16, sets = {lower:true, upper:true, digits:true, symbols:true}) {
  const pools = {
    lower: 'abcdefghijklmnopqrstuvwxyz',
    upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
    digits: '0123456789',
    symbols: '!@#$%^&*+-=_~`|/?()[]{}<>,.;:\'\"'
  };
  let pool = '';
  for (const k of Object.keys(sets)) if (sets[k]) pool += pools[k];
  if (!pool) throw new Error('No charset');
  // Rejection sampling removes modulo bias
  const limit = Math.floor(0x100000000 / pool.length) * pool.length;
  const buf = new Uint32Array(1);
  let out = '';
  for (let i = 0; i < length; i++) {
    do { crypto.getRandomValues(buf); } while (buf[0] >= limit);
    out += pool[buf[0] % pool.length];
  }
  return out;
}
Python (secrets)
import secrets

def random_password(length=16, lower=True, upper=True, digits=True, symbols=True):
    pools = {
        'lower': 'abcdefghijklmnopqrstuvwxyz',
        'upper': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
        'digits': '0123456789',
        'symbols': '!@#$%^&*+-=_~`|/?()[]{}<>,.;:\'\"'
    }
    pool = ''.join(v for k, v in pools.items() if locals()[k])
    if not pool:
        raise ValueError('No charset')
    return ''.join(secrets.choice(pool) for _ in range(length))
PHP (random_int)
function random_password($length = 16, $sets = ['lower'=>true,'upper'=>true,'digits'=>true,'symbols'=>true]) {
    $pools = [
        'lower' => 'abcdefghijklmnopqrstuvwxyz',
        'upper' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
        'digits' => '0123456789',
        'symbols' => '!@#$%^&*+-=_~`|/?()[]{}<>,.;:\'\"'
    ];
    $pool = '';
    foreach ($sets as $k => $on) if ($on) $pool .= $pools[$k];
    if ($pool === '') throw new Exception('No charset');
    $out = '';
    for ($i = 0; $i < $length; $i++) {
        $out .= $pool[random_int(0, strlen($pool)-1)];
    }
    return $out;
}
Go (crypto/rand)
package main

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

func RandomPassword(length int, pool string) (string, error) {
  out := make([]byte, length)
  for i := 0; i < length; i++ {
    nBig, err := rand.Int(rand.Reader, big.NewInt(int64(len(pool))))
    if err != nil { return "", err }
    out[i] = pool[nBig.Int64()]
  }
  return string(out), nil
}
Java (SecureRandom)
import java.security.SecureRandom;

public class Pw {
  static final String POOL = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*+-=_~`|/?()[]{}<>,.;:'\"";
  static final SecureRandom SR = new SecureRandom();
  static String randomPassword(int length) {
    StringBuilder sb = new StringBuilder(length);
    for (int i = 0; i < length; i++) {
      int idx = SR.nextInt(POOL.length());
      sb.append(POOL.charAt(idx));
    }
    return sb.toString();
  }
}
C# (.NET RandomNumberGenerator)
using System;
using System.Security.Cryptography;

public static class Pw {
  public static string RandomPassword(int length, string pool) {
    // GetInt32 draws an unbiased value in [0, pool.Length)
    var chars = new char[length];
    for (int i = 0; i < length; i++) {
      chars[i] = pool[RandomNumberGenerator.GetInt32(pool.Length)];
    }
    return new string(chars);
  }
}
Rust (rand + getrandom)
use rand::rngs::OsRng;
use rand::Rng;

fn random_password(length: usize, pool: &str) -> String {
    // gen_range is uniform, so there is no modulo bias
    let chars: Vec = pool.chars().collect();
    (0..length)
        .map(|_| chars[OsRng.gen_range(0..chars.len())])
        .collect()
}

fn main() {
    let pool = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*+-=_~`|/?()[]{}<>,.;:'\"";
    let pw = random_password(16, pool);
    println!("{}", pw);
}