Wachtwoordgenerator en -validator

Professionele tool voor het genereren en valideren van wachtwoorden die sterke wachtwoorden en memorabele wachtzinnen creëert, met ondersteuning voor batchgeneratie, uniekgarantie, sterktebeoordeling en beleidsvalidatie. Functies zijn onder andere cryptografisch veilige willekeurige bron, configureerbare tekensets, filtering van vergelijkbare tekens, statistieken voor deduplicatie in batches en kopiëren met één klik. Bevat meertalige codevoorbeelden, wachtwoordkennisbank, beste beveiligingspraktijken en tools voor beleidstesten. Alle bewerkingen worden lokaal in uw browser uitgevoerd, wat privacy en beveiliging garandeert.

Wachtwoordgenerator

Symboolgroepen selecteren
Tip: Sluit tekens uit door groepen te selecteren of rechtstreeks op individuele tekens te klikken.
Resultaat

Wachtwoordbeleid-tester

Resultaten
  • Lengte
  • Kleine letters
  • Hoofdletters
  • Cijfers
  • Symbolen
  • Opeenvolgend
  • Herhalingen
  • Geblokkeerde lijst
Alle controles worden lokaal in uw browser uitgevoerd.

Wachtzin-generator

Woorden worden gelijkmatig gekozen met cryptografisch veilige willekeurigheid (Web Crypto) uit een lijst van 1271 ondubbelzinnige woorden; 6 woorden geven ongeveer 62 bits entropie — gebruik 8 woorden voor meer sterkte.

Wachtwoord Hashing Cheat Sheet

Argon2id
  • Gebruik Argon2id met redelijke geheugen-hard parameters
  • Tijd ≥ 2 passes, geheugen ≥ 64MB (afstemmen op omgeving)
  • Sla een unieke salt per gebruiker op; gebruik eventueel een pepper op applicatielaag
PBKDF2
  • Kies SHA-256 of SHA-512 met iteraties ≥ 210k (afstemmen indien nodig)
  • Gebruik een unieke salt voor elke hash; ondersteun parameterupgrades
  • Migreer naar parameters met hogere kosten bij de volgende aanmelding van de gebruiker
BCrypt
  • Stel de kost in op 10–14, afhankelijk van servermogelijkheden
  • Vermijd afkortingsproblemen; hash het volledige wachtwoord
  • Implementeer snelheidsbeperking en monitoring op authenticatie-eindpunten
Referentie: NIST SP 800-63B, OWASP ASVS. Parameters moeten aansluiten bij hardwaremogelijkheden en SLO's.

Wachtwoordsterkte-evaluator

De sterkte wordt benaderd door entropie: entropie = log2(grootte tekenset) × lengte. Een grotere tekenset en langere lengte verbeteren de weerstand tegen gokken.

  • Zwak: < 50 bits —— Alleen geschikt voor eenmalige gebruiksscenario's of scenario's met lage waarde
  • Matig: 50–80 bits —— Acceptabel voor risicovolle scenario's
  • Sterk: 80–110 bits —— Aanbevolen standaarddoel
  • Uitstekend: > 110 bits —— Aanbevolen voor beheerder- of kritieke accounts

Let op: Aanvalsmodellen in de praktijk kunnen verschillen; vermijd hergebruik van wachtwoorden en schakel multi-factor authenticatie (MFA) in.

Gebruiksaanwijzing

  • Selecteer lengte en tekenset (Kleine letters/Hoofdletters/Cijfers/Symbolen); schakel eventueel 'Vergelijkbare tekens vermijden' en 'Elk type vereisen' in
  • Voor meer controle: sluit specifieke tekens of tekengroepen uit, of kies subsets van symbolen
  • Kies hoeveel wachtwoorden je wilt genereren en klik vervolgens op Genereren; batchresultaten worden automatisch gededupliceerd en kunnen in één keer worden gekopieerd
  • Gebruik de Beleidstester om bestaande wachtwoorden te valideren; voor memorabele wachtzinnen gebruikt u de Wachtzingenerator

Functies

  • Cryptografisch veilige willekeurige bron (Web Crypto)
  • Configureerbare tekensets en symboolgroepen
  • Filtering van vergelijkbare tekens en aangepaste uitsluitingen
  • Batchgeneratie van 1-100 wachtwoorden, altijd uniek
  • Sterkte- en entropiemetingen
  • Beleidstester en Wachtzingenerator
  • Meertalige codevoorbeelden
  • Kopiëren met één klik (enkel of alles)

Voorbeelden van wachtwoordgeneratie

Sterk
Lengte 24, inclusief hoofdletters, kleine letters, cijfers en symbolen
Memorabel
Lengte 16, inclusief hoofdletters, kleine letters en cijfers; vermijdt vergelijkbare tekens

Wachtwoordkennisbank

1) Wachtwoordsterkte en entropie
  • Entropie ≈ log2(tekensetgrootte) × lengte; lengte draagt meestal meer bij
  • Aanbevolen streefwaarden: Algemene accounts ≥ 80 bits; Accounts met hoge rechten/financiële accounts ≥ 110 bits
  • Grotere tekenset + langere lengte → grotere weerstand tegen raden
2) Lengte versus complexiteit
  • Het blind toevoegen van symbolen is minder effectief dan het vergroten van de lengte
  • Vermijd voorspelbare patronen (bv. altijd 'Hoofdletter eerste + cijfer aan het eind!' )
  • Geef prioriteit aan voldoende lengte, daarna matige toename van tekendiversiteit
