Command Palette

Search for a command to run...

Comment fonctionne Bcrypt : sel, facteur de coût et limites

Comment fonctionne Bcrypt : sel, facteur de coût et limites

T
Toolz Team
|Sep 13, 2026|17 min Lire
Préférez Toolz.dev sur Google

Fait partie de la collection Sécurité

Générateur Bcrypt

Générez et vérifiez les hachages de mot de passe bcrypt dans le navigateur avec un facteur de coût réglable

Utilisez le Générateur Bcrypt

La première fois que j'ai expédié un système de connexion, j'ai fait ce que tous les didacticiels de cette époque me disaient de faire : stocké md5($password) dans la table des utilisateurs et est passé à autre chose Cela a fonctionné, et ce fut tranquillement un désastre Des années à créer l'authentification dans les plugins WordPress et les applications Laravel plus tard, j'ai un respect beaucoup plus sain pour l'écart entre &quot ; le contrôle de mot de passe passe et quot ; et &quot ; les mots de passe sont sûrs si cette base de données fuit.&quot ; Bcrypt est l'outil qui comble la majeure partie de cet écart, et c'est la valeur par défaut dans presque tous les frameworks que j'atteins. J'ai donc construit un générateur bcrypt sur Toolz.dev cela hachage un mot de passe avec un facteur de coût que vous contrôlez, vérifie un mot de passe par rapport à un hachage existant et le fait tout dans votre navigateur afin que rien de ce que vous tapez ne soit jamais envoyé nulle part. C'est le guide qui le guide et se crypte.

tl;dr : Bcrypt transforme un mot de passe en un hachage salé, délibérément lent de 60 caractères, de sorte qu'une base de données divulguée n'est pas une liste de mots de passe divulguée. Le Toolz générateur bcrypt hachage n'importe quel mot de passe avec un facteur de coût réglable (4 à 31), vérifie un mot de passe par rapport à un hachage que vous collez et affiche la version, le coût et le sel qu'il a analysés. Il produit la norme $2b$ formatez cet OpenBSD, PHP password_hashLes bibliothèques bcrypt de Laravel et Node acceptent toutes et s'exécutent entièrement côté client.

Qu'est-ce que bcrypt ?

Bcrypt est une fonction de hachage de mots de passe conçue par Niels Provos et David Mazieres et présentée dans leur article USENIX de 1999 &quot ; Un schéma de mots de passe et un devis adaptables à l'avenir ;. Il est construit sur le chiffrement par bloc Blowfish, mais avec une touche : au lieu de chiffrer les données, il exécute Blowfish&#39 ; son étape de configuration de clé encore et encore, en utilisant le mot de passe et un sel aléatoire comme matériau clé. Le résultat est un hachage unidirectionnel qui est peu coûteux à calculer une fois et coûteux à calculer un milliard de fois, ce qui correspond exactement aux besoins de stockage de mots de passe de la propriété.

Ce &quot ; cher sur purpose&quot ; idée en est le cœur Un hachage à usage général comme SHA-256 est conçu pour être rapide, car les sommes de contrôle et les contrôles d'intégrité veulent de la vitesse Le hachage de mot de passe veut le contraire Si un attaquant vole votre base de données, la seule chose qui se trouve entre eux et chaque mot de passe en texte clair est le temps qu'il faut pour deviner Un hachage rapide permet à un GPU moderne de tester des milliards de candidats par seconde ; un hachage de bcrypt à un coût raisonnable plafonne qu'à quelques milliers par seconde par noyau Même fichier divulgué, résultat follement différent.

Bcrypt a survécu plus de deux décennies parce qu'il a obtenu les fondamentaux corrects et parce qu'il est adaptable Le facteur de coût signifie que le même algorithme qui a été réglé pour 1999 matériel peut être commuté pour 2026 matériel sans changer quoi que ce soit d'autre Il reste une option recommandée dans le Feuille de triche de stockage de mots de passe OWASP(traduction), et c'est la valeur par défaut de Laravel, Spring Security et bien d'autres piles dans lesquelles je travaille. Si vous voulez avoir un aperçu plus approfondi des raisons pour lesquelles les hachages rapides ne conviennent pas à ce travail, le outils en ligne de confidentialité des données guide couvre le raisonnement qui a poussé toute l'industrie vers un hachage lent et salé.

