Een van de beste manieren om wachtwoorden veilig op te slaan, is door ze te salten en te hashen. Salting en hashing zet een gewoon wachtwoord om in een unieke waarde die moeilijk ongedaan kan worden gemaakt. Met de bcrypt-bibliotheek kunt u met weinig moeite hash- en salt-wachtwoorden in Node.js gebruiken.
Wat is wachtwoord-hashing?
Wachtwoord hashen betekent het doorgeven van een wachtwoord in platte tekst door een hash-algoritme om een unieke waarde te genereren. Enkele voorbeelden van hash-algoritmen zijn bcrypt, scrypt en SHA. Het nadeel van hashen is dat het voorspelbaar is.
Elke keer dat u dezelfde invoer doorgeeft aan een hash-algoritme, wordt dezelfde uitvoer gegenereerd. Een hacker met toegang tot het gehashte wachtwoord kan de codering reverse-engineeren om het oorspronkelijke wachtwoord te verkrijgen. Ze kunnen technieken gebruiken zoals: brute-force aanvallen of regenboogtafels. Dit is waar zouten om de hoek komt kijken.
Wat is wachtwoordzouten?
Wachtwoordzouten voegt een willekeurige string (de salt) toe aan een wachtwoord voordat het wordt gehasht. Op deze manier zal de gegenereerde hash elke keer anders zijn. Zelfs als een hacker het gehashte wachtwoord verkrijgt, is het voor hem onpraktisch om het originele wachtwoord te achterhalen dat het heeft gegenereerd.
Hoe bcrypt te gebruiken om een wachtwoord te hashen en te verifiëren
bcrypt is een npm-module die het zouten en hashen van wachtwoorden vereenvoudigt.
Stap 1: Installeer bcrypt
Npm gebruiken:
npm installeren bcrypt
Garen gebruiken:
garen toevoegen bcrypt
Stap 2: Importeer bcrypt
const bcrypt = vereisen("bcrypt")
Stap 3: Genereer een zout
Om het zout te genereren, bel de bcrypt.genSalt() methode. Deze methode accepteert een geheel getal dat de kostenfactor is die de tijd bepaalt die nodig is om een wachtwoord te hashen. Hoe hoger de kostenfactor, hoe meer tijd het algoritme kost en hoe moeilijker het is om de hash met brute kracht om te draaien. Een goede waarde moet hoog genoeg zijn om het wachtwoord te beveiligen, maar ook laag genoeg om het proces niet te vertragen. Het varieert gewoonlijk tussen 5 en 15. In deze tutorial gebruiken we 10.
bcrypt.genSalt (10, (err, zout) => {
// gebruikzouttothasjwachtwoord
})
Stap 4: hash het wachtwoord
Geef het gewone wachtwoord en het gegenereerde zout door aan de hasj() methode:
bcrypt.genSalt (10, (err, zout) => {
bcrypt.hash (plaintextPassword, salt, functie(fout, hash) {
// Bewaar hash in de database
});
})
Nadat u de hash hebt gegenereerd, slaat u deze op in de database. U gebruikt het om een wachtwoord te verifiëren en een gebruiker te authenticeren die probeert in te loggen.
In plaats van het zout en de hasj afzonderlijk te genereren, kunt u het zout en de hasj ook automatisch genereren met één enkele functie.
bcrypt.hash (platte tekstWachtwoord, 10, functie(fout, hash) {
// bewaar hash in de database
});
Stap 5: Vergelijk wachtwoorden met bcrypt
Tot gebruikers authenticeren, moet u het wachtwoord dat ze verstrekken vergelijken met het wachtwoord in de database. bcrypt.compare() accepteert het wachtwoord in platte tekst en de hash die u hebt opgeslagen, samen met een terugbelfunctie. Die callback levert een object op dat eventuele fouten bevat en het algehele resultaat van de vergelijking. Als het wachtwoord overeenkomt met de hash, is het resultaat waar.
bcrypt.compare (plaintextPassword, hash, functie(fout, resultaat) {
als (resultaat) {
// wachtwoord is geldig
}
});
Async/Await gebruiken
U kunt wachtwoorden hashen en verifiëren met async/wait als volgt.
asynchronefunctiehashWachtwoord(platte tekstWachtwoord) {
const hash = wachten bcrypt.hash (platte tekstWachtwoord, 10);
// Bewaar hash in de database
}
// vergelijk wachtwoord
asynchronefunctievergelijkWachtwoord(platte tekstWachtwoord, hash) {
const resultaat = wachten bcrypt.compare (platte tekstWachtwoord, hash);
opbrengst resultaat;
}
Beloftes gebruiken
De bcrypt-bibliotheek ondersteunt ook het gebruik van beloften.
functiehashWachtwoord(platte tekstWachtwoord) {
bcrypt.hash(platte tekstWachtwoord, 10)
.then (hekje => {
// Bewaar hash in de database
})
.vangst(fout => {
troosten.log (fout)
})
}
functievergelijkWachtwoord(platte tekstWachtwoord, hash) {
bcyrpt.vergelijken(platte tekstWachtwoord, hasj)
.then (resultaat => {
opbrengst resultaat
})
.vangst(fout => {
troosten.log (fout)
})
}
Hashen en zouten is een gemakkelijke overwinning
U kunt de bcrypt-bibliotheek gebruiken om wachtwoorden in Node.js te hashen en te verifiëren. Het hashen van wachtwoorden minimaliseert de kans dat cybercriminelen ze gebruiken om toegang te krijgen tot gevoelige gegevens of services. Door uw gehashte wachtwoorden te zouten, worden ze nog veiliger. Valideer, naast hashing, altijd de wachtwoordsterkte als een extra beveiligingsmaatregel.
De 8 meest gebruikte trucs om wachtwoorden te hacken
Lees volgende
Gerelateerde onderwerpen
- Programmeren
- Beveiliging
- Programmeren
- JavaScript
- Beveiliging
- Algoritmen
Over de auteur
Mary Gathoni is een softwareontwikkelaar met een passie voor het maken van technische inhoud die niet alleen informatief maar ook boeiend is. Als ze niet aan het coderen of schrijven is, gaat ze graag met vrienden om en is ze graag buiten.
Abonneer op onze nieuwsbrief
Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!
Klik hier om je te abonneren