3) Veelgemaakte fouten en anti-patronen
  • Toetsenvolgorden (bv. qwerty), herhalende blokken, verjaardagen/jaren worden snel getarget door regels
  • Gebruik van 'root wachtwoord + sitesuffixed' zorgt voor variantgebruik, concentreert risico en maakt wachtwoorden makkelijker te raden
  • Gebruik nooit hetzelfde wachtwoord op meerdere websites
4) Aanbevelingen voor wachtwoordbeheer
  • Gebruik een wachtwoordmanager; zorg voor unieke wachtwoorden per site; schakel MFA in voor kritieke accounts
  • Vermijd het versturen van wachtwoorden in platte tekst via openbare kanalen; gebruik 'uitspreekbare' wachtzinnen indien nodig
  • Wijzig onmiddellijk en maak wachtwoorden uniek als lekken of hergebruik wordt gedetecteerd
5) Richtsnoeren voor wachtzinnen
  • Combinaties van 4–6 willekeurige woorden zijn meestal sterk en memorabel
  • Gebruik scheidingstekens, beginletters met hoofdletters en cijfers om de sterkte en leesbaarheid te verhogen
  • Vermijd het direct aaneenrijgen van veelgebruikte zinnen, songteksten of bekende citaten

Beste praktijken voor wachtwoordbeveiliging

Beste praktijken
  • Gebruik voldoende lengte: 16+ tekens voor gewone accounts, 24+ voor kritieke accounts
  • Kies wachtwoordzinnen voor het geheugen; gebruik een wachtwoordbeheerder om willekeurige, hoge sterkte wachtwoorden op te slaan
  • Schakel indien mogelijk multi-factor authenticatie (MFA) in
  • Herhaal nooit wachtwoorden op verschillende sites; elk account heeft een uniek wachtwoord
Entropie en sterkte

Entropie meet de onvoorspelbaarheid op basis van lengte en de omvang van het tekenset. Hoe hoger het entropie bits, hoe sterker het wachtwoord meestal is.

  • Geef prioriteit aan het verhogen van de lengte voor de grootste sterktewinst
  • Gebruik meerdere tekensets indien mogelijk
  • Als je te veel tekens uitsluit, wordt de tekenset kleiner en neemt de sterkte af
Beleid en rotatie
  • Geef de voorkeur aan lengtevereisten en zwarte lijsten van veelgebruikte/gelekte wachtwoorden boven complexe samenstellingsregels
  • Vermijd frequente verplichte rotaties; wijzig alleen wanneer een inbreuk of risico wordt gedetecteerd
  • Gebruik lijsten van gecompromitteerde wachtwoorden om veelgebruikte of gelekte wachtwoorden te blokkeren
Wachtwoordzinnen
  • Gebruik 4–6 willekeurige woorden verbonden door scheidingstekens, bijvoorbeeld: meer-KROKET-planeet_7
  • Vermijd bekende citaten, songteksten of andere veelgebruikte zinnen; willekeurigheid is belangrijker dan 'slimheid'
  • Gebruik voor kritieke accounts een wachtwoordbeheerder om echt hoge-entropie willekeurige wachtwoorden op te slaan
Tips voor instellingen genereren
  • 'Vereist elk gekozen set' zorgt ervoor dat er minimaal één teken uit elke gekozen categorie verschijnt
  • 'Vergelijkbare vermijden' verbetert de leesbaarheid, maar verkleint de tekenset iets
  • Symbolen kunnen beperkt worden tot een subset die door het doelsysteem wordt ondersteund
Opslag aan serverzijde
  • Sla nooit wachtwoorden als plaintext op; gebruik sterke hashing (Argon2id/PBKDF2/Bcrypt) met een zout
  • Configureer parameters (geheugen/tijd/kosten) op de juiste manier; overweeg gebruik van een peper indien nodig
  • Beperk het aantal pogingen om in te loggen en mislukte pogingen te bewaken; pas CAPTCHA of apparaatverificatie toe tijdens aanvallen
Multi-factor en herstel
  • Geef de voorkeur aan TOTP of hardware-sleutels; vermijd SMS indien mogelijk
  • Beveilig herstelprocedures met multi-factor of e-mailverificatie en handhaaf wachttijden
  • Geef back-up herstelcodes en moedig gebruikers aan deze veilig op te slaan
Bescherming tegen brute force
  • Implementeer progressieve vertragingen of vergrendelingen met IP/apparaat risicoscores
  • Pas WAF's en snelheidsbeperking toe op API's en aanmeldformulieren
  • Houd credential stuffing in de gaten en moedig gebruikers aan unieke wachtwoorden te gebruiken
Lokale opslag en verwerking
  • Gebruik een gerenommeerde wachtwoordbeheerder voor opslag en automatisch invullen
  • Deel nooit wachtwoorden in plaintext via chat of e-mail; gebruik geheimenbeheertools voor teams
  • Als u wachtwoorden offline opschrijft, zorg dan voor fysieke beveiliging
Disclaimer: Deze tool genereert wachtwoorden lokaal in uw browser met Web Crypto; er worden geen gegevens verzonden naar een server.

Wachtwoorden Genereren via Programmeertalen

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