Alat Penjana dan Pengesah Kata Laluan

Alat penjana dan pengesah kata laluan profesional yang mencipta kata laluan kukuh dan frasa laluan yang mudah diingati dengan sokongan penjanaan kelompok, jaminan keunikan, penilaian kekuatan, dan pengesahan dasar. Ciri termasuk sumber rawak selamat secara kriptografi, set aksara boleh dikonfigurasi, penyaringan aksara serupa, statistik penyingkiran pendua kelompok, dan fungsi salin satu klik. Termasuk contoh kod pelbagai bahasa, pangkalan pengetahuan kata laluan, amalan terbaik keselamatan, dan alat ujian dasar. Semua operasi dilakukan secara setempat dalam pelayar anda, memastikan privasi dan keselamatan.

Penjana Kata Laluan

Pilih Kumpulan Simbol
Petua: Kecualikan aksara dengan memilih kumpulan atau mengklik terus pada aksara individu.
Keputusan

Penguji Dasar Kata Laluan

Keputusan
  • Panjang
  • Huruf kecil
  • Huruf besar
  • Digit
  • Simbol
  • Turutan
  • Pengulangan
  • Senarai Sekatan
Semua semakan dilakukan secara tempatan dalam pelayar anda.

Penjana Frasa Kata

Perkataan dipilih secara seragam dengan rawak kriptografi yang selamat (Web Crypto) daripada senarai 1271 perkataan yang tidak kabur; 6 perkataan memberikan kira-kira 62 bit entropi — gunakan 8 perkataan untuk kekuatan lebih.

Lembaran Tip Khas Penghashing Kata Laluan

Argon2id
  • Gunakan Argon2id dengan parameter tumpuan memori yang munasabah
  • Masa ≥ 2 pusingan, memori ≥ 64MB (sesuaikan mengikut persekitaran)
  • Simpan garam unik bagi setiap pengguna; secara pilihan gunakan pepper pada lapisan aplikasi
PBKDF2
  • Pilih SHA-256 atau SHA-512 dengan lelaran ≥ 210k (sesuaikan mengikut keperluan)
  • Gunakan garam unik bagi setiap hash; sokong peningkatan parameter
  • Beralih ke parameter kosong lebih tinggi semasa log masuk berikutnya pengguna
BCrypt
  • Tetapkan kos antara 10–14, bergantung pada keupayaan pelayan
  • Elakkan isu pemotongan; hash kata laluan penuh
  • Laksanakan pengehadan kadar dan pemantauan pada titik pengesahan
Rujukan: NIST SP 800-63B, OWASP ASVS. Parameter harus selaras dengan keupayaan perkakasan dan SLO.

Penilai Kekuatan Kata Laluan

Kekuatan dianggarkan melalui entropi: entropi = log2(ukuran kumpulan karakter) × panjang. Kumpulan karakter yang lebih besar dan panjang yang lebih baik meningkatkan ketahanan terhadap tekaan.

  • Lemah: < 50 bit —— Hanya sesuai untuk senario sekali guna atau nilai rendah
  • Sederhana: 50–80 bit —— Boleh diterima untuk senario berisiko rendah
  • Kuat: 80–110 bit —— Sasaran lalai yang disyorkan
  • Cemerlang: > 110 bit —— Disyorkan untuk akaun pentadbir atau kritikal

Nota: Model serangan dunia sebenar mungkin berbeza; elakkan menggunakan semula kata laluan dan aktifkan pengesahan berbilang faktor (MFA).

Cara Penggunaan

  • Panjang dan set aksara (Huruf Kecil/Huruf Besar/Nombor/Simbol); pilih pilihan Elak Aksara Serupa dan Perlu Setiap jika berkenaan
  • Untuk kawalan lebih tepat: kecualikan aksara atau kumpulan aksara tertentu, atau pilih subset simbol
  • Pilih bilangan kata laluan yang ingin dijana, kemudian klik Jana; hasil batch akan ditanpa duplikasi secara automatik dan boleh disalin sekaligus
  • Untuk mengesahkan kata laluan sedia ada, gunakan Penguji Dasar; untuk frasa laluan mudah diingati, gunakan Penjana Frasa Laluan

Ciri

  • Sumber rawak selamat secara kriptografi (Web Crypto)
  • Set aksara dan kumpulan simbol boleh dikonfigurasi
  • Penyaringan aksara serupa dan pengecualian khusus
  • Penjanaan pukal 1-100 kata laluan, selalunya unik
  • Metrik kekuatan dan entropi
  • Penguji Dasar dan Penjana Frasa Laluan
  • Contoh kod pelbagai bahasa
  • Salin satu klik (tunggal atau semua)

Contoh Penjanaan Kata Laluan

Kukuh
Panjang 24, termasuk huruf besar, huruf kecil, digit, dan simbol
Mudah Diingati
Panjang 16, termasuk huruf besar, huruf kecil, dan digit; elakkan aksara serupa

Pangkalan Pengetahuan Kata Laluan

1) Kekuatan Kata Laluan dan Entropi
  • Entropi ≈ log2(ukuran set aksara) × panjang; panjang biasanya menyumbang lebih besar
  • Sasaran disyorkan: Akaun umum ≥ 80 bit; Akaun keistimewaan tinggi/kewangan ≥ 110 bit
  • Set aksara lebih besar + panjang lebih lama → rintangan lebih tinggi terhadap tekaan
