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

Quel type de données utiliser pour le champ de mot de passe haché et quelle longueur ?

Mise à jour :La simple utilisation d'une fonction de hachage n'est pas assez puissante pour stocker les mots de passe. Vous devriez lire la réponse de Gilles sur ce fil pour une explication plus détaillée.

Pour les mots de passe, utilisez un algorithme de hachage de renforcement de clé comme Bcrypt ou Argon2i. Par exemple, en PHP, utilisez la fonction password_hash() , qui utilise Bcrypt par défaut.

$hash = password_hash("rasmuslerdorf", PASSWORD_DEFAULT);

Le résultat est une chaîne de 60 caractères semblable à la suivante (mais les chiffres varient, car elle génère un sel unique).

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

Utilisez le type de données SQL CHAR(60) pour stocker cet encodage d'un hachage Bcrypt. Notez que cette fonction ne s'encode pas comme une chaîne de chiffres hexadécimaux, nous ne pouvons donc pas aussi facilement la déhexer pour la stocker en binaire.

D'autres fonctions de hachage ont encore des utilisations, mais pas pour stocker des mots de passe, donc je garderai la réponse originale ci-dessous, écrite en 2008.

Cela dépend de l'algorithme de hachage que vous utilisez. Le hachage produit toujours un résultat de même longueur, quelle que soit l'entrée. Il est courant de représenter le résultat du hachage binaire dans le texte, sous la forme d'une série de chiffres hexadécimaux. Ou vous pouvez utiliser le UNHEX() fonction pour réduire de moitié une chaîne de chiffres hexadécimaux.

  • MD5 génère une valeur de hachage de 128 bits. Vous pouvez utiliser CHAR(32) ou BINARY(16)
  • SHA-1 génère une valeur de hachage de 160 bits. Vous pouvez utiliser CHAR(40) ou BINARY(20)
  • SHA-224 génère une valeur de hachage de 224 bits. Vous pouvez utiliser CHAR(56) ou BINARY(28)
  • SHA-256 génère une valeur de hachage de 256 bits. Vous pouvez utiliser CHAR(64) ou BINARY(32)
  • SHA-384 génère une valeur de hachage de 384 bits. Vous pouvez utiliser CHAR(96) ou BINARY(48)
  • SHA-512 génère une valeur de hachage de 512 bits. Vous pouvez utiliser CHAR(128) ou BINARY(64)
  • BCrypt génère une valeur de hachage de 448 bits dépendant de l'implémentation. Vous peut nécessiter CHAR(56), CHAR(60), CHAR(76), BINARY(56) ou BINARY(60)

Depuis 2015, le NIST recommande d'utiliser SHA-256 ou supérieur pour toutes les applications de fonctions de hachage nécessitant une interopérabilité. Mais le NIST ne recommande pas d'utiliser ces simples fonctions de hachage pour stocker les mots de passe en toute sécurité.

Les algorithmes de hachage inférieurs ont leurs utilisations (comme internes à une application, pas pour l'échange), mais ils sont connu pour être craquable .