Aller au contenu principal

Générateur de hash bcrypt

Le format .htpasswd recommandé, en 3 clics

Vous voulez ajouter un compte à un fichier .htpasswd avec l'algorithme recommandé, sans installer apache2-utils ? Saisissez un identifiant et un mot de passe : la ligne au format $2y$ est prête à coller.

Le coût est un exposant : chaque cran double le temps de calcul. 10 est la valeur d'htpasswd -B, 12 un bon compromis aujourd'hui.

Points clés de l'outil

Format $2y$ natif

Le hachage bcrypt d'htpasswd -B, dérivé de Blowfish. Compatible Apache 2.4, nginx, Traefik et Caddy.

Facteur de coût réglable

De 4 à 15, par curseur. Chaque cran double le travail exigé d'un attaquant. 10 par défaut, comme htpasswd -B.

Ligne prête à coller

Le résultat est affiché sous forme de ligne user:hash complète, directement copiable dans votre fichier .htpasswd.

Sel tiré à chaque appel

Un sel de 128 bits est intégré au hash par bcrypt. Deux comptes au même mot de passe donnent deux hash différents.

Rien n'est conservé

Le mot de passe sert au calcul puis disparaît. Aucune trace en base, aucun journal du mot de passe en clair.

Pourquoi générer un hash bcrypt en ligne ?

L'authentification HTTP Basic reste la façon la plus rapide de fermer un espace d'administration, une préproduction ou un tableau de bord interne. Elle repose sur un fichier .htpasswd où chaque ligne associe un identifiant à un mot de passe haché - jamais en clair.

Depuis Apache 2.4, la commande htpasswd -B produit du bcrypt, et c'est le format que recommande la documentation officielle. Le hic : cette commande suppose d'avoir installé apache2-utils sur Debian ou httpd-tools sur RHEL. Sur un poste Windows, sur un hébergement mutualisé ou depuis une interface web, elle manque souvent.

Trois situations où ce générateur dépanne :

  • Protéger une préproduction → Fermer l'accès à un environnement de recette avant qu'il ne soit indexé par Google
  • Ajouter un compte sans accès SSH → Créer la ligne depuis le navigateur et la coller via le gestionnaire de fichiers de votre hébergeur
  • Moderniser un fichier existant → Remplacer progressivement des entrées $apr1$ par des entrées $2y$

Comment utiliser le générateur en 3 étapes

Étape 1 : Saisir l'identifiant et le mot de passe

Renseignez le nom du compte, puis son mot de passe. Le champ est masqué par défaut ; cliquez sur l'oeil pour relire votre saisie avant de valider. Le bouton "Générer un mot de passe" tire une chaîne aléatoire de 16 caractères si vous n'en avez pas déjà un.

Étape 2 : Régler le facteur de coût

Le curseur part de 10, la valeur d'htpasswd -B. Montez à 12 pour un accès sensible. Chaque cran double le temps de calcul : à la génération comme à chaque vérification par le serveur.

Étape 3 : Copier la ligne

Deux résultats sont affichés : le hash seul et la ligne .htpasswd complète. Copiez celle-ci, collez-la dans votre fichier, puis rechargez la configuration du serveur.


Anatomie d'un hash bcrypt

Une ligne .htpasswd se découpe en deux champs séparés par un deux-points :

admin:$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy

Le second champ se décompose ainsi :

PartieExempleRôle
Identifiant d'algorithme2yIndique au serveur qu'il s'agit de bcrypt
Facteur de coût10Exposant : le calcul enchaîne 2^10 = 1 024 tours
Sel + digestN9qo8uLOickgx2ZMRZoMye...53 caractères : 22 pour le sel de 128 bits, 31 pour l'empreinte

Contrairement à l'APR1-MD5, le sel n'occupe pas un champ séparé : il est collé au digest dans le dernier bloc. Il reste lisible en clair, ce qui est normal - son rôle n'est pas d'être secret, mais d'empêcher qu'une table pré-calculée serve à retrouver le mot de passe.


Comprendre le facteur de coût

Le coût est un exposant, pas un multiplicateur. Un coût de N enchaîne 2^N tours de dérivation de clé :

CoûtToursTemps indicatifUsage
8256~15 msTrop faible aujourd'hui
101 024~60 msDéfaut d'htpasswd -B, correct
124 096~250 msRecommandé pour un accès sensible
1416 384~1 sLatence perceptible à chaque connexion

Deux choses à garder en tête. D'abord, ce temps est payé à chaque vérification, donc à chaque requête HTTP Basic : un coût de 14 sur une page chargée par un navigateur qui rejoue l'authentification à chaque ressource se sent tout de suite. Ensuite, le bon réglage dépend de votre matériel : mesurez plutôt que de recopier une valeur, la cible habituelle étant 100 à 250 ms sur le serveur qui fera la vérification.


Protéger un répertoire avec Apache

1. Créer le fichier

Placez votre fichier .htpasswd hors de la racine web, pour qu'il ne soit jamais servi par HTTP :

/var/www/secrets/.htpasswd

2. Déclarer la protection

Dans le .htaccess du répertoire à protéger, ou dans le bloc <Directory> de votre VirtualHost :

AuthType Basic
AuthName "Zone reservee"
AuthUserFile /var/www/secrets/.htpasswd
Require valid-user

3. Recharger la configuration

sudo apachectl configtest && sudo systemctl reload apache2

