Ustawienia
Generuje hashe bcrypt do przechowywania haseł i sprawdza, czy hasło pasuje do istniejącego hasha. W trybie Generuj wybierz koszt i wersję; w trybie Sprawdź wklej hash i hasło do sprawdzenia. Wynik pokazuje każdą część hasha i czas obliczeń.

Hasha bcrypt nie da się "odszyfrować": aby sprawdzić, czy hasło jest prawidłowe, użyj trybu Sprawdź. Wszystko jest obliczane w Twojej przeglądarce, a hasło nie jest wysyłane na żaden serwer.

Parametry
Od 4 do 15

Aktualna wersja. Generują ją OpenBSD, Node.js, Python, Go i Rust.

Każdy dodatkowy punkt kosztu podwaja czas obliczeń. OWASP zaleca co najmniej 10; najlepiej wybrać najwyższą wartość, którą Twój serwer oblicza w około 250 ms.

0 z 72 bajtów

Jak to działa

bcrypt to funkcja skrótu zaprojektowana do przechowywania haseł. W przeciwieństwie do SHA-256 czy MD5, które oblicza się w mikrosekundach, bcrypt jest celowo powolny: dzięki temu ktoś, kto ukradnie bazę danych, potrzebuje lat, by łamać hasła metodą siłową.

Każdy hash zawiera wszystko, co potrzebne do jego weryfikacji: wersję algorytmu, koszt i losową 128-bitową sól. Dlatego to samo hasło za każdym razem daje inny hash i nie trzeba przechowywać soli osobno.

Koszt to logarytm o podstawie 2 z liczby rund: przy koszcie 10 obliczanych jest 1024 rund, a przy 12 – 4096. Zwiększenie o jeden punkt podwaja czas obliczeń, co pozwala nadążać za rosnącą mocą sprzętu bez zmiany algorytmu.

Przykłady

rasmuslerdorf$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1aPrzykład password_verify() z podręcznika PHP: wklej go w trybie Sprawdź z tym hasłem, a wynik będzie zgodny.
abc$2a$06$If6bvum7DFjUnE9p2uDeDu0YHzrHM6tf.iqN8.yx.jNN1ILEf7h0iWektor testowy jBCrypt z kosztem 6. Pierwsze 22 znaki po koszcie to sól, pozostałe 31 – wartość skrótu.

Przypadki użycia

  • Utworzenie hasha początkowego hasła administratora, aby wstawić go bezpośrednio do bazy danych.
  • Sprawdzenie, czy hasło pasuje do zapisanego hasha, gdy użytkownik nie może się zalogować.
  • Generowanie testowych hashy do fixtures, seedów lub testów automatycznych aplikacji Laravel, Spring, Django lub Node.js.
  • Zmierzenie, ile trwa każdy koszt, aby wybrać odpowiednią wartość przed skonfigurowaniem jej na serwerze.
  • Tworzenie wpisów do plików .htpasswd Apache, które akceptują hashe bcrypt z prefiksem $2y$.

Najczęstsze pytania

Czy hash bcrypt da się odszyfrować?

Nie. bcrypt to funkcja jednokierunkowa: nie ma sposobu, by odzyskać hasło z hasha. Jedyne, co można zrobić, to sprawdzać kolejne hasła i patrzeć, czy któreś pasuje – a właśnie to bcrypt spowalnia.

Czym różnią się $2a$, $2b$ i $2y$?

Dla zwykłych haseł wszystkie trzy dają ten sam wynik. $2a$ to wersja pierwotna; $2y$ wprowadziło PHP w 2011 roku, aby odróżnić swoje hashe od hashy z błędnej implementacji; $2b$ przyjęło OpenBSD w 2014 roku przy poprawce innego błędu dotyczącego haseł dłuższych niż 255 znaków. Niemal wszystkie biblioteki akceptują przy weryfikacji wszystkie trzy.

Jaki koszt warto stosować?

OWASP zaleca co najmniej 10. Najlepiej wybrać najwyższą wartość, którą Twój serwer obliczy w około 250 ms na jedno logowanie. Spring Security domyślnie używa 10; Laravel 11 i PHP 8.4 podniosły swoją wartość domyślną do 12.

Dlaczego bcrypt ignoruje wszystko powyżej 72 bajtów?

Algorytm używa hasła jako klucza Blowfish, który może mieć najwyżej 72 bajty. Nadmiar jest odrzucany bez ostrzeżenia, więc dwa hasła o tych samych pierwszych 72 bajtach dają ten sam hash. Znaki diakrytyczne czy emoji zajmują od dwóch do czterech bajtów, dlatego narzędzie liczy bajty, a nie znaki.

Co jest lepsze: bcrypt czy Argon2?

Argon2id jest dziś zalecanym algorytmem dla nowych systemów, bo oprócz tego, że jest powolny, zużywa dużo pamięci, co podraża ataki z użyciem GPU. Mimo to bcrypt z odpowiednim kosztem nadal jest bezpieczny i jest domyślny w PHP, Laravelu, Springu i Ruby on Rails.

Czy moje hasło jest wysyłane na jakiś serwer?

Nie. Hash i weryfikacja są obliczane w Twojej przeglądarce, a hasło nigdy nie opuszcza Twojego urządzenia; nie trafia też do linku do udostępniania narzędzia.