Que contient un hachage bcrypt ?

L'une des choses les plus agréables à propos de bcrypt est que sa sortie est auto-descrivant Prenez un vrai hachage :

$2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW

Lisez de gauche à droite, divisez-le sur les signes dollar, et il vous indique tout le nécessaire pour vérifier un mot de passe par rapport à celui-ci :

champ de courses exemple éloquent
version 2b La variante bcrypt. 2b est le format OpenBSD corrigé actuel
coûter 12 Le facteur de travail. La configuration des clés s'exécute 2^12 = 4096 itérations
Sel R9h/cIPz0gi.URNNX3kh2O 22 caractères de Base64 personnalisé, décodage à 16 octets aléatoires
Digérer PST9/PgBkqquzi.Ss7KIUgO2t0jWMUW 31 caractères codant la sortie bcrypt de 23 octets

Parce que le sel et le coût vivent à l'intérieur de la ficelle, la vérification n'a besoin de rien d'autre Lorsque vous collez un hachage dans le générateur bcrypt vérifiez le mode, il lit le coût et le sel directement hors de la chaîne, recalcule le résumé avec ce sel exact et compare Il n'y a pas de colonne de sel séparée à gérer, ce qui est l'une des raisons pour lesquelles bcrypt est si agréable à stocker : il s'agit d'un seul champ opaque dans votre table d'utilisateurs.

L'alphabet Base64 personnalisé vaut une note, car il fait trébucher les gens. Bcrypt utilise ./A-Za-z0-9[traduction], qui est un ordre différent de la Base64 standard Un sel de bcrypt n'est pas une chaîne Base64 standard, alors n'essayez pas de le décoder avec un outil Base64 générique et attendez-vous à des octets significatifs Si vous êtes curieux de connaître la variante standard utilisée partout ailleurs, le encodage base64 guide parcourt l'alphabet normal et où il apparaît.

Comment générer un hachage bcrypt ?

Dans l'outil, il est trois étapes : tapez un mot de passe, choisissez un coût, cliquez sur Générer Sous le capot, générer un hachage fait plus qu'il n'y paraît D'abord un sel aléatoire cryptographiquement fort de 16 octets est créé à l'aide de l'API Web Crypto Ensuite bcrypt exécute son programme de clés coûteux, ensemençant Blowfish avec le mot de passe et le sel et itérant 2^cost times Enfin il crypte une chaîne magique fixe (&quot ; OrpheanBeholderScryDoubt&quot ;) 64 fois avec l'état de chiffrement résultant et code la sortie Base64-code-cette danse entière produit le hachage de caractères.

La surprise la plus courante est que le hachage du même mot de passe deux fois donne deux hachages différents. C'est correct et intentionnel. Chaque hachage reçoit son propre sel aléatoire, donc deux utilisateurs qui choisissent tous les deux hunter2 finissez avec des valeurs stockées complètement différentes Un attaquant qui vole la table ne peut pas dire que deux comptes partagent un mot de passe, et ne peut pas réutiliser une table précalculée sur les comptes Si vous voulez reproduire un hachage spécifique pour les tests, vous fournissez la chaîne de sel complète plutôt qu'un coût nu, ce qui est exactement ce que fait le mode de vérification en interne.

Dans votre code d'application vous n'assemblez jamais rien de tout cela à la main Vous appelez la bibliothèque :

// PHP
$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
// Node with bcrypt / bcryptjs
const hash = await bcrypt.hash(password, 12)
// Laravel
use Illuminate\Support\Facades\Hash;
$hash = Hash::make($password); // bcrypt by default

