Password Generator

Genereer sterke willekeurige wachtwoorden met instelbare lengte en tekensets

Lengte20
Aantal5

Wat is een Password Generator?

Een wachtwoordgenerator maakt willekeurige tekenreeksen die worden gebruikt als wachtwoorden voor gebruikersaccounts, API-sleutels, databasereferenties en versleutelingsgeheimen. In tegenstelling tot door mensen gekozen wachtwoorden putten gegenereerde wachtwoorden uit de volledige ruimte van mogelijke tekencombinaties, waardoor ze bestand zijn tegen woordenboekaanvallen en patroongebaseerd raden. Dit hulpmiddel genereert sterke willekeurige wachtwoorden online met behulp van de ingebouwde cryptografische willekeurige nummergenerator van je browser.

De sterkte van een wachtwoord hangt af van twee factoren: lengte en tekendiversiteit. Een wachtwoord van 20 tekens met hoofdletters, kleine letters, cijfers en symbolen heeft ongeveer 131 bits entropie. Op dat niveau zou een brute-force-aanval die één biljoen gissingen per seconde test langer duren dan de leeftijd van het universum om elke combinatie te proberen. De berekening is eenvoudig: entropie = lengte × log2(tekensetgrootte).

Standaarden zoals NIST SP 800-63B bevelen wachtwoorden aan van minimaal 8 tekens zonder bovenlimiet die door de verificateur wordt afgedwongen, en ontmoedigen verplichte samenstellingsregels zoals het vereisen van precies één symbool, waarbij langere wachtzinnen de voorkeur krijgen. Voor machine-naar-machine-referenties en serviceaccounts is 20 of meer willekeurige tekens uit een volledige tekenset de geaccepteerde basislijn in de meeste beveiligingsframeworks en complianceregimes.

Waarom een Password Generator gebruiken?

Mensen zijn slechte willekeurige nummergeneratoren. We hergebruiken wachtwoorden, kiezen woordenboekwoorden, vervangen letters door voorspelbare patronen (@ voor a, 3 voor e) en kiezen standaard voor korte tekenreeksen. Een wachtwoordgenerator verwijdert menselijke vooringenomenheid uit het proces.

🔐
Privacy-first generatie
Wachtwoorden worden volledig in je browser gegenereerd met behulp van de Web Crypto API. Er verlaten geen tekens je apparaat, er wordt niets gelogd en er worden geen netwerkverzoeken gedaan tijdens het genereren.
Directe batch-uitvoer
Genereer tot 20 wachtwoorden tegelijk met één klik. Kopieer individuele wachtwoorden of alle wachtwoorden tegelijk voor provisioningscripts of referentiekluis.
🛡️
Geen account vereist
Geen registratie, geen e-mail, geen cookies die je gegenereerde wachtwoorden bijhouden. Open de pagina, stel je opties in en genereer.
🎛️
Volledige controle over de tekenset
Schakel hoofdletters, kleine letters, cijfers en symbolen onafhankelijk in of uit. Stel de lengte in van 4 tot 128 tekens om aan de vereisten van elk systeem of beleid te voldoen.

Toepassingen van de Password Generator

Frontend-ontwikkeling
Genereer testwachtwoorden voor formuliervalidatie, invoerlengtetests en ontwikkeling van authenticatiestromen. Controleer of je inlogformulieren wachtwoorden van 128 tekens en speciale tekens correct verwerken.
Backend & DevOps
Maak databasereferenties, API-tokens en serviceaccountwachtwoorden tijdens het opzetten van de infrastructuur. Gebruik batchgeneratie om meerdere services in één sessie te provisioneren.
Security Engineering
Genereer geheimen met hoge entropie voor versleutelingssleutels, HMAC-ondertekening en JWT-geheimrotatie. Stel de lengte in op 64+ tekens voor geheimen die meer dan 256 bits entropie moeten hebben.
QA & Penetratietesten
Test de handhaving van wachtwoordbeleid door tekenreeksen te genereren die specifieke tekensets wel of niet bevatten. Controleer of systemen wachtwoorden onder de minimumlengte of -complexiteit correct weigeren.
Data Engineering
Genereer willekeurige referenties voor testomgevingen, stagingdatabases en CI/CD-pipelinegeheimen. Vermijd het hergebruik van productiewachtwoorden in testdata door per omgeving nieuwe te genereren.
Beveiliging van persoonlijke accounts
Maak unieke wachtwoorden voor elk online account. Combineer deze generator met een wachtwoordbeheerder om referenties op te slaan die je niet hoeft te onthouden.

Referentietabel Wachtwoordentropie

Entropie meet hoe onvoorspelbaar een wachtwoord is. Het wordt berekend als log2(tekensetgrootte ^ lengte). Hogere entropie betekent meer mogelijke combinaties die een aanvaller moet doorzoeken. NIST en OWASP bevelen minimaal 80 bits entropie aan voor beveiligingsgevoelige toepassingen.

LengteTekensetEntropieBrute-force-tijd
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