Pour nginx, la même paire de fichiers se déclare ainsi :

location /admin/ {
    auth_basic           "Zone reservee";
    auth_basic_user_file /var/www/secrets/.htpasswd;
}

nginx lit bcrypt depuis la version 1.0.3 sur les systèmes dont la crypt_r() le supporte, ce qui couvre toutes les distributions Linux courantes.


bcrypt face aux autres formats .htpasswd

FormatPréfixeCoût de calculVerdict
bcrypt$2y$Réglable, 2^coût toursRecommandé pour tout nouveau projet
APR1-MD5$apr1$1 000 itérations MD5Acceptable, compatibilité maximale
SHA-1{SHA}1 itération, sans selÀ éviter : pas de sel, cassable par table
crypt() DESaucun25 itérations, tronqué à 8 caractèresObsolète, à ne plus utiliser

En résumé : bcrypt est le seul format .htpasswd dont le coût s'ajuste au matériel de l'époque. Les trois autres ont un coût figé, décidé dans les années 1990 ou 2000, que le progrès des GPU a rendu dérisoire. Ne gardez l'APR1-MD5 que si votre serveur ne sait pas lire $2y$.


Vérifier le hash en ligne de commande

Le résultat de cet outil est un hash bcrypt standard, vérifiable par les utilitaires système :

# Générer l'équivalent avec htpasswd (paquet apache2-utils / httpd-tools)
htpasswd -nbB admin monMotDePasse

# Imposer un facteur de coût de 12
htpasswd -nbB -C 12 admin monMotDePasse

Les deux chaînes ne seront pas identiques - le sel diffère à chaque tirage - mais toutes deux valident le même mot de passe. Pour le contrôler :

# Rejouer la vérification avec le sel du hash existant
python3 -c "import bcrypt,sys; print(bcrypt.checkpw(b'monMotDePasse', sys.argv[1].encode()))" '$2y$10$...'

FAQ - Questions fréquentes

Q : Qu'est-ce que le format $2y$ ?

R : C'est le marqueur de bcrypt dans un fichier .htpasswd. Le hash complet suit le motif $2y$<coût>$<sel><digest> : un identifiant d'algorithme, un facteur de coût sur deux chiffres, puis 53 caractères contenant le sel de 128 bits et l'empreinte. C'est ce qu'écrit htpasswd -B.


Q : Quelle différence entre $2a$, $2b$ et $2y$ ?

R : Aucune sur le fond, ce sont trois marqueurs du même algorithme. $2y$ a été introduit par PHP en 2011 pour signaler une implémentation corrigée d'un bug sur les caractères non-ASCII, bug absent de la bibliothèque utilisée ici. Apache et nginx acceptent les trois.


Q : Quel facteur de coût choisir ?

R : 10 par défaut, 12 pour un accès sensible. Le bon réflexe est de mesurer sur le serveur qui fera la vérification et de viser 100 à 250 ms : c'est assez lent pour gêner une attaque par dictionnaire, assez rapide pour ne pas se voir à l'usage.


Q : Pourquoi ne puis-je pas dépasser 15 ?

R : Le coût étant un exposant, 16 demande déjà plusieurs secondes de calcul et dépasserait le temps imparti à une requête HTTP. Pour un coût supérieur, générez le hash en local avec htpasswd -B -C 18.


Q : bcrypt est-il meilleur qu'APR1-MD5 ?

R : Oui, nettement. APR1-MD5 enchaîne 1 000 itérations de MD5, que du matériel spécialisé calcule par milliards par seconde. bcrypt exige de la mémoire et des accès non séquentiels, ce qui limite fortement le parallélisme d'un GPU. Pour un nouveau fichier .htpasswd, bcrypt sans hésiter.


Q : Puis-je utiliser un mot de passe de plus de 72 caractères ?

R : Non, et ce n'est pas une limite de cet outil : bcrypt ignore purement et simplement tout ce qui dépasse 72 octets. Un mot de passe de 80 caractères serait donc équivalent à ses 72 premiers. Attention, un caractère accentué compte pour deux octets en UTF-8.


Q : Le mot de passe est-il stocké quelque part ?

R : Non. Il transite en HTTPS jusqu'à l'API CaptainDNS le temps du calcul, puis il est oublié. Ni base de données, ni journal contenant le mot de passe en clair.


Q : Où placer le fichier .htpasswd ?

R : Hors de la racine web, par exemple dans /var/www/secrets/. S'il est placé dans un répertoire servi par HTTP, un visiteur pourrait le télécharger et attaquer les hash hors ligne - ce qui est précisément ce que le facteur de coût rend coûteux, mais pas impossible.


Outils complémentaires

OutilUtilité
Générateur APR1-MD5Produire une ligne .htpasswd au format Apache historique
Générateur de mots de passeTirer un mot de passe solide avant de le hasher
Hash GeneratorCalculer MD5, SHA-1, SHA-256 et SHA-512 d'un texte
Encodeur Base64Encoder l'en-tête Authorization d'une requête Basic
Analyseur d'en-têtes HTTPVérifier les en-têtes renvoyés par un espace protégé

Ressources utiles


Engagement confidentialité

Votre mot de passe est transmis à l'API CaptainDNS uniquement pour calculer le hash, sur une connexion chiffrée. Il n'est ni stocké ni journalisé. Seules des métriques techniques anonymes sont conservées (durée de traitement, code de réponse).