L'outil Toolz est destiné aux moments autour de ce code : vérifier la santé mentale à quoi ressemble un hachage à un coût donné, générer un hachage connu pour un semoir ou un appareil de test, ou confirmer qu'un hachage que vous avez trouvé dans une configuration correspond au mot de passe que vous pensez que c'est le cas.

Comment choisir un facteur de coût ?

Le facteur de coût est le bouton auquel vous devez penser, et la réponse honnête est &quot ; mesure, ne copiez pas.&quot ; La règle générale de l'OWASP est qu'un seul hachage doit prendre environ un quart de seconde sur votre matériel de production. Cette cible équilibre deux forces opposées : trop faible et vous faites craquer bon marché, trop élevé et chaque connexion légitime paie le prix, ce qui est important lorsqu'un point final occupé se précipite sur chaque demande.

Parce que le coût est une puissance de deux, chaque étape double le travail Le coût 11 est deux fois plus lent que le coût 10, le coût 12 est quatre fois plus lent Sur le matériel serveur typique des années 2020, le coût 10 à 12 atterrit dans le bon voisinage, c'est pourquoi les frameworks y font défaut L'outil affiche une estimation approximative du temps lorsque vous faites glisser le curseur afin que vous puissiez sentir à quelle vitesse le coût se compose, mais traitez cela comme un guide relatif, pas comme une référence de votre serveur Le nombre réel dépend de votre CPU, et la seule façon de le savoir est le temps password_hash sur la boîte qui va le faire tourner.

Un modèle pratique qui mérite d'être connu : parce que le coût est stocké dans chaque hachage, vous pouvez le relever au fil du temps sans migration. Lors d'une connexion réussie, vous avez le texte en clair en main pendant un instant, vous vérifiez donc si le coût du hachage stocké et n°39 ; est inférieur à votre objectif actuel et, si tel est le cas, le ressac et la mise à jour. PHP expose cela directement via password_needs_rehash. Cela signifie que votre sécurité suit le rythme du matériel sans jamais forcer une réinitialisation du mot de passe.

Bcrypt contre SHA-256, Argon2 et scrypt

La comparaison qui compte le plus est bcrypt contre un hachage rapide simple, et contre les fonctions plus récentes de mémoire-difficile Voici comment ils s'alignent pour le stockage de mot de passe :

Fonction Salé Lentement exprès Mémoire dure Bon pour les mots de passe ?
MD5/SHA-256 Non (en soi) non non Non, beaucoup trop vite
bcrypt Oui, intégré Oui, coût accordable non Oui, recommandé
scrypter oui oui oui oui
Argon2id oui oui oui Oui, préféré pour les nouveaux systèmes

Un SHA-256 nu d'un mot de passe, même salé, n'est pas le bon outil : il est conçu pour la vitesse, donc une base de données divulguée de hachages SHA-256 salés tombe rapidement sur un GPU. Si vous n'avez besoin que d'un résumé rapide pour une somme de contrôle ou une clé de cache plutôt que d'un mot de passe, c'est ce que le générateur de hachage est pour, et la distinction est tout le point Argon2id, le gagnant du Password Hashing Competition 2015, ajoute la dureté de la mémoire, qui résiste au matériel personnalisé qui peut accélérer bcrypt, et c'est le premier choix pour un tout nouveau système où vous contrôlez l'exécution Mais bcrypt n'est pas obsolète Il est testé au combat, c'est la valeur par défaut dans les outils que j'utilise quotidiennement, et le choisir est une décision judicieuse, surtout lorsque votre framework l'expédie L'erreur d'éviter n'est pas &quot ; bcrypt au lieu d'Argon2, &quot ; c'est &quot rapide hashing hashing sécurité au lieu d'un plus large utilitaires ; Outils de productivité des développeurs guide a la carte.

Qu'en est-il de la limite de 72 octets et des autres gotchas ?

