Jednym z najlepszych sposobów bezpiecznego przechowywania haseł jest ich solenie i mieszanie. Solenie i mieszanie konwertuje zwykłe hasło na unikalną wartość, która jest trudna do odwrócenia. Biblioteka bcrypt pozwala na haszowanie i salt w Node.js przy niewielkim wysiłku.
Co to jest haszowanie hasła?
Haszowanie hasła oznacza przekazywanie hasła w postaci zwykłego tekstu przez algorytm mieszający w celu wygenerowania unikalnej wartości. Niektóre przykłady algorytmów mieszających to bcrypt, scrypt i SHA. Wadą haszowania jest to, że jest przewidywalne.
Za każdym razem, gdy przekazujesz te same dane wejściowe do algorytmu mieszającego, wygeneruje to te same dane wyjściowe. Haker mający dostęp do zaszyfrowanego hasła może odtworzyć szyfrowanie, aby uzyskać oryginalne hasło. Mogą używać technik takich jak: ataki brutalnej siły lub tęczowe stoły. Tu właśnie pojawia się solenie.
Co to jest solenie hasła?
Solenie hasła dodaje losowy ciąg (sól) do hasła przed jego haszowaniem. W ten sposób wygenerowany hash będzie za każdym razem inny. Nawet jeśli haker uzyska zaszyfrowane hasło, odkrycie oryginalnego hasła, które je wygenerowało, jest niepraktyczne.
Jak używać bcrypt do haszowania i weryfikacji hasła?
bcrypt to moduł npm, który upraszcza solenie i mieszanie haseł.
Krok 1: Zainstaluj bcrypt
Za pomocą npm:
npm zainstalować bcrypt
Używając przędzy:
przędza dodaj bcrypt
Krok 2: Importuj bcrypt
stały bcrypt = wymagać(„bkrypt”)
Krok 3: Wygeneruj sól
Aby wygenerować sól, zadzwoń do bcrypt.genSalt() metoda. Ta metoda akceptuje wartość całkowitą, która jest czynnikiem kosztowym, który określa czas potrzebny do zaszyfrowania hasła. Im wyższy współczynnik kosztów, tym więcej czasu zajmuje algorytm i tym trudniej jest odwrócić hash przy użyciu brutalnej siły. Dobra wartość powinna być wystarczająco wysoka, aby zabezpieczyć hasło, ale także wystarczająco niska, aby nie spowalniać procesu. Zwykle waha się od 5 do 15. W tym samouczku użyjemy 10.
bcrypt.genSalt (10, (błąd, sól) => {
// posługiwać sięSóldohaszyszhasło
})
Krok 4: Zahaszuj hasło
Przekaż zwykłe hasło i wygenerowaną sól do haszysz() metoda:
bcrypt.genSalt (10, (błąd, sól) => {
bcrypt.hash (zwykły tekst Hasło, sól, funkcjonować(błądzić, haszysz) {
// Przechowuj hash w bazie danych
});
})
Po wygenerowaniu hash przechowuj go w bazie danych. Wykorzystasz go do weryfikacji hasła i uwierzytelnienia użytkownika próbującego się zalogować.
Zamiast osobno generować sól i hasz, możesz również wygenerować sól i hasz automatycznie za pomocą jednej funkcji.
bcrypt.hash (hasło w postaci zwykłego tekstu, 10, funkcjonować(błądzić, haszysz) {
// przechowuj hash w bazie danych
});
Krok 5: Porównaj hasła za pomocą bcrypt
W celu uwierzytelniaj użytkowników, trzeba będzie porównać podane przez nich hasło z hasłem w bazie danych. bcrypt.porównaj() akceptuje hasło w postaci zwykłego tekstu i zapisany skrót wraz z funkcją wywołania zwrotnego. To wywołanie zwrotne dostarcza obiekt zawierający wszelkie błędy, które wystąpiły, oraz ogólny wynik porównania. Jeśli hasło jest zgodne z hashem, wynik jest prawdziwy.
bcrypt.compare (zwykły tekstPassword, hash, funkcjonować(błąd, wynik) {
jeśli (wynik) {
// hasło jest prawidłowe
}
});
Korzystanie z funkcji asynchronicznej/oczekiwania
Możesz haszować i weryfikować hasła za pomocą async/await w następujący sposób.
asynchronicznyfunkcjonowaćhashHasło(Hasło tekstowe) {
stały hasz = czekać na bcrypt.hash (hasło w postaci zwykłego tekstu, 10);
// Przechowuj hash w bazie danych
}
// porównaj hasło
asynchronicznyfunkcjonowaćporównaj hasło(zwykły tekstHasło, hash) {
stały wynik = czekać na bcrypt.compare (zwykły tekstPassword, hash);
zwrócić wynik;
}
Korzystanie z obietnic
Biblioteka bcrypt obsługuje również korzystanie z obietnic.
funkcjonowaćhashHasło(Hasło tekstowe) {
bcrypt.haszysz(Hasło tekstowe, 10)
.to (hasz => {
// Przechowuj hash w bazie danych
})
.łapać(błąd => {
konsola.log (błąd)
})
}
funkcjonowaćporównaj hasło(zwykły tekstHasło, hash) {
bcyrpta.porównywać(Hasło tekstowe, haszysz)
.to (wynik => {
zwrócić wynik
})
.łapać(błąd => {
konsola.log (błąd)
})
}
Hashowanie i solenie to łatwa wygrana
Możesz użyć biblioteki bcrypt do haszowania i weryfikowania haseł w Node.js. Hasła haszujące minimalizują szanse, że cyberprzestępcy wykorzystają je do uzyskania dostępu do poufnych danych lub usług. Posolenie zaszyfrowanych haseł czyni je jeszcze bezpieczniejszymi. Oprócz haszowania zawsze sprawdzaj siłę hasła jako dodatkowy środek bezpieczeństwa.
8 najczęstszych sztuczek używanych do hakowania haseł
Czytaj dalej
Powiązane tematy
- Programowanie
- Bezpieczeństwo
- Programowanie
- JavaScript
- Bezpieczeństwo
- Algorytmy
O autorze

Mary Gathoni jest programistą z pasją do tworzenia treści technicznych, które mają nie tylko charakter informacyjny, ale także angażują. Kiedy nie koduje ani nie pisze, lubi spędzać czas z przyjaciółmi i przebywać na świeżym powietrzu.
Zapisz się do naszego newslettera
Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!
Kliknij tutaj, aby zasubskrybować