2) Panjang lawan Kerumitan
  • Menambah simbol secara membabi buta kurang berkesan daripada menambah panjang
  • Elak corak boleh diramalkan (contoh: selalu 'Huruf besar permulaan + nombor akhir!')
  • Keutamaan diberikan kepada panjang yang mencukupi, kemudian tingkatkan kepelbagaian aksara secara sederhana
3) Kesilapan Umum dan Anti-Corak
  • Turutan papan kekunci (contoh: qwerty), blok berulang, hari lahir/tahun mudah disasarkan oleh peraturan
  • Penggunaan 'kata laluan induk + akhiran laman web' mencipta variasi penggunaan semula, menumpukan risiko dan menjadikan kata laluan lebih mudah diteka
  • Jangan pernah guna kata laluan sama merentas pelbagai laman web
4) Cadangan Pengurusan Kata Laluan
  • Guru kata laluan; pastikan kata laluan unik untuk setiap laman web; aktifkan MFA untuk akaun kritikal
  • Elak menghantar kata laluan dalam teks biasa melalui saluran awam; gunakan frasa laluan 'boleh diucapkan' jika perlu
  • Tukar serta-merta dan jadikan kata laluan unik jika kebocoran atau penggunaan semula dikesan
5) Panduan Frasa Laluan
  • Kombinasi 4–6 perkataan rawak biasanya kukuh dan mudah diingati
  • Campurkan pemisah, modalkan huruf pertama, dan sisipkan nomor untuk meningkatkan kekuatan dan kebolehbacaan
  • Elakkan menyambungkan frasa biasa, lirik lagu, atau petikan terkenal secara langsung

Amalan Terbaik Keselamatan Kata Laluan

Amalan Terbaik
  • Gunakan panjang yang mencukupi: 16+ aksara untuk akaun umum, 24+ untuk akaun kritikal
  • Untuk kemudahan ingat, utamakan frasa laluan; gunakan pengurus kata laluan untuk menyimpan kata laluan rawak berkekuatan tinggi
  • Aktifkan pengesahan pelbagai faktor (MFA) apabila memungkini
  • Jangan sekali pakai kata laluan merentas laman web – setiap akaun harus mempunyai kata laluan unik
Entropi dan Kekuatan

Entropi mengukur sifat tidak dapat diram berdasarkan panjang dan saiz set aksara – semakin tinggi bit entropi, semakin kuat kata laluan biasanya.

  • Utamakan peningkatan panjang untuk peningkatan kekuatan maksimum
  • Gunakan pelbagai set aksara apabila memungkini
  • Menghalau terlalu banyak aksara mengurangkan kolam aksara dan melemahkan kekuatan
Dasar dan Penggilangan Semula
  • Lebih utamakan syarat panjang dan senarai hitam kata laluan biasa/terbocor berbanding peraturan komposisi yang kompleks
  • Elakkan penggilangan semula wajib yang kerap; ubah hanya apabila pencerobohan atau risiko dikesan
  • Gunakan senarai kata laluan terkompromi untuk menyekat kata laluan yang biasa digunakan atau terbocor
Frasa Laluan
  • Gunakan 4–6 perkataan rawak yang dicantum dengan pemisah, contohnya, tasik-MENTOL-bumi_7
  • Elakkan petikan terkenal, lirik lagu, atau frasa biasa yang lain; sifat rawak adalah lebih penting berbanding 'kepintaran'
  • Untuk akaun kritikal, gunakan pengurus kata laluan untuk menyimpan kata laluan rawak berentropi benar-benar tinggi
Petikan Tetapan Penjanaan
  • "Tetapkan setiap set yang dipilih" memastikan sekurang-kurangnya satu aksara dari setiap kategori yang dipilih muncul
  • "Elakkan persamaan" meningkatkan kebolehbacaan tetapi sedikit mengurangkan saiz kolam aksara
  • Simbol boleh dihadkan kepada subset yang disokong oleh sistem sasaran
Simpanan Belakang Pelayan
  • Jangan sekali simpan kata laluan dalam bentuk teks biasa; gunakan pengodian kuat (Argon2id/PBKDF2/Bcrypt) dengan garam
  • Konfigurasikan parameter (memori/masa/kos) dengan sewajarnya; pertimbangkan menggunakan lada apabila perlu
  • Batas kadar cubaan log masuk dan pantau kegagalan; gunakan CAPTCHA atau pengesahan peranti semasa serangan
Pelbagai Faktor & Pemulihan
  • Lebih utamakan TOTP atau kunci perkakasan; elakkan SMS apabila memungkini
  • Selamatkan aliran pemulihan dengan pengesahan pelbagai faktor atau e-mel dan kuasakan tempoh jeda
  • Sediakan kod pemulihan sandaran dan galakkan pengguna menyimpannya dengan selamat
Perlindungan Kekerasan Kasar
  • Laksanakan kelewatan progresif atau penguncian dengan pengmarkaan risiko IP/peranti
  • Gunakan WAF dan had kadar pada API dan borang log masuk
  • Pantau pemadat kelayakan dan galakkan pengguna mengamalkan kata laluan unik
Simpanan & Pengendalian Tempatan
  • Gunakan pengurus kata laluan terkenal untuk simpanan dan pengisian automatik
  • Jangan sekali kongsi kata laluan dalam teks biasa melalui chat atau e-mel; gunakan alat pengurusan rahsia untuk pasukan
  • Jika menulis kata laluan secara luar talian, pastikan keselamatan fizikal
Penafian: Alat ini menjana kata laluan secara tempatan dalam pelayar anda menggunakan Web Crypto; tiada data dihantar ke mana-mana pelayan.

Cara Menjana Kata Laluan Melalui Bahasa Pengaturcaraan

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);
}