Skip to content

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.

Bez śledzenia Działa w przeglądarce Bezpłatne
100% w Twojej przeglądarce — hasła nigdy nie opuszczają Twojego urządzenia.
Serwer
Koszt bcrypt: 12
Wpis htpasswd
Nagłówek Authorization
 
Weryfikuj istniejący hash
Sprawdzono pod kątem poprawności hashy i zgodności ze standardami Basic Auth — Zespół inżynierów Go Tools · Jun 4, 2026

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. 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. 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. 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. 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ć?
Używaj bcrypt dla Apache, Docker Registry, Caddy i Traefik — to silny, zasolony, adaptacyjny hash i nowoczesny standard. Używaj apr1 (Apache MD5) dla nginx, ponieważ nginx deleguje bcrypt do systemowej funkcji crypt() i ta zawodzi na wielu konfiguracjach, podczas gdy apr1 jest zaimplementowany wewnętrznie i działa wszędzie. Jeśli kontrolujesz środowisko uruchomieniowe i wiesz, że bcrypt jest obsługiwany, bcrypt jest zawsze silniejszym wyborem; apr1 chodzi o przenośność, nie bezpieczeństwo.
Czy nginx obsługuje bcrypt?
Tylko pośrednio i nie niezawodnie. nginx nie haszuje haseł samodzielnie — dla wpisów $2y$ deleguje weryfikację do funkcji crypt() biblioteki C, więc obsługa zależy całkowicie od używanego libc. Alpine's musl i starsze kompilacje glibc nie zawierają schematu blowfish (bcrypt), więc uwierzytelnianie cicho zawodzi. W przenośnych konfiguracjach nginx używaj zamiast tego formatu apr1, który nginx weryfikuje wewnętrznie na każdej platformie.
Jak naprawić błąd nginx `crypt_r() failed (22: Invalid argument)`?
Ten błąd oznacza, że nginx próbował zweryfikować hash bcrypt ($2y$) na libc, które nie obsługuje schematu blowfish — zwykle Alpine/musl lub starsze glibc. Rozwiązaniem jest wygenerowanie wpisu jako apr1 (Apache MD5) zamiast bcrypt, który nginx weryfikuje wewnętrznie na każdej platformie. Alternatywnie możesz przejść na obraz bazowy, którego libc zawiera obsługę bcrypt, ale apr1 jest prostszym, przenośnym rozwiązaniem.
Gdzie umieścić plik .htpasswd i jakie uprawnienia mu nadać?
Przechowuj plik .htpasswd poza głównym katalogiem dokumentów WWW, żeby nigdy nie mógł być pobrany jako plik statyczny i ujawniony. Typowa lokalizacja to /etc/apache2/.htpasswd lub /etc/nginx/.htpasswd. Ustaw uprawnienia na 640 (chmod 640) i przypisz właściciela do użytkownika, na którym działa serwer WWW (np. www-data lub nginx), tak aby serwer mógł go odczytać, a inne konta nie.
Jak skonfigurować Basic Auth w .htaccess / nginx?
Dla Apache narzędzie generuje blok .htaccess z AuthType Basic, AuthName, AuthUserFile wskazującym na ścieżkę .htpasswd i Require valid-user. Dla nginx generuje blok location z auth_basic "Restricted"; i auth_basic_user_file /ścieżka/.htpasswd;. Skopiuj blok konfiguracyjny odpowiadający Twojemu serwerowi, dostosuj ścieżkę pliku i przeładuj — fragmenty są gotowe do wklejenia.
Czy moje hasła są przesyłane gdziekolwiek?
Nie. Każdy hash jest obliczany całkowicie w Twojej przeglądarce za pomocą JavaScriptu — żadna nazwa użytkownika, hasło ani wygenerowany hash nie są nigdy przesyłane przez sieć. Możesz to potwierdzić, otwierając Narzędzia Deweloperskie przeglądarki (F12 → zakładka Sieć) podczas generowania: nie ma żadnych wychodzących żądań. Nic nie jest przechowywane ani rejestrowane na żadnym serwerze, więc bezpieczne jest generowanie tutaj rzeczywistych poświadczeń produkcyjnych.
Jaka jest różnica między $2a$, $2b$ i $2y$ w bcrypt?
To prefiksy wersji dla tego samego algorytmu bcrypt generujące równoważne hashe; różnice wynikają z historycznych poprawek błędów w sposobie obsługi znaków wysokobitowych i długości ciągów przez niektóre implementacje. Apache htpasswd emituje $2y$. Nowoczesne biblioteki bcrypt traktują $2a$, $2b$ i $2y$ jako wymienne dla weryfikacji, więc wpis $2y$ wygenerowany tutaj będzie poprawnie weryfikowany w Apache, Caddy, Traefik i Docker Registry.
Jaki koszt bcrypt powinienem wybrać?
Koszt 12 to nowoczesny standard i dobry kompromis między bezpieczeństwem a szybkością. Koszt to czynnik pracy: każdy przyrost podwaja czas obliczania i weryfikacji hasha, co spowalnia ataki brute-force, ale też dodaje opóźnienie do każdego logowania. Koszt 10 jest akceptowalny dla endpointów o małym ruchu lub niskim ryzyku; 12–14 jest zalecany dla wszystkiego wrażliwego. Unikaj tak wysokich wartości, że legalne uwierzytelnianie staje się zauważalnie powolne.
htpasswd a nagłówek Authorization: Basic — jaka jest różnica?
Znajdują się na przeciwnych końcach tej samej wymiany. Plik .htpasswd przechowuje hash po stronie serwera — jednostronny skrót, którego serwer używa do weryfikacji poświadczeń. Nagłówek Authorization: Basic to poświadczenie żądania po stronie klienta: dosłowny base64 nazwy użytkownika:hasła, który przeglądarka lub curl wysyła przy każdym żądaniu. Serwer dekoduje nagłówek z base64, a następnie sprawdza hasło względem przechowywanego hasha. Jedno to przechowywanie, drugie to transport.
Nie mam zainstalowanego apache2-utils — jak wygenerować wpis htpasswd?
Nie potrzebujesz go — to narzędzie generuje prawidłowe wpisy bcrypt, apr1 i SHA-1 całkowicie w Twojej przeglądarce. Jeśli wolisz wiersz poleceń, OpenSSL jest dostępny na prawie każdym systemie: uruchom openssl passwd -apr1, aby uzyskać hash apr1, a następnie poprzedź go nazwą użytkownika i dwukropkiem. Na Debianie/Ubuntu możesz też zainstalować htpasswd przez apt install apache2-utils lub httpd-tools na RHEL/CentOS.
Co oznaczają flagi htpasswd -B, -Bbn, -bnB?
Każda litera to niezależna flaga: -B wybiera bcrypt, -n drukuje wynik na standardowe wyjście zamiast zapisywać do pliku, a -b przyjmuje hasło jako argument wiersza poleceń (zamiast wyświetlania monitu). Kolejność nie ma znaczenia, więc -Bbn i -bnB są identyczne. -Bbn to popularna kombinacja do przekierowania wpisu bcrypt do pliku htpasswd Docker Registry.
Dlaczego Docker Registry wymaga bcrypt?
Backend uwierzytelniania htpasswd Docker Registry akceptuje wyłącznie wpisy w formacie bcrypt; hashe apr1, SHA-1 i crypt są odrzucane, a logowanie nie powiedzie się. Wygeneruj wpis za pomocą htpasswd -Bbn użytkownik hasło (lub użyj opcji bcrypt tutaj), zamontuj plik w kontenerze rejestru i wskaż REGISTRY_AUTH_HTPASSWD_PATH na jego lokalizację. Zawsze łącz to z TLS, ponieważ bez niego poświadczenia Basic Auth są czytelne podczas transmisji.
Czy Basic Auth jest bezpieczny?
Tylko przez HTTPS. HTTP Basic Auth wysyła poświadczenia jako base64(nazwa_użytkownika:hasło) przy każdym żądaniu, a base64 to odwracalne kodowanie — nie szyfrowanie — więc każdy, kto może odczytać ruch sieciowy, może natychmiast odzyskać hasło. Przez TLS nagłówek jest szyfrowany podczas transmisji i Basic Auth jest akceptowalny dla prostej ochrony. Nigdy nie używaj go na zwykłym HTTP i stosuj silniejsze schematy dla aplikacji o wysokiej wartości.

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.