Kraaktijden gaan uit van 1 biljoen gissingen per seconde (offline aanval met moderne GPU's). Online aanvallen met snelheidsbeperking zijn meerdere ordes van grootte langzamer.

CSPRNG vs Math.random() voor wachtwoordgeneratie

De bron van willekeurigheid is net zo belangrijk als de wachtwoordlengte. Een wachtwoord gegenereerd met een voorspelbare willekeurige nummergenerator kan worden gereconstrueerd door een aanvaller die het algoritme en de seed-toestand kent. Dit hulpmiddel gebruikt crypto.getRandomValues(), een cryptografisch veilige pseudowillekeurige nummergenerator (CSPRNG) die is ingebouwd in elke moderne browser.

crypto.getRandomValues()
Gebruikt entropiebronnen van het besturingssysteem (hardware RNG, interrupttiming, enz.). De uitvoer is onvoorspelbaar, zelfs als een aanvaller alle eerdere uitvoer kent. Vereist door de W3C Web Crypto-specificatie voor beveiligingsgevoelige bewerkingen.
Math.random()
Gebruikt een deterministisch algoritme gevoed vanuit een beperkte entropiepool. De uitvoer kan worden voorspeld als de seed-toestand bekend is. De ECMAScript-specificatie stelt expliciet dat Math.random() geen cryptografisch veilige willekeurige getallen levert. Gebruik het nooit voor wachtwoordgeneratie.

Codevoorbeelden

Genereer wachtwoorden programmatisch in verschillende programmeertalen. Elk onderstaand voorbeeld gebruikt een cryptografisch veilige willekeurige bron, niet Math.random() of vergelijkbare zwakke PRNG's.

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"
}

Veelgestelde vragen

Hoe lang moet een wachtwoord zijn?
Voor gebruikersaccounts biedt een wachtwoord van 16 tekens uit een gemengde tekenset meer dan 100 bits entropie, wat voldoende is voor alle huidige dreigingsmodellen. Voor machinegeheimen (API-sleutels, versleutelingssleutels) gebruik je 32 tekens of meer. NIST SP 800-63B stelt een minimum van 8 tekens maar raadt systemen aan om veel langere wachtwoorden zonder afkapping toe te staan.
Is deze wachtwoordgenerator veilig te gebruiken?
Ja. Wachtwoorden worden in je browser gegenereerd met de Web Crypto API (crypto.getRandomValues). Er worden geen gegevens naar een server gestuurd. Je kunt dit verifiëren door het netwerktabblad van je browser te openen en te zien dat er geen verzoeken worden gedaan wanneer je op Genereren klikt. De broncode is client-side JavaScript, zichtbaar in de ontwikkelaarstools van je browser.
Wat is wachtwoordentropie?
Entropie is een maat voor willekeurigheid uitgedrukt in bits. Een wachtwoord met N bits entropie heeft 2^N mogelijke waarden. Een wachtwoord van 20 tekens uit 95 afdrukbare ASCII-tekens heeft bijvoorbeeld log2(95^20) = 131,1 bits entropie. Elke extra bit verdubbelt het aantal gissingen dat een aanvaller nodig heeft.
Moet ik symbolen in mijn wachtwoorden opnemen?
Het opnemen van symbolen vergroot de tekenset van 62 (letters + cijfers) naar 95 (afdrukbare ASCII), wat ongeveer 6,1 bits entropie per teken toevoegt. Sommige systemen beperken welke symbolen zijn toegestaan. Als een systeem bepaalde symbolen weigert, schakel je de symbooloptie uit en compenseer je met een langer wachtwoord. Een alfanumeriek wachtwoord van 24 tekens heeft meer entropie dan een wachtwoord van 16 tekens met symbolen.
Waarom Math.random() niet gebruiken voor wachtwoordgeneratie?
Math.random() is niet cryptografisch veilig. De meeste JavaScript-engines implementeren het met xorshift128+ of een vergelijkbare snelle PRNG die is ontworpen voor simulatie en games, niet voor beveiliging. Een aanvaller die een paar uitvoerwaarden observeert, kan de interne toestand herstellen en alle toekomstige uitvoer voorspellen. De Web Crypto API gebruikt entropiebronnen van het besturingssysteem die niet voorspelbaar zijn.
Kan ik gegenereerde wachtwoorden gebruiken voor API-sleutels en tokens?
Ja, maar houd rekening met de formaatvereisten van je doelsysteem. Sommige API's verwachten base64-gecodeerde sleutels of hex-tekenreeksen in plaats van willekeurige tekens. Gebruik voor het genereren van ruwe geheimen de volledige tekenset op 32+ tekens. Genereer voor base64-sleutels willekeurige bytes en codeer ze afzonderlijk in plaats van base64 als wachtwoordtekenset te behandelen.
Hoe vaak moet ik wachtwoorden rouleren?
NIST SP 800-63B (2017, bijgewerkt in 2024) raadt verplichte periodieke rotatie voor gebruikerswachtwoorden af omdat dit leidt tot zwakkere wachtwoordkeuzes. Roteer alleen wanneer er bewijs is van compromittering. Roteer voor machinegeheimen en serviceaccounts op basis van het risicomodel van je organisatie, doorgaans elke 90 dagen voor referenties met hoge privileges.