Bcrypt lit uniquement les 72 premiers octets du mot de passe Tout ce qui est ignoré silencieusement, ce qui pour les mots de passe normaux n'a jamais d'importance mais peut mordre une phrase secrète très longue, en particulier celle avec des caractères UTF-8 multi-octets où le nombre d'octets grimpe plus vite que le nombre de caractères L'outil vous avertit chaque fois que votre entrée croise 72 octets UTF-8 de sorte que la troncature n'est jamais une surprise silencieuse Certains systèmes fonctionnent autour de la limite en pré-hashant le mot de passe avec SHA-256 et Base64-encodant avant de le remettre à bcrypt, ce qui replie arbitrairement un mot de passe court ; si vous le faites régulièrement.

L'autre gotcha est le préfixe de version Vous verrez $2a$, $2y$, et $2b$ dans la nature. $2a$ était l'original, $2y$ une balise spécifique à PHP a-t-elle été introduite après qu'un bug d'extension de signe ait été trouvé dans certaines implémentations, et $2b$ est la version OpenBSD corrigée actuelle Pour les nouveaux hachages que vous souhaitez $2b$[TRADUCTION], c'est ce que produit cet outil Tous les trois vérifient de façon identique pour les mots de passe ASCII ordinaires ; les différences ne font surface qu'avec des octets non ASCII particuliers près de la limite de 72 octets Lorsque vous collez un jeton dans un outil qui inspecte également les informations d'identification structurées, comme le Décodeur JWT« Gardez à l'esprit qu'un hachage bcrypt n'est pas un jeton que vous décodez pour lire une charge utile ; c'est un résumé à sens unique sans rien révéler. ».

Où le générateur bcrypt s'intègre dans un véritable flux de travail

À lui seul, un hachage ne représente que la moitié de l'histoire, donc le mixeur se trouve aux côtés des autres outils d'identification que je garde ouverts. Lorsque je sélectionne une base de données de test ou que je configure un compte de démonstration, je génère le mot de passe lui-même avec le générateur de mot de passe(en), vérifiez qu'il dégage une barre de force sensible avec le vérificateur de force de mot de passe(en), et seulement ensuite le faire passer à travers le générateur bcrypt pour obtenir le hachage stocké Cet ordre compte : un mot de passe aléatoire fort derrière un hachage de chiffrement de coût 12 b est vraiment difficile à déchiffrer, tandis qu'un mot de passe faible derrière le même hachage tombe toujours sous le coup d'une attaque par dictionnaire, car l'attaquant n'a qu'à deviner la poignée de candidats probables plutôt que l'ensemble de l'espace de clés. Le facteur de coût vous fait gagner du temps ; l'entropie du mot de passe est ce contre quoi ce temps est consacré.

Le mode verifie gagne sa place lors du débogage Lorsqu'une connexion échoue mystérieusement dans la mise en scène, le moyen le plus rapide d'isoler le problème est de coller le hachage stocké et le mot de passe que vous croyez correct et de voir s'ils correspondent Une correspondance signifie que le bug est en amont, dans la façon dont le mot de passe atteint la vérification ; une inadéquation signifie que le hachage stocké a été écrit avec un mot de passe différent ou un encodage mutilé L'une ou l'autre réponse vous évite de deviner, et comme le tout s'exécute localement, vous pouvez le faire avec un véritable hachage extrait d'une base de données sans que ce hachage quitte jamais votre machine C'est le même principe du côté client derrière chaque outil du site, et pour tout cela n'informations d'identification.

Questions fréquentes

Est-il sécuritaire de hacher un vrai mot de passe dans ce générateur bcrypt ?

Oui, parce que le hachage se passe entièrement dans votre navigateur et que rien n'est envoyé n'importe où Vous pouvez le confirmer dans l'onglet Réseau de vos outils de développement : générer un hachage ne fait aucune demande Cela dit, un onglet de navigateur n'est pas un gestionnaire de mots de passe, alors évitez de coller les informations d'identification en direct d'un compte de production dans n'importe quelle page Web que vous n'avez pas construite, et fermez l'onglet lorsque vous avez terminé.

