Skip to content

htpasswd Generator — bcrypt, Apache MD5 (apr1) & Basic Auth

htpasswd-Einträge mit bcrypt, Apache MD5 (apr1), SHA-1 u. v. m. erzeugen. Fertige Konfigs für Apache, nginx & Docker. 100 % im Browser — kein Upload.

Kein Tracking Läuft im Browser Kostenlos
100 % im Browser — Passwörter verlassen Ihr Gerät nie.
Server
bcrypt cost: 12
htpasswd-Eintrag
Authorization-Header
 
Vorhandenen Hash verifizieren
Geprüft auf Hash-Korrektheit und Konformität mit Basic-Auth-Standards — Go Tools Engineering Team · Jun 4, 2026

Was ist eine htpasswd-Datei?

Eine .htpasswd-Datei speichert die Zugangsdaten für HTTP Basic Authentication. Jede Zeile ist ein einzelnes username:hash-Paar, wobei der Hash ein Einweg-Digest des Passworts ist — der Klartext wird nie gespeichert. Webserver lesen diese Datei, um zu entscheiden, wer auf eine geschützte URL zugreifen darf. Bei Apache referenziert eine .htaccess-Datei (oder ein <Directory>-Block) die .htpasswd-Datei und fordert den Browser vor der Auslieferung der Seite zur Eingabe von Benutzername und Passwort auf.

Das Hash-Format hängt vom verwendeten Algorithmus ab. Apaches htpasswd-Tool kann mehrere ausgeben: bcrypt (Zeilen mit $2y$) ist am stärksten und wird für Apache, Docker Registry und Caddy empfohlen; apr1 (Apache MD5, beginnend mit $apr1$) ist am portabelsten und der sichere Standard für nginx; SHA-1 (beginnend mit {SHA}) ist unsalted und gilt als unsicher; crypt (traditionelles DES) ist veraltet und kürzt Passwörter auf 8 Zeichen; und plain speichert das Passwort im Klartext, was in der Produktion niemals verwendet werden sollte.

Dieser Generator läuft vollständig in Ihrem Browser — kein Benutzername, kein Passwort und kein Hash wird jemals hochgeladen. Wenn Sie ein starkes Passwort für Ihren Eintrag benötigen, verwenden Sie unseren Zufallspasswort-Generator. Um den Authorization: Basic-Header manuell zu erstellen, ist der Credential einfach base64(user:password), den Sie mit unserem Base64-Encoder erzeugen können. Und sobald Ihr Endpunkt geschützt ist, testen Sie ihn per Kommandozeile mit unserem cURL Command Builder.

# 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.

Hauptfunktionen

Mehrere Hash-Algorithmen

Erzeugen Sie bcrypt ($2y$)-, apr1 / Apache MD5 ($apr1$)- und SHA-1 ({SHA})-Einträge — plus eine Klartextoption zum Testen. Jeder verwendet einen frischen kryptografischen Salt, sofern das Format dies unterstützt.

Generieren und Verifizieren

Erstellen Sie neue Einträge oder prüfen Sie vorhandene. Fügen Sie eine gespeicherte user:hash-Zeile und ein Kandidatenpasswort ein, um sofort zu bestätigen, ob sie übereinstimmen — hilfreich beim Debuggen eines 401 in der Produktion.

Nach Server auswählen

Wählen Sie Apache, nginx, Docker oder Caddy, und der korrekte Algorithmus wird automatisch ausgewählt — bcrypt wo unterstützt, apr1 für nginx-Portabilität — sodass Sie stille crypt()-Fehler vermeiden.

Fertige Konfigurations-Blöcke

Erhalten Sie sechs kopierfertige Konfigurations-Snippets — Apache .htaccess, nginx auth_basic, Docker, Kubernetes ingress-nginx, Caddy und Traefik — bereits auf Ihren generierten .htpasswd-Eintrag abgestimmt.

100 % clientseitig

