Générateur htpasswd — bcrypt, Apache MD5 (apr1), Basic Auth
Générez des entrées htpasswd avec bcrypt, Apache MD5 (apr1), SHA-1 et plus. Obtenez des configs Apache, nginx et Docker prêtes à coller. 100 % dans votre navigateur — aucun envoi.
Vérifier un hash existant
Qu'est-ce qu'un fichier htpasswd ?
Un fichier .htpasswd stocke les credentials utilisés par l'authentification HTTP Basic. Chaque ligne est une paire nom_utilisateur:hash, où le hash est un condensé unidirectionnel du mot de passe — le texte en clair n'est jamais stocké. Les serveurs web lisent ce fichier pour décider qui peut accéder à une URL protégée. Sur Apache, un fichier .htaccess (ou un bloc <Directory>) référence le fichier .htpasswd et invite le navigateur à saisir un nom d'utilisateur et un mot de passe avant de servir la page.
Le format du hash dépend de l'algorithme utilisé pour le produire. L'outil htpasswd d'Apache peut en émettre plusieurs : bcrypt (lignes commençant par $2y$) est le plus solide et est recommandé pour Apache, Docker Registry et Caddy ; apr1 (Apache MD5, commençant par $apr1$) est le plus portable et le choix sûr par défaut pour nginx ; SHA-1 (commençant par {SHA}) est sans sel et considéré comme non sécurisé ; crypt (DES traditionnel) est un format hérité qui tronque à 8 caractères ; et plain stocke le mot de passe en clair, ce qui ne doit jamais être utilisé en production.
Ce générateur s'exécute entièrement dans votre navigateur — aucun nom d'utilisateur, mot de passe ou hash n'est jamais envoyé. Si vous avez besoin d'un mot de passe robuste pour accompagner votre entrée, utilisez notre Générateur de mot de passe aléatoire. Pour construire manuellement l'en-tête Authorization: Basic, le credential est simplement base64(utilisateur:mot_de_passe), que vous pouvez produire avec notre Encodeur Base64. Et une fois votre endpoint protégé, testez-le depuis la ligne de commande avec notre Constructeur de commande 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.
Fonctionnalités clés
Plusieurs algorithmes de hachage
Générez des entrées bcrypt ($2y$), apr1 / Apache MD5 ($apr1$) et SHA-1 ({SHA}) — ainsi qu'une option plain (texte clair) pour les tests. Chacun utilise un sel cryptographique aléatoire lorsque le format le prend en charge.
Générer et vérifier
Créez de nouvelles entrées ou vérifiez des entrées existantes. Collez une ligne utilisateur:hash stockée et un mot de passe candidat pour confirmer instantanément s'ils correspondent — utile pour déboguer une erreur 401 en production.
Choix par serveur
Choisissez Apache, nginx, Docker ou Caddy et l'algorithme correct est sélectionné automatiquement — bcrypt là où il est pris en charge, apr1 pour la portabilité nginx — pour éviter les échecs silencieux de crypt().
Blocs de configuration prêts à coller
Obtenez six extraits de configuration copiables — Apache .htaccess, nginx auth_basic, Docker, Kubernetes ingress-nginx, Caddy et Traefik — déjà liés à votre entrée .htpasswd générée.
100 % côté client
Tout le hachage s'effectue localement dans votre navigateur via Web Crypto et une implémentation bcrypt intégrée. Aucun nom d'utilisateur, mot de passe ou hash n'est jamais envoyé à un serveur, ce qui vous permet de générer des credentials de production en toute confidentialité.
Exemples
Entrée bcrypt (recommandée)
admin:$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
Une entrée bcrypt avec un préfixe $2y$ et un coût 10. Il s'agit du format le plus solide et le plus portable — utilisez-le pour Apache, Docker Registry, Caddy et Traefik.
Entrée apr1 (nginx portable)
admin:$apr1$kl3H9j2.$qN8vY7tLp2mZ0xW5cR4fK1
Apache MD5 (apr1) avec un sel de 8 caractères après le marqueur $apr1$. Le choix sûr par défaut pour nginx, où la vérification bcrypt dépend d'une fonction crypt() système peu fiable.
Entrée SHA-1 (héritage)
admin:{SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g= Une entrée {SHA} est le base64 d'un condensé SHA-1 sans sel. Apache et nginx l'acceptent, mais elle est sans sel et non sécurisée — incluse uniquement pour la compatibilité avec les systèmes hérités.
En-tête Authorization: Basic
Authorization: Basic YWRtaW46czNjcmV0
Le credential côté client pour le même utilisateur : base64('admin:s3cret'). Envoyez cet en-tête avec curl -H ou Postman pour vous authentifier sans écrire de fichier .htpasswd.
Fichier .htpasswd multi-utilisateurs
admin:$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy alice:$2y$10$3bQ8xY7tLp2mZ0xW5cR4fO9vK1jH6sD2nG8aQ5wE3rT7uI4oP1cm bob:$apr1$mZ0xW5cR$4fK1jH6sD2nG8aQ5wE3rT2
Une ligne nom_utilisateur:hash par utilisateur. Les algorithmes peuvent être mélangés dans le même fichier — ici deux entrées bcrypt et une entrée apr1 coexistent pour trois utilisateurs.
Comment utiliser
- 1
Configurer le serveur et l'algorithme
Choisissez votre serveur cible (Apache, nginx, Docker, Caddy). L'algorithme approprié est sélectionné automatiquement — bcrypt pour Apache/Docker/Caddy, apr1 pour nginx portable — mais vous pouvez le remplacer et ajuster le coût bcrypt.
- 2
Générer le hash
Saisissez un nom d'utilisateur et un mot de passe (ou cliquez sur Mot de passe aléatoire), puis cliquez sur Générer. Le hash est calculé localement avec un sel aléatoire. Re-générez le sel à tout moment pour créer une nouvelle entrée.
- 3
Copier l'entrée
Copiez la ligne utilisateur:hash pour votre fichier .htpasswd, copiez la commande echo >> pour le terminal, ou copiez l'en-tête Authorization: Basic pour curl et Postman.
- 4
Déployer la configuration
Collez le bloc de configuration généré dans votre .htaccess Apache, le bloc serveur nginx, Docker, l'ingress Kubernetes, Caddy ou la configuration Traefik, pointez-le vers votre fichier .htpasswd et rechargez le serveur.
Cas d'utilisation courants
- Protection de répertoire Apache
- Verrouillez un dossier avec HTTP Basic Auth à l'aide d'un fichier .htaccess et d'une directive AuthUserFile. Insérez l'entrée bcrypt et le bloc de configuration Apache généré pour exiger une connexion sur n'importe quel chemin.
- nginx auth_basic
- Protégez un bloc location ou serveur avec auth_basic et auth_basic_user_file. Utilisez le format apr1 pour que la vérification fonctionne de manière fiable sur Alpine, Debian et d'autres images de base.
- Docker Registry
- Un Docker Registry privé n'accepte que les entrées htpasswd au format bcrypt. Générez une ligne $2y$ avec htpasswd -Bbn, montez-la dans le conteneur du registre et authentifiez votre docker login.
- Kubernetes ingress-nginx
- Créez un Secret basic-auth à partir de votre fichier .htpasswd et référencez-le avec les annotations nginx.ingress.kubernetes.io/auth-type et auth-secret pour contrôler l'accès à une route ingress.
- Caddy et Traefik
- La directive basic_auth de Caddy et le middleware basicauth de Traefik attendent tous deux des hashes bcrypt. Collez l'entrée générée directement dans votre Caddyfile ou vos labels/configuration dynamique Traefik.
- En-tête Authorization curl et Postman
- Évitez entièrement le fichier pour des tests rapides : copiez l'en-tête Authorization: Basic pour envoyer des credentials directement. Insérez-le dans un flag curl -H ou une requête Postman pour accéder à un endpoint protégé.
Détails techniques
- bcrypt ($2y$)
- Un hash adaptatif et salé basé sur le chiffrement Blowfish avec un facteur de coût réglable. Chaque entrée intègre un sel aléatoire de 16 octets et le coût, de sorte que des mots de passe identiques produisent des hashes différents. Remarque : bcrypt tronque le mot de passe à 72 octets — les caractères au-delà sont ignorés.
- apr1 (Apache MD5)
- La variante MD5 itérée et salée d'Apache ($apr1$ + sel de 8 caractères). Elle effectue 1 000 tours MD5, ce qui est bien moins solide que le coût adaptatif de bcrypt, mais elle est implémentée nativement par Apache et nginx, ce qui en fait le format le plus portable sur toutes les plateformes et images de base.
- SHA-1 et crypt
- Les entrées SHA-1 ({SHA} + condensé base64) sont sans sel, donc des mots de passe identiques produisent des hashes identiques et sont vulnérables aux tables arc-en-ciel — incluses uniquement pour la compatibilité avec les systèmes hérités. Le crypt traditionnel (DES) est encore plus faible et tronque silencieusement les mots de passe à 8 caractères.
- Sel et itérations
- Le salage empêche les attaques précalculées (tables arc-en-ciel) en rendant chaque hash unique. bcrypt utilise un sel aléatoire de 128 bits avec un coût configurable ; apr1 utilise un sel de 8 caractères avec 1 000 itérations fixes. Utilisez Re-générer le sel pour recalculer un hash valide différent pour le même mot de passe.
- Gestion de Base64 et UTF-8
- Les mots de passe sont encodés en octets UTF-8 avant le hachage, ce qui garantit une gestion cohérente des caractères non ASCII. L'en-tête Authorization: Basic est le base64 des octets UTF-8 bruts de nom_utilisateur:mot_de_passe, correspondant à ce que les serveurs décodent à la réception.
- Notes d'honnêteté et mises en garde
- Les hashes générés sont calculés localement et jamais vérifiés contre un serveur actif. Les entrées copiées et les fichiers .htpasswd téléchargés arrivent dans votre presse-papiers et sur votre disque sous forme de hash en texte clair — traitez-les comme des secrets, restreignez les permissions des fichiers et videz votre presse-papiers après collage dans une configuration de production.
Bonnes pratiques
- Préférez bcrypt partout où il est pris en charge
- Utilisez bcrypt ($2y$) pour Apache, Docker, Caddy et Traefik — il est salé, adaptatif et bien plus solide qu'apr1 ou SHA-1. Réservez apr1 uniquement pour nginx quand la dépendance de bcrypt à la fonction crypt() système le rend peu fiable.
- Stockez le fichier en dehors de la racine web
- Gardez .htpasswd hors de tout répertoire servi afin qu'il ne puisse jamais être téléchargé via HTTP. Définissez chmod 640 et faites-le appartenir à l'utilisateur du serveur web pour que le serveur puisse le lire tandis que les autres comptes ne le peuvent pas.
- Servez toujours via HTTPS
- Basic Auth transmet les credentials sous forme de base64 réversible à chaque requête. Sans TLS, n'importe qui sur le chemin réseau peut lire le mot de passe. N'activez jamais Basic Auth sur HTTP simple — terminez TLS devant l'endpoint protégé.
- Utilisez des mots de passe uniques et robustes
- Chaque compte doit avoir son propre mot de passe à haute entropie, jamais réutilisé sur plusieurs services. Générez-en un avec notre Générateur de mot de passe aléatoire et stockez-le dans un gestionnaire de mots de passe plutôt que de l'inventer à la main.
Foire aux questions
bcrypt ou apr1 — lequel choisir ?
nginx prend-il en charge bcrypt ?
Comment corriger l'erreur nginx `crypt_r() failed (22: Invalid argument)` ?
Où placer le fichier .htpasswd et quelles permissions lui donner ?
Comment configurer Basic Auth dans .htaccess ou nginx ?
Mes mots de passe sont-ils envoyés quelque part ?
Quelle est la différence entre $2a$, $2b$ et $2y$ en bcrypt ?
Quel coût bcrypt utiliser ?
htpasswd versus l'en-tête Authorization: Basic — quelle est la différence ?
Je n'ai pas apache2-utils installé — comment générer une entrée htpasswd ?
Que signifient les options htpasswd -B, -Bbn, -bnB ?
Pourquoi Docker Registry exige-t-il bcrypt ?
Basic Auth est-il sécurisé ?
Outils connexes
Voir tous les outils →Générateur & Constructeur de commande cURL
Web & API
Construisez des commandes curl dans votre navigateur — méthode, en-têtes, authentification et corps, obtenez instantanément une commande prête à copier. Préréglages Bearer, POST JSON, upload. Gratuit, privé, sans inscription.
Convertisseur de Base — Binaire, Hex, Décimal & Octal
Outils de conversion
Convertissez entre binaire, hexadécimal, décimal, octal et toute base (2-36) instantanément. Gratuit, privé, 100 % dans votre navigateur.
Décodeur et Encodeur Base64
Encodage et formatage
Décodez et encodez en Base64 en ligne gratuitement. Conversion en temps réel, support UTF-8 et émojis. 100 % privé, dans votre navigateur.
Convertisseur de casse — UPPERCASE, lowercase, camelCase
Traitement de texte
Convertissez instantanément du texte entre UPPERCASE, lowercase, Title Case, Sentence case, camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE et 6 autres formats. Gratuit, navigateur, sans inscription.
Convertisseur de couleurs — HEX, RGB, HSL et OKLCH
Outils de conversion
Convertissez HEX en RGB, HSL, OKLCH, OKLAB et CMYK dans votre navigateur — copiez n'importe quel format en un clic. Gratuit, sans inscription, vos couleurs ne quittent jamais la page.
Générateur crontab et constructeur d'expressions cron
Date et heure
Construisez et décodez des expressions cron dans le navigateur. Aperçu en direct de la prochaine exécution en heure locale ou UTC. POSIX 5 champs, préréglages, description claire. Gratuit et privé.