Pourquoi le même mot de passe produit-il à chaque fois un hachage bcrypt différent ?

Parce que bcrypt génère un nouveau sel aléatoire pour chaque hachage et le mélange dans le résultat C'est une fonctionnalité : deux utilisateurs qui choisissent le même mot de passe obtiennent toujours des hachages stockés différents, de sorte qu'un attaquant ne peut pas repérer les mots de passe partagés ou réutiliser une table précalculée La vérification fonctionne toujours car le sel est stocké à l'intérieur de la chaîne de hachage elle-même.

Quel facteur de coût dois-je utiliser pour bcrypt ?

Utilisez le coût le plus élevé que votre flux de connexion peut tolérer sans un retard ennuyeux, ce qui pour la plupart des serveurs des années 2020 coûte de 10 à 12. OWASP suggère qu'un seul hachage devrait prendre environ un quart de seconde sur votre matériel de production. Parce que chaque étape double le travail, mesurez sur votre propre serveur plutôt que de copier un nombre, et augmentez le coût toutes les quelques années à mesure que le matériel s'accélère.

Un hachage bcrypt peut-il être inversé en retour vers le mot de passe ?

No. Bcrypt est une fonction à sens unique, il n'y a donc pas de moyen mathématique de transformer un hachage en mot de passe original La seule attaque est de deviner : un attaquant hache les mots de passe candidats avec le même sel et le même coût et vérifie une correspondance C'est pourquoi le facteur de coût est important, car il définit le prix de chaque supposition, et pourquoi des mots de passe uniques forts plus un coût élevé rendent les suppositions peu pratiques.

Est-ce que bcrypt est toujours sécurisé en 2026, ou dois-je passer à Argon2 ?

Bcrypt est toujours considéré comme sécurisé pour le stockage de mots de passe et reste une option recommandée dans la feuille de triche OWASP Password Storage. Argon2id, le gagnant du concours de hachage de mots de passe 2015, est préféré pour les nouveaux systèmes où vous contrôlez le runtime car il résiste également aux attaques GPU et matériel spécialisé. Bcrypt est un choix judicieux, surtout lorsque votre framework l'expédie par défaut ; la véritable erreur consiste à utiliser un hachage rapide à usage général au lieu de toute fonction de hachage de mots de passe.

Quelle est la limite de 72 octets dans bcrypt ?

Bcrypt lit uniquement les 72 premiers octets du mot de passe codé UTF-8, donc tous les caractères au-delà sont ignorés Pour les mots de passe normaux, cela n'a jamais d'importance, mais une très longue phrase secrète peut être tronquée, c'est pourquoi certains systèmes pré-hachent le mot de passe avec SHA-256 avant bcrypt Cet outil vous avertit chaque fois que votre entrée dépasse 72 octets donc la troncature n'est jamais une surprise.

Que signifient les préfixes $2a$, $2b$ et $2y$ ?

Ce sont des balises de version pour le format de sortie bcrypt. $2 a$ était l'original, $2y$ était un correctif spécifique à PHP pour un bug d'extension de signe, et $2b$ est la version OpenBSD corrigée actuelle Pour les nouveaux hachages $2 b$ est correct, ce que cet outil produit Tous les trois vérifient de manière identique pour les mots de passe ASCII ; les différences n'apparaissent qu'avec certains octets non-ASCII à la limite des 72 octets.

Est-ce que bcrypt est identique au cryptage ?

Non. Le cryptage est réversible avec une clé, donc les données cryptées peuvent être déchiffrées vers l'original. Le hachage Bcrypt est à sens unique et délibérément lent, et il est destiné uniquement à la vérification : vous n'avez jamais besoin de récupérer le mot de passe, seulement pour confirmer que quelqu'un a tapé le bon. Stocker les mots de passe avec cryptage au lieu de hachage est un anti-modèle, car celui qui détient la clé peut récupérer chaque mot de passe.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!