Mise à jour : La simple utilisation d'une fonction de hachage n'est pas assez forte 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 renforçant les clés comme Bcrypt ou Argon2i. Par exemple, en PHP, utilisez la méthode 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 varieront, car elle génère un sel unique).
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
Utiliser le type de données SQL CHAR(60)
pour stocker cet encodage d'un hash Bcrypt. Notez que cette fonction n'est pas codée comme une chaîne de chiffres hexadécimaux, nous ne pouvons donc pas la décomposer aussi facilement pour la stocker en binaire.
Les autres fonctions de hachage ont toujours leur utilité, mais pas pour le stockage des mots de passe. Je vais donc conserver 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 en texte, sous la forme d'une série de chiffres hexadécimaux. Vous pouvez également utiliser la fonction UNHEX()
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 pouvez avoir besoin de CHAR(56), CHAR(60), CHAR(76), BINARY(56) ou BINARY(60).
En 2015, le NIST recommande d'utiliser SHA-256 ou plus pour toutes les applications de fonctions de hachage nécessitant une interopérabilité. Mais le NIST ne recommande pas l'utilisation de ces fonctions de hachage simples pour le stockage sécurisé des mots de passe.
Les algorithmes de hachage de moindre importance ont leur utilité (par exemple en interne dans une application, pas pour l'échange), mais ils sont les suivants connu pour être craquable .
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.
3 votes
Ne fixez pas de limite supérieure pour vos mots de passe. Vous les hachurez, il n'y a aucune raison de stockage pour une limite supérieure. Si vous vous inquiétez des attaques DoS utilisant le hachage du mot de passe, 1000 ou 1024 est une limite supérieure raisonnable.
0 votes
Pourquoi limiter la longueur du mot de passe ? Laissez au moins un utilisateur créer un mot de passe de 100 caractères :)
0 votes
4 caractères est une limite inférieure assez dangereuse pour les mots de passe, car ils sont triviaux à craquer. Utilisez au moins 8 caractères, mais 14 ou 16 sont bien mieux.
0 votes
Il s'agit d'une question très ancienne avec une réponse dépassée. Voir l'article de Gilles responder pour être à jour.