Un hachage Bcrypt peut être stocké dans un fichier BINARY(40)
colonne.
BINARY(60)
Comme les autres réponses le suggèrent, c'est le choix le plus simple et le plus naturel, mais si vous voulez maximiser l'efficacité du stockage, vous pouvez économiser 20 octets en déconstruisant sans perte le hachage. Je l'ai documenté plus en détail sur GitHub : https://github.com/ademarre/binary-mcf
Les hachages de Bcrypt suivent une structure appelée "modular crypt format" (MCF). Binaire MCF (BMCF) décode ces représentations de hachage textuelles en une structure binaire plus compacte. Dans le cas de Bcrypt, le hachage binaire résultant est de 40 octets.
Gumbo a fait un bon travail d'explication des quatre composants d'un hachage MCF de Bcrypt :
$<id>$<cost>$<salt><digest>
Le décodage en BMCF se fait comme suit :
-
$<id>$
peut être représenté sur 3 bits.
-
<cost>$
04-31, peut être représenté sur 5 bits. Rassemblez-les pour obtenir un octet.
- Le sel à 22 caractères est une représentation (non standard) en base 64 de 128 bits. Le décodage en base-64 donne 16 octets.
- Le condensé de hachage de 31 caractères peut être décodé en base 64 en 23 octets.
- Mettez tout ça ensemble pour 40 octets :
1 + 16 + 23
Vous pouvez en lire plus au lien ci-dessus, ou examiner mon implémentation PHP également sur GitHub.
0 votes
Voir également la page de l'Openwall Cadre de hachage de mots de passe en PHP (PHPass). Il est portable et renforcé contre un certain nombre d'attaques courantes sur les mots de passe des utilisateurs. L'auteur du framework (SolarDesigner) est le même qui a écrit John The Ripper et siège en tant que juge dans le Concours de hachage de mots de passe . Donc il connaît une chose ou deux sur les attaques sur les mots de passe.
1 votes
Si quelqu'un tombe sur cette recherche d'une solution pour scrypt : La réponse de Gumbo s'applique également à scrypt. J'ai personnellement appliqué BINARY(64) dans MySQL et cela m'a permis de tester l'égalité des octets sous Python par la suite.