Skip to main content

Wat is hashing

Hashing is het proces waarbij platte tekst, zoals wachtwoorden, via een eenrichtingstransformatie wordt omgezet in een string met vaste lengte. Dezelfde invoer levert altijd dezelfde hash op, maar je kunt de oorspronkelijke platte tekst niet uit de hash herleiden. De Hash-facade van Laravel ondersteunt de hashalgoritmen bcrypt en Argon2 voor het veilig opslaan van wachtwoorden.

Vergelijking van algoritmen

De “workfactor” van bcrypt bepaalt hoelang het genereren van een hash duurt. Hoe trager de hash, hoe beter de weerstand tegen brute-force-aanvallen. Door de workfactor te verhogen naarmate hardware sneller wordt, houd je de beveiliging op peil.

Flow van hashen en verifiëren


Configuratie

Standaard gebruikt Laravel de bcrypt-driver. Je kunt dit wijzigen met de omgevingsvariabele HASH_DRIVER.
Wil je de hashconfiguratie aanpassen, publiceer dan het configuratiebestand met config:publish.
Na het publiceren kun je in config/hashing.php onder andere de standaard workfactor wijzigen.

Basisgebruik

Een wachtwoord hashen

Geef de platte tekst van het wachtwoord door aan Hash::make() en je krijgt de hashwaarde terug. Deze hashwaarde sla je op in de database.
Sla de hashwaarde op in de database, maar sla nooit het wachtwoord in platte tekst op.

De bcrypt-workfactor aanpassen

Met de optie rounds pas je de rekenkosten van het hashen aan. Hoe hoger de waarde, hoe veiliger, maar ook hoe langer de verwerking duurt. De standaardwaarde (12) is geschikt voor de meeste applicaties.

De Argon2-workfactor aanpassen

Gebruik je Argon2, dan kun je de rekenkosten aanpassen met de opties memory, time en threads.
Zie de officiële PHP-documentatie voor meer informatie over de Argon2-opties.

Wachtwoorden verifiëren

Met Hash::check() controleer je of een wachtwoord in platte tekst overeenkomt met de opgeslagen hash. Een typisch voorbeeld binnen een inlogproces:
Gebruik je Auth::attempt(), dan gebeurt deze controle automatisch en hoef je hem niet zelf aan te roepen. Hash::check() is vooral handig wanneer je handmatig het huidige wachtwoord wilt controleren.

Bepalen of rehashen nodig is

Met Hash::needsRehash() controleer je of de workfactor waarmee de hash is gegenereerd afwijkt van de huidige configuratie. Dit gebruik je om bestaande hashes bij te werken met de nieuwe instellingen nadat je de workfactor hebt gewijzigd.
Een voorbeeld waarbij je rehasht na een geslaagde login:
Herzie de workfactor regelmatig naarmate hardware sneller wordt, zodat de beveiliging op peil blijft. Door needsRehash() te gebruiken kun je wachtwoorden op een natuurlijk moment bijwerken: wanneer de gebruiker inlogt.

Verificatie van het hashalgoritme

Standaard verifieert Hash::check() of de hash is gegenereerd met het momenteel geconfigureerde algoritme. Wijkt het algoritme af, dan wordt een RuntimeException gegooid. Dit voorkomt aanvallen via manipulatie van het hashalgoritme. Moet je meerdere algoritmen tegelijk ondersteunen, bijvoorbeeld tijdens een migratie naar een ander algoritme, dan kun je deze verificatie uitschakelen door HASH_VERIFY op false te zetten.
Met HASH_VERIFY=false is de algoritmeverificatie uitgeschakeld. Gebruik dit alleen tijdens de migratieperiode en zet het na afronding weer terug naar true (de standaard).

Samenvatting

Volgende stappen

Introductie tot authenticatie

Leer het volledige plaatje van authenticatie, waaronder het implementeren van een inlogproces met Hash::check().
Laatst gewijzigd op 6 september 2026