Alle Hashes werden lokal in Ihrem Browser via Web Crypto und einer mitgelieferten bcrypt-Implementierung berechnet. Kein Benutzername, Passwort oder Hash wird jemals an einen Server gesendet, sodass Sie Produktions-Credentials privat erzeugen können.

Beispiele

bcrypt-Eintrag (empfohlen)

admin:$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy

Ein bcrypt-Eintrag mit $2y$-Präfix und Cost 10. Dies ist das stärkste und portabelste Format — verwenden Sie es für Apache, Docker Registry, Caddy und Traefik.

apr1-Eintrag (portables nginx)

admin:$apr1$kl3H9j2.$qN8vY7tLp2mZ0xW5cR4fK1

Apache MD5 (apr1) mit einem 8-Zeichen-Salt nach dem $apr1$-Marker. Der sichere Standard für nginx, bei dem die bcrypt-Verifikation von einer unzuverlässigen System-crypt() abhängt.

SHA-1-Eintrag (veraltet)

admin:{SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g=

Ein {SHA}-Eintrag ist das base64 eines unsalted SHA-1-Digests. Apache und nginx akzeptieren ihn, aber er ist unsalted und unsicher — nur zur Abwärtskompatibilität enthalten.

Authorization: Basic-Header

Authorization: Basic YWRtaW46czNjcmV0

Das clientseitige Credential für denselben Benutzer: base64('admin:s3cret'). Senden Sie diesen Header mit curl -H oder Postman, um sich zu authentifizieren, ohne eine .htpasswd-Datei zu benötigen.

Mehrbenutzige .htpasswd-Datei

admin:$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
alice:$2y$10$3bQ8xY7tLp2mZ0xW5cR4fO9vK1jH6sD2nG8aQ5wE3rT7uI4oP1cm
bob:$apr1$mZ0xW5cR$4fK1jH6sD2nG8aQ5wE3rT2

Eine username:hash-Zeile pro Benutzer. Algorithmen können in derselben Datei gemischt werden — hier koexistieren zwei bcrypt-Einträge und ein apr1-Eintrag für drei Benutzer.

Verwendung

  1. 1

    Server & Algorithmus konfigurieren

    Wählen Sie Ihren Zielserver (Apache, nginx, Docker, Caddy). Der richtige Algorithmus wird automatisch ausgewählt — bcrypt für Apache/Docker/Caddy, apr1 für portables nginx — kann aber überschrieben und der bcrypt-Cost angepasst werden.

  2. 2

    Hash generieren

    Geben Sie Benutzernamen und Passwort ein (oder klicken Sie auf Zufallspasswort) und klicken Sie auf Generieren. Der Hash wird lokal mit einem frischen Zufallssalt berechnet. Salt jederzeit neu würfeln, um einen neuen Eintrag zu erzeugen.

  3. 3

    Eintrag kopieren

    Kopieren Sie die user:hash-Zeile für Ihre .htpasswd-Datei, den echo >>-Befehl für die Shell oder den Authorization: Basic-Header für curl und Postman.

  4. 4

    Konfiguration bereitstellen

    Fügen Sie den generierten Konfigurationsblock in Ihre Apache-.htaccess, den nginx-Server-Block, Docker, Kubernetes-Ingress, Caddy oder Traefik-Konfiguration ein, verweisen Sie auf Ihre .htpasswd-Datei und laden Sie den Server neu.

Anwendungsfälle

Apache-Verzeichnisschutz
Sichern Sie einen Ordner mit HTTP Basic Auth per .htaccess-Datei und einer AuthUserFile-Direktive. Fügen Sie den bcrypt-Eintrag und den generierten Apache-Konfigurationsblock ein, um eine Anmeldung für jeden Pfad zu erzwingen.
nginx auth_basic
Schützen Sie einen Location- oder Server-Block mit auth_basic und auth_basic_user_file. Verwenden Sie das apr1-Format, damit die Verifikation über Alpine, Debian und andere Basis-Images hinweg zuverlässig funktioniert.
Docker Registry
Eine private Docker Registry akzeptiert nur bcrypt-htpasswd-Einträge. Erzeugen Sie eine $2y$-Zeile mit htpasswd -Bbn, binden Sie sie in den Registry-Container ein und authentifizieren Sie Ihr docker login.
Kubernetes ingress-nginx
Erstellen Sie ein basic-auth-Secret aus Ihrer .htpasswd-Datei und referenzieren Sie es mit den Annotationen nginx.ingress.kubernetes.io/auth-type und auth-secret, um eine Ingress-Route abzusichern.
Caddy & Traefik
Caddys basic_auth-Direktive und Traefiks basicauth-Middleware erwarten beide bcrypt-Hashes. Fügen Sie den generierten Eintrag direkt in Ihre Caddyfile oder Traefik-Labels/Dynamic-Config ein.
curl- & Postman-Authorization-Header
Überspringen Sie die Datei für schnelle Tests: Kopieren Sie den Authorization: Basic-Header, um Credentials direkt zu senden. Fügen Sie ihn als curl-H-Flag oder in eine Postman-Anfrage ein, um einen geschützten Endpunkt zu erreichen.

Technische Details

bcrypt ($2y$)
Ein adaptiver, gesalteter Hash basierend auf der Blowfish-Verschlüsselung mit einem konfigurierbaren Cost-Faktor. Jeder Eintrag enthält einen zufälligen 16-Byte-Salt und den Cost, sodass identische Passwörter unterschiedliche Hashes erzeugen. Hinweis: bcrypt kürzt das Passwort auf 72 Bytes — darüber hinausgehende Zeichen werden ignoriert.
apr1 (Apache MD5)
Apaches iterierte, gesaltete MD5-Variante ($apr1$ + 8-Zeichen-Salt). Sie führt 1.000 MD5-Runden aus, was weit schwächer als bcryptes adaptiver Cost ist, aber von Apache und nginx nativ implementiert wird und damit das portabelste Format über Plattformen und Basis-Images hinweg ist.
SHA-1 und crypt
SHA-1-Einträge ({SHA} + base64-Digest) sind unsalted, sodass identische Passwörter identische Hashes ergeben und für Rainbow-Table-Angriffe anfällig sind — nur zur Abwärtskompatibilität enthalten. Traditionelles crypt (DES) ist noch schwächer und kürzt Passwörter stillschweigend auf 8 Zeichen.
Salt & Iterationen
Salting verhindert vorberechnete (Rainbow-Table-)Angriffe, indem jeder Hash einzigartig wird. bcrypt verwendet einen 128-Bit-Zufallssalt mit konfigurierbarem Cost; apr1 einen 8-Zeichen-Salt mit 1.000 festen Iterationen. Verwenden Sie Salt neu würfeln, um einen anderen gültigen Hash für dasselbe Passwort zu erzeugen.
Base64 & UTF-8-Behandlung
Passwörter werden vor dem Hashing als UTF-8-Bytes kodiert, sodass Nicht-ASCII-Zeichen konsistent behandelt werden. Der Authorization: Basic-Header ist das base64 der rohen UTF-8-Bytes von username:password, entsprechend dem, was Server auf der Empfängerseite dekodieren.
Hinweise & Vorbehalte
Generierte Hashes werden lokal berechnet und nie gegen einen Live-Server verifiziert. Kopierte Einträge und heruntergeladene .htpasswd-Dateien landen in Plaintext-Hash-Form in Ihrer Zwischenablage und auf der Festplatte — behandeln Sie sie wie Geheimnisse, schränken Sie die Dateiberechtigungen ein und löschen Sie Ihre Zwischenablage nach dem Einfügen in Produktions-Konfigurationen.

Best Practices

bcrypt bevorzugen, wo unterstützt
Verwenden Sie bcrypt ($2y$) für Apache, Docker, Caddy und Traefik — es ist gesaltet, adaptiv und deutlich stärker als apr1 oder SHA-1. Reservieren Sie apr1 nur für nginx, wenn bcryptes Abhängigkeit von der System-crypt() es unzuverlässig macht.
Datei außerhalb des Web-Root speichern
Halten Sie .htpasswd aus jedem ausgelieferten Verzeichnis heraus, damit sie nie per HTTP heruntergeladen werden kann. Setzen Sie chmod 640 und machen Sie sie dem Webserver-Benutzer zum Eigentümer, damit der Server sie lesen kann, andere Konten jedoch nicht.
Immer über HTTPS betreiben
Basic Auth überträgt Credentials bei jeder Anfrage als umkehrbares base64. Ohne TLS kann jeder im Netzwerkpfad das Passwort lesen. Aktivieren Sie Basic Auth nie über plain HTTP — terminieren Sie TLS vor dem geschützten Endpunkt.
Einzigartige, starke Passwörter verwenden
Jedes Konto sollte sein eigenes hochentropisches Passwort haben, das nie über Dienste hinweg wiederverwendet wird. Generieren Sie eines mit unserem Zufallspasswort-Generator und speichern Sie es in einem Passwort-Manager, anstatt es manuell zu erfinden.

Häufig gestellte Fragen

bcrypt vs. apr1 — welches soll ich wählen?
Verwenden Sie bcrypt für Apache, Docker Registry, Caddy und Traefik — es ist ein starker, gesalteter, adaptiver Hash und der moderne Standard. Verwenden Sie apr1 (Apache MD5) für nginx, da nginx bcrypt an die System-crypt() weitergibt und dies auf vielen Builds fehlschlägt, während apr1 intern implementiert ist und überall funktioniert. Wenn Sie die Laufzeitumgebung kontrollieren und wissen, dass bcrypt unterstützt wird, ist bcrypt immer die stärkere Wahl; apr1 geht es um Portabilität, nicht um Sicherheit.
Unterstützt nginx bcrypt?
Nur indirekt und nicht zuverlässig. nginx hasht Passwörter nicht selbst — bei $2y$-Einträgen delegiert es die Verifikation an die crypt()-Funktion der C-Bibliothek, sodass die Unterstützung vollständig von Ihrer libc abhängt. Alpines musl und ältere glibc-Builds enthalten das Blowfish-(bcrypt)-Schema nicht, sodass die Authentifizierung stillschweigend fehlschlägt. Verwenden Sie für portable nginx-Setups stattdessen das apr1-Format, das nginx intern auf jeder Plattform verifiziert.
Wie behebe ich den nginx-Fehler `crypt_r() failed (22: Invalid argument)`?
Dieser Fehler bedeutet, dass nginx versucht hat, einen bcrypt ($2y$)-Hash auf einer libc zu verifizieren, die das Blowfish-Schema nicht unterstützt — typischerweise Alpine/musl oder ein älteres glibc. Die Lösung ist, den Eintrag als apr1 (Apache MD5) statt als bcrypt zu regenerieren, das nginx intern auf jeder Plattform verifiziert. Alternativ können Sie auf ein Basis-Image wechseln, dessen libc bcrypt-Unterstützung enthält, aber apr1 ist die einfachere, portable Lösung.
Wo soll ich die .htpasswd-Datei ablegen und welche Berechtigungen?
Speichern Sie die .htpasswd-Datei außerhalb des Web-Document-Root, damit sie nie als statische Datei ausgeliefert und offengelegt werden kann. Ein gängiger Speicherort ist /etc/apache2/.htpasswd oder /etc/nginx/.htpasswd. Setzen Sie die Berechtigungen auf 640 (chmod 640) und machen Sie sie dem Benutzer, unter dem der Webserver läuft (z. B. www-data oder nginx), zum Eigentümer, sodass der Server sie lesen kann, andere Konten jedoch nicht.
Wie konfiguriere ich Basic Auth in .htaccess / nginx?
Für Apache generiert dieses Tool einen .htaccess-Block mit AuthType Basic, AuthName, AuthUserFile, der auf Ihren .htpasswd-Pfad zeigt, und Require valid-user. Für nginx erzeugt es einen Location-Block mit auth_basic "Restricted"; und auth_basic_user_file /path/.htpasswd;. Kopieren Sie den zu Ihrem Server passenden Konfigurationsblock, passen Sie den Dateipfad an und laden Sie neu — die Snippets sind einfügebereit.
Werden meine Passwörter irgendwo hochgeladen?
Nein. Jeder Hash wird vollständig in Ihrem Browser mit JavaScript berechnet — kein Benutzername, Passwort oder generierter Hash wird jemals über das Netzwerk übertragen. Sie können dies bestätigen, indem Sie die Entwicklertools Ihres Browsers öffnen (F12 → Netzwerk-Tab) während der Generierung: Es gibt null ausgehende Anfragen. Nichts wird auf einem Server gespeichert oder protokolliert, sodass es sicher ist, echte Produktions-Credentials hier zu generieren.
Was ist der Unterschied zwischen $2a$, $2b$ und $2y$ bei bcrypt?
Es sind Versionspräfixe für denselben bcrypt-Algorithmus, die äquivalente Hashes erzeugen; die Unterschiede gehen auf historische Fehlerbehebungen in der Handhabung von High-Bit-Zeichen und String-Längen zurück. Apaches htpasswd gibt $2y$ aus. Moderne bcrypt-Bibliotheken behandeln $2a$, $2b$ und $2y$ bei der Verifikation als austauschbar, sodass ein hier erzeugter $2y$-Eintrag in Apache, Caddy, Traefik und Docker Registry korrekt validiert wird.
Welchen bcrypt-Cost sollte ich verwenden?
Cost 12 ist der moderne Standard und eine gute Balance aus Sicherheit und Geschwindigkeit. Der Cost ist ein Work-Factor: jede Erhöhung verdoppelt die Zeit für Berechnung und Verifikation des Hashes, was Brute-Force-Angriffe verlangsamt, aber auch bei jeder Anmeldung Latenz hinzufügt. Cost 10 ist für wenig frequentierte oder risikoarme Endpunkte akzeptabel; 12–14 wird für alles Sensible empfohlen. Vermeiden Sie einen so hohen Wert, dass die legitime Authentifizierung spürbar langsam wird.
htpasswd vs. Authorization: Basic-Header — was ist der Unterschied?
Sie befinden sich an entgegengesetzten Enden desselben Austauschs. Die .htpasswd-Datei enthält den serverseitig gespeicherten Hash — einen Einweg-Digest, den der Server zur Verifikation der Credentials verwendet. Der Authorization: Basic-Header ist das clientseitige Anfrage-Credential: das wörtliche base64 von username:password, das der Browser oder curl bei jeder Anfrage sendet. Der Server base64-dekodiert den Header und prüft dann das Passwort gegen den gespeicherten Hash. Eines ist Speicherung, das andere ist Transport.
Ich habe apache2-utils nicht installiert — wie erzeuge ich einen htpasswd-Eintrag?
Sie benötigen es nicht — dieses Tool erzeugt gültige bcrypt-, apr1- und SHA-1-Einträge vollständig in Ihrem Browser. Wenn Sie die Kommandozeile bevorzugen, ist OpenSSL auf fast jedem System vorhanden: Führen Sie openssl passwd -apr1 aus, um einen apr1-Hash zu erzeugen, und stellen Sie dann username: voran, um die Zeile zu bilden. Unter Debian/Ubuntu können Sie die htpasswd-Binärdatei auch via apt install apache2-utils installieren, oder httpd-tools unter RHEL/CentOS.
Was bedeuten die htpasswd-Flags -B, -Bbn, -bnB?
Jeder Buchstabe ist ein eigenständiges Flag: -B wählt bcrypt, -n gibt das Ergebnis auf stdout aus statt in eine Datei zu schreiben, und -b nimmt das Passwort als Kommandozeilenargument (statt es abzufragen). Die Reihenfolge spielt keine Rolle, daher sind -Bbn und -bnB identisch. -Bbn ist die gebräuchliche Kombination zum Weiterleiten eines bcrypt-Eintrags in eine Docker-Registry-htpasswd-Datei.
Warum erfordert Docker Registry bcrypt?
Das htpasswd-Authentifizierungs-Backend der Docker Registry akzeptiert nur bcrypt-formatierte Einträge; apr1-, SHA-1- und crypt-Hashes werden abgelehnt und die Anmeldung schlägt fehl. Erzeugen Sie den Eintrag mit htpasswd -Bbn user password (oder verwenden Sie die bcrypt-Option hier), binden Sie die Datei in den Registry-Container ein und verweisen Sie REGISTRY_AUTH_HTPASSWD_PATH darauf. Kombinieren Sie dies immer mit TLS, da Basic-Auth-Credentials sonst im Transit lesbar sind.
Ist Basic Auth sicher?
Nur über HTTPS. HTTP Basic Auth sendet Credentials bei jeder Anfrage als base64(username:password), und base64 ist eine umkehrbare Kodierung — keine Verschlüsselung — sodass jeder, der den Datenverkehr lesen kann, das Passwort sofort wiederherstellen kann. Über TLS ist der Header im Transit verschlüsselt, und Basic Auth ist für einfache Absicherungen akzeptabel. Verwenden Sie es nie über plain HTTP und bevorzugen Sie stärkere Verfahren für sicherheitskritische Anwendungen.

Verwandte Werkzeuge

Alle Werkzeuge anzeigen →

cURL-Befehlsgenerator & Builder

Web & API

curl-Befehle im Browser erstellen — Methode, Header, Auth und Body einstellen, fertig copierbaren Befehl sofort erhalten. Vorlagen für Bearer, POST JSON, Datei-Upload. Kostenlos, privat.

Zahlensystem-Konverter — Binär, Hex, Dezimal & Oktal

Konvertierungswerkzeuge

Zahlen zwischen Binär, Hexadezimal, Dezimal, Oktal und beliebigen Basen (2–36) sofort konvertieren. Kostenlos, privat, ohne Anmeldung — alles läuft in Ihrem Browser.

Base64-Dekodierer & -Kodierer

Kodierung & Formatierung

Base64 online kostenlos dekodieren und kodieren. Echtzeitkonvertierung mit voller UTF-8- und Emoji-Unterstützung. 100 % privat — läuft in Ihrem Browser. Keine Anmeldung nötig.

Case-Konverter — UPPERCASE, lowercase, camelCase & mehr

Textverarbeitung

Konvertieren Sie Text sofort zwischen UPPERCASE, lowercase, Title Case, Sentence case, camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE und 6 weiteren Formaten. Kostenlos, nur im Browser, ohne Anmeldung.

Farbkonverter — HEX, RGB, HSL & OKLCH

Konvertierungswerkzeuge

Konvertieren Sie HEX zu RGB, HSL, OKLCH, OKLAB und CMYK direkt im Browser — jedes Format mit einem Klick kopieren. Kostenlos, ohne Anmeldung, Ihre Farben verlassen die Seite nie.

Crontab Generator & Cron-Ausdruck Builder

Datum & Uhrzeit

Erstellen, validieren und entschlüsseln Sie Cron-Ausdrücke im Browser. Live-Vorschau der nächsten Läufe in lokaler Zeit oder UTC. POSIX-5-Feld-Syntax, Voreinstellungen, Klartextbeschreibung. Kostenlos, privat, ohne Anmeldung.