Un hash bcrypt ne peut pas être « déchiffré » : pour savoir si un mot de passe est le bon, utilisez le mode Vérifier. Tout est calculé dans votre navigateur et le mot de passe n'est envoyé à aucun serveur.
Version actuelle. Générée par OpenBSD, Node.js, Python, Go et Rust.
Chaque point de coût double le temps de calcul. L'OWASP recommande au moins 10 ; l'idéal est la valeur la plus élevée que votre serveur calcule en environ 250 ms.
Comment ça marche
bcrypt est une fonction de hachage conçue pour stocker des mots de passe. Contrairement à SHA-256 ou MD5, calculés en quelques microsecondes, bcrypt est volontairement lent : ainsi, quiconque vole une base de données met des années à tester des mots de passe par force brute.
Chaque hash contient tout ce qu'il faut pour le vérifier : la version de l'algorithme, le coût et un sel aléatoire de 128 bits. C'est pourquoi le même mot de passe donne un hash différent à chaque fois et qu'il n'est pas nécessaire de stocker le sel séparément.
Le coût est le logarithme en base 2 du nombre de tours : avec un coût de 10, on calcule 1024 tours et avec un coût de 12, 4096. Augmenter d'un point double le temps de calcul, ce qui permet de suivre la hausse de puissance du matériel sans changer d'algorithme.
Exemples
rasmuslerdorf$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1aL'exemple de password_verify() du manuel PHP : collez-le en mode Vérifier avec ce mot de passe et il correspond.abc$2a$06$If6bvum7DFjUnE9p2uDeDu0YHzrHM6tf.iqN8.yx.jNN1ILEf7h0iUn vecteur de test de jBCrypt avec un coût de 6. Les 22 premiers caractères après le coût sont le sel ; les 31 restants, l'empreinte.Cas d'usage
- Créer le hash du mot de passe initial d'un utilisateur administrateur pour l'insérer directement dans la base de données.
- Vérifier si un mot de passe correspond au hash enregistré lorsqu'un utilisateur ne parvient pas à se connecter.
- Générer des hashs de test pour des fixtures, des seeds ou des tests automatisés d'une application Laravel, Spring, Django ou Node.js.
- Mesurer le temps que prend chaque coût pour choisir la bonne valeur avant de la configurer sur le serveur.
- Créer des entrées pour les fichiers .htpasswd d'Apache, qui acceptent les hashs bcrypt avec le préfixe $2y$.
Questions fréquentes
Peut-on déchiffrer un hash bcrypt ?
Non. bcrypt est une fonction à sens unique : il n'existe aucun moyen de retrouver le mot de passe à partir du hash. La seule possibilité est d'essayer des mots de passe candidats et de voir si l'un d'eux correspond, ce que bcrypt rend justement lent.
Quelle différence entre $2a$, $2b$ et $2y$ ?
Les trois calculent la même chose pour des mots de passe normaux. $2a$ est la version d'origine ; PHP a introduit $2y$ en 2011 pour distinguer ses hashs de ceux d'une implémentation boguée ; OpenBSD a adopté $2b$ en 2014 en corrigeant un autre bogue avec les mots de passe de plus de 255 caractères. Presque toutes les bibliothèques acceptent les trois lors de la vérification.
Quel coût utiliser ?
L'OWASP recommande au moins 10. L'idéal est la valeur la plus élevée que votre serveur peut calculer en environ 250 ms par connexion. Spring Security utilise 10 par défaut ; Laravel 11 et PHP 8.4 ont relevé le leur à 12.
Pourquoi bcrypt ignore-t-il ce qui dépasse 72 octets ?
L'algorithme utilise le mot de passe comme clé Blowfish, qui accepte jusqu'à 72 octets. Le surplus est ignoré sans avertissement : deux mots de passe qui partagent les 72 premiers octets donnent donc le même hash. Les caractères accentués ou les emojis occupent de deux à quatre octets ; c'est pourquoi l'outil compte des octets et non des caractères.
Vaut-il mieux bcrypt ou Argon2 ?
Argon2id est aujourd'hui l'algorithme recommandé pour les nouveaux systèmes car, en plus d'être lent, il utilise beaucoup de mémoire, ce qui renchérit les attaques par GPU. bcrypt reste néanmoins sûr avec un coût adapté et c'est celui utilisé par défaut dans PHP, Laravel, Spring et Ruby on Rails.
Mon mot de passe est-il envoyé à un serveur ?
Non. Le hash et la vérification sont calculés dans votre navigateur et le mot de passe ne quitte jamais votre appareil ; il n'est pas non plus inclus dans le lien de partage de l'outil.