Generator htpasswd — bcrypt, Apache MD5 (apr1) i Basic Auth
Generuj wpisy htpasswd z bcrypt, Apache MD5 (apr1), SHA-1 i innymi algorytmami. Gotowe bloki konfiguracji dla Apache, nginx i Docker. 100% w Twojej przeglądarce — bez przesyłania danych.
Weryfikuj istniejący hash
Czym jest plik htpasswd?
Plik .htpasswd przechowuje poświadczenia używane przez HTTP Basic Authentication. Każda linia to jedna para użytkownik:hash, gdzie hash jest jednostronnym skrótem hasła — tekst jawny nigdy nie jest przechowywany. Serwery WWW odczytują ten plik, aby zdecydować, kto może uzyskać dostęp do chronionego adresu URL. W Apache plik .htaccess (lub blok <Directory>) odwołuje się do pliku .htpasswd i przed wyświetleniem strony prosi przeglądarkę o podanie nazwy użytkownika i hasła.
Format hasha zależy od użytego algorytmu. Narzędzie Apache htpasswd może generować kilka formatów: bcrypt (linie zaczynające się od $2y$) jest najsilniejszy i zalecany dla Apache, Docker Registry i Caddy; apr1 (Apache MD5, zaczynający się od $apr1$) jest najbardziej przenośny i bezpiecznym domyślnym wyborem dla nginx; SHA-1 (zaczynający się od {SHA}) jest bez soli i uważany za niebezpieczny; crypt (tradycyjny DES) jest przestarzały i obcina hasło po 8 znakach; a plain przechowuje hasło jako tekst jawny, czego nigdy nie należy stosować w środowisku produkcyjnym.
Ten generator działa całkowicie w Twojej przeglądarce — żadna nazwa użytkownika, hasło ani hash nie są nigdy przesyłane. Jeśli potrzebujesz silnego hasła do swojego wpisu, skorzystaj z naszego Generatora Losowych Haseł. Aby ręcznie zbudować nagłówek Authorization: Basic, poświadczenie to po prostu base64(użytkownik:hasło), które możesz uzyskać za pomocą naszego Kodera Base64. A gdy Twój endpoint jest już chroniony, przetestuj go z wiersza poleceń przy użyciu naszego Kreatora poleceń cURL.
# Apache htpasswd CLI equivalents (apache2-utils / httpd-tools) # bcrypt entry, printed to stdout (recommended; -B = bcrypt, -n = no file, -b = password on CLI) htpasswd -Bbn admin 's3cret' # → admin:$2y$10$N9qo8uLOickgx2ZMRZoMye... # apr1 (Apache MD5) entry, portable for nginx — no apache2-utils needed printf "admin:$(openssl passwd -apr1 's3cret')\n" # → admin:$apr1$k3l4Hj9.$qN8... # Append a user to an existing file from the shell htpasswd -B /etc/apache2/.htpasswd alice # Note: nginx delegates bcrypt to the system crypt(); on Alpine/musl or old # glibc that fails — prefer apr1 for nginx to stay portable.
Kluczowe funkcje
Wiele algorytmów haszowania
Generuj wpisy bcrypt ($2y$), apr1 / Apache MD5 ($apr1$) i SHA-1 ({SHA}) — plus opcja plain (tekst jawny) do testów. Każdy format używa świeżego kryptograficznego solta tam, gdzie to obsługiwane.
Generowanie i weryfikacja
Twórz nowe wpisy lub weryfikuj istniejące. Wklej zapisaną linię user:hash i kandydujące hasło, aby natychmiast sprawdzić, czy są zgodne — przydatne przy debugowaniu błędu 401 w środowisku produkcyjnym.
Wybór według serwera
Wybierz Apache, nginx, Docker lub Caddy, a właściwy algorytm zostanie dobrany automatycznie — bcrypt tam, gdzie jest obsługiwany, apr1 dla przenośności nginx — co pozwala uniknąć cichych błędów crypt().
Gotowe bloki konfiguracyjne
Uzyskaj sześć gotowych do skopiowania fragmentów konfiguracji — Apache .htaccess, nginx auth_basic, Docker, Kubernetes ingress-nginx, Caddy i Traefik — już powiązanych z Twoim wpisem .htpasswd.
100% po stronie klienta
Całe haszowanie odbywa się lokalnie w Twojej przeglądarce za pomocą Web Crypto i dołączonej implementacji bcrypt. Żadna nazwa użytkownika, hasło ani hash nie są nigdy wysyłane na serwer — możesz bezpiecznie generować poświadczenia produkcyjne.
Przykłady
Wpis bcrypt (zalecany)
admin:$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
Wpis bcrypt z prefiksem $2y$ i kosztem 10. To najsilniejszy, najbardziej przenośny format — używaj go dla Apache, Docker Registry, Caddy i Traefik.
Wpis apr1 (przenośny nginx)
admin:$apr1$kl3H9j2.$qN8vY7tLp2mZ0xW5cR4fK1
Apache MD5 (apr1) z 8-znakowym soltem po znaczniku $apr1$. Bezpieczny domyślny wybór dla nginx, gdzie weryfikacja bcrypt zależy od zawodnej systemowej funkcji crypt().
Wpis SHA-1 (przestarzały)
admin:{SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g= Wpis {SHA} to zakodowany w base64 niezasolony skrót SHA-1. Apache i nginx go akceptują, ale jest niezasolony i niebezpieczny — uwzględniony wyłącznie dla zgodności z przestarzałymi systemami.
Nagłówek Authorization: Basic
Authorization: Basic YWRtaW46czNjcmV0
Poświadczenie po stronie klienta dla tego samego użytkownika: base64('admin:s3cret'). Wyślij ten nagłówek z curl -H lub Postmanem, aby uwierzytelnić się bez tworzenia pliku .htpasswd.
Wieloużytkownikowy plik .htpasswd
admin:$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy alice:$2y$10$3bQ8xY7tLp2mZ0xW5cR4fO9vK1jH6sD2nG8aQ5wE3rT7uI4oP1cm bob:$apr1$mZ0xW5cR$4fK1jH6sD2nG8aQ5wE3rT2
Jedna linia użytkownik:hash na użytkownika. Algorytmy mogą być mieszane w tym samym pliku — tu dwa wpisy bcrypt i jeden apr1 współistnieją dla trzech użytkowników.
Jak używać
- 1
Konfiguracja serwera i algorytmu
Wybierz docelowy serwer (Apache, nginx, Docker, Caddy). Właściwy algorytm jest dobierany automatycznie — bcrypt dla Apache/Docker/Caddy, apr1 dla przenośnego nginx — ale możesz go zmienić i dostosować koszt bcrypt.
- 2
Generowanie hasha
Wpisz nazwę użytkownika i hasło (lub kliknij Losowe hasło), a następnie kliknij Generuj. Hash jest obliczany lokalnie z nowym losowym soltem. Wygeneruj nowy solt w dowolnym momencie, aby uzyskać nowy wpis.
- 3
Kopiowanie wpisu
Skopiuj linię user:hash do pliku .htpasswd, skopiuj polecenie echo >> do powłoki lub skopiuj nagłówek Authorization: Basic do curl i Postmana.
- 4
Wdrożenie konfiguracji
Wklej wygenerowany blok konfiguracyjny do pliku Apache .htaccess, bloku serwera nginx, konfiguracji Docker, ingress Kubernetes, Caddy lub Traefik, wskaż go na plik .htpasswd i przeładuj serwer.
Typowe przypadki użycia
- Ochrona katalogów Apache
- Zabezpiecz folder za pomocą HTTP Basic Auth, korzystając z pliku .htaccess i dyrektywy AuthUserFile. Wklej wpis bcrypt i wygenerowany blok konfiguracyjny Apache, aby wymagać logowania na dowolnej ścieżce.
- nginx auth_basic
- Chroń blok location lub server za pomocą auth_basic i auth_basic_user_file. Użyj formatu apr1, aby weryfikacja działała niezawodnie na Alpine, Debianie i innych obrazach bazowych.
- Docker Registry
- Prywatny Docker Registry akceptuje wyłącznie wpisy htpasswd w formacie bcrypt. Wygeneruj linię $2y$ za pomocą htpasswd -Bbn, zamontuj ją w kontenerze rejestru i uwierzytelnij docker login.
- Kubernetes ingress-nginx
- Utwórz Secret basic-auth z pliku .htpasswd i odwołaj się do niego za pomocą adnotacji nginx.ingress.kubernetes.io/auth-type i auth-secret, aby chronić trasę ingress.
- Caddy i Traefik
- Dyrektywa basic_auth w Caddy i middleware basicauth w Traefik oczekują hashy bcrypt. Wklej wygenerowany wpis bezpośrednio do Caddyfile lub etykiet/dynamicznej konfiguracji Traefik.
- Nagłówek Authorization dla curl i Postmana
- Pomiń plik całkowicie na potrzeby szybkich testów: skopiuj nagłówek Authorization: Basic, aby wysyłać poświadczenia bezpośrednio. Użyj flagi curl -H lub żądania Postmana, aby trafić do chronionego endpointu.
Szczegóły techniczne
- bcrypt ($2y$)
- Adaptacyjny, zasolony hash oparty na szyfrze Blowfish z regulowanym czynnikiem kosztu. Każdy wpis zawiera losowy 16-bajtowy solt i koszt, więc identyczne hasła generują różne hashe. Uwaga: bcrypt obcina hasło po 72 bajtach — znaki poza tym limitem są ignorowane.
- apr1 (Apache MD5)
- Iterowany, zasolony wariant MD5 Apache ($apr1$ + 8-znakowy solt). Wykonuje 1000 rund MD5, co jest znacznie słabsze niż adaptacyjny koszt bcrypt, ale jest natywnie implementowany przez Apache i nginx, co czyni go najbardziej przenośnym formatem między platformami i obrazami bazowymi.
- SHA-1 i crypt
- Wpisy SHA-1 ({SHA} + skrót base64) są niezasolone, więc identyczne hasła dają identyczne hashe i są podatne na ataki słownikowe (rainbow tables) — uwzględnione wyłącznie dla zgodności z przestarzałymi systemami. Tradycyjny crypt (DES) jest jeszcze słabszy i cicho obcina hasła po 8 znakach.
- Solt i iteracje
- Solenie zapobiega atakom z użyciem preobliczonych tablic (rainbow tables), czyniąc każdy hash unikalnym. bcrypt używa 128-bitowego losowego solta z konfigurowalnym kosztem; apr1 używa 8-znakowego solta z 1000 stałymi iteracjami. Użyj opcji Wygeneruj nowy solt, aby uzyskać inny prawidłowy hash dla tego samego hasła.
- Obsługa Base64 i UTF-8
- Hasła są kodowane jako bajty UTF-8 przed haszowaniem, więc znaki spoza ASCII są obsługiwane spójnie. Nagłówek Authorization: Basic to base64 surowych bajtów UTF-8 nazwa_użytkownika:hasło, zgodnie z tym, co serwery dekodują po swojej stronie.
- Zastrzeżenia i uwagi
- Wygenerowane hashe są obliczane lokalnie i nigdy nie są weryfikowane względem działającego serwera. Skopiowane wpisy i pobrane pliki .htpasswd trafiają do schowka i na dysk w postaci jawny-hash — traktuj je jak sekrety, ogranicz uprawnienia do pliku i wyczyść schowek po wklejeniu do konfiguracji produkcyjnej.
Najlepsze praktyki
- Preferuj bcrypt wszędzie tam, gdzie jest obsługiwany
- Używaj bcrypt ($2y$) dla Apache, Docker, Caddy i Traefik — jest zasolony, adaptacyjny i znacznie silniejszy niż apr1 czy SHA-1. Rezerwuj apr1 tylko dla nginx, gdy zależność bcrypt od systemowej funkcji crypt() sprawia, że jest zawodny.
- Przechowuj plik poza katalogiem WWW
- Trzymaj .htpasswd poza jakimkolwiek serwowanym katalogiem, żeby nigdy nie można go było pobrać przez HTTP. Ustaw chmod 640 i przypisz właściciela do użytkownika serwera WWW, aby serwer mógł go odczytać, a inne konta nie.
- Zawsze serwuj przez HTTPS
- Basic Auth przesyła poświadczenia jako odwracalny base64 przy każdym żądaniu. Bez TLS każdy na ścieżce sieciowej może odczytać hasło. Nigdy nie włączaj Basic Auth na zwykłym HTTP — zakończ TLS przed chronionym endpointem.
- Używaj unikalnych, silnych haseł
- Każde konto powinno mieć własne hasło o wysokiej entropii, nigdy nieużywane w innych usługach. Wygeneruj je za pomocą naszego Generatora Losowych Haseł i przechowuj w menedżerze haseł, zamiast wymyślać je samodzielnie.
Często zadawane pytania
bcrypt czy apr1 — który wybrać?
Czy nginx obsługuje bcrypt?
Jak naprawić błąd nginx `crypt_r() failed (22: Invalid argument)`?
Gdzie umieścić plik .htpasswd i jakie uprawnienia mu nadać?
Jak skonfigurować Basic Auth w .htaccess / nginx?
Czy moje hasła są przesyłane gdziekolwiek?
Jaka jest różnica między $2a$, $2b$ i $2y$ w bcrypt?
Jaki koszt bcrypt powinienem wybrać?
htpasswd a nagłówek Authorization: Basic — jaka jest różnica?
Nie mam zainstalowanego apache2-utils — jak wygenerować wpis htpasswd?
Co oznaczają flagi htpasswd -B, -Bbn, -bnB?
Dlaczego Docker Registry wymaga bcrypt?
Czy Basic Auth jest bezpieczny?
Powiązane narzędzia
Zobacz wszystkie narzędzia →Generator i konstruktor poleceń cURL
Web & API
Twórz polecenia curl w przeglądarce — ustaw metodę, nagłówki, autoryzację i treść, a gotowe polecenie pojawi się natychmiast. Presety dla Bearer, POST JSON i przesyłania plików. Bezpłatnie, prywatnie, bez rejestracji.
Konwerter systemów liczbowych — binary, hex, decimal i octal
Narzędzia konwersji
Konwertuj między systemami binarnym, szesnastkowym, dziesiętnym i ósemkowym (2–36) w czasie rzeczywistym. Bezpłatnie i prywatnie — w przeglądarce.
Koder i dekoder Base64
Kodowanie i formatowanie
Zakoduj i zdekoduj Base64 online za darmo. Konwersja w czasie rzeczywistym z pełną obsługą UTF-8 i emoji. 100% w przeglądarce, bez rejestracji.
Konwerter wielkości liter — UPPER, lower, camelCase
Przetwarzanie tekstu
Konwertuj tekst między UPPERCASE, lowercase, Title Case, Sentence case, camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE i 6 innymi formatami natychmiast. Za darmo, w przeglądarce, bez rejestracji.
Konwerter kolorów — HEX, RGB, HSL i OKLCH
Narzędzia konwersji
Konwertuj HEX na RGB, HSL, OKLCH, OKLAB i CMYK w przeglądarce — skopiuj dowolny format jednym kliknięciem. Darmowy, bez rejestracji, kolory nigdy nie opuszczają strony.
Generator crontab i kreator wyrażeń cron
Data i czas
Buduj, waliduj i dekoduj wyrażenia cron w przeglądarce. Podgląd kolejnych uruchomień w czasie lokalnym lub UTC. Składnia POSIX 5-polowa, presety, opis po polsku. Za darmo, prywatnie, bez rejestracji.