Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quel type/longueur de colonne dois-je utiliser pour stocker un mot de passe haché Bcrypt dans une base de données ?

Le format de cryptage modulaire pour bcrypt se compose de

  • $2$ , $2a$ ou $2y$ identifiant l'algorithme et le format de hachage
  • une valeur à deux chiffres indiquant le paramètre de coût, suivie de $
  • une valeur codée en base 64 de 53 caractères (ils utilisent l'alphabet . , / , 09 , AZ , az qui est différent du Encodage Base 64 standard alphabet) composé de :
    • 22 caractères de sel (en fait seulement 128 bits sur les 132 bits décodés)
    • 31 caractères de sortie cryptée (en réalité seulement 184 bits sur les 186 bits décodés)

Ainsi, la longueur totale est respectivement de 59 ou 60 octets.

Comme vous utilisez le format 2a, vous aurez besoin de 60 octets. Et donc pour MySQL, je recommanderai d'utiliser le CHAR(60) BINARY ou BINARY(60) (voir Le _bin et binaire Classements pour plus d'informations sur la différence).

CHAR n'est pas binaire sûr et l'égalité ne dépend pas uniquement de la valeur de l'octet mais du classement réel ; dans le pire des cas A est traité comme égal à a . Voir Le _bin et binary Classements pour plus d'informations.