php - decrypter - Le meilleur moyen de stocker les mots de passe dans une base de données mysql?




mysql cryptage données (4)

Dupliquer possible:
Comment conserver au mieux les informations sur l'utilisateur, le login et le mot de passe de l'utilisateur
Comment utilisez-vous bcrypt pour hacher les mots de passe en PHP?

Je suis habitué à utiliser le md5 () dont je sais qu'il est maintenant obsolète et j'entends que sha1 () est également non sécurisé. Alors, quelle est exactement la meilleure façon de stocker et de récupérer les mots de passe dans une base de données ces jours-ci avec la sécurité à l'esprit? Je serais très heureux si vous pouvez fournir un petit exemple.

Je vous remercie!


Nous utilisons la crypt avec Blowfish:

// Hash our password
$hashed = crypt($plain_text_password, '$2a$08$' . substr(hash('whirlpool', microtime()), rand(0, 105), 22));

// Validate a password
if (crypt($plain_text_password, $hashed) == $hashed)) {
    // Valid password
}

Le préfixe de sel $2a$ (lisez les docs) est ce qui indique à crypt d'utiliser Blowfish. Et en supposant que l'implémentation de crypt(3) dans le système d'exploitation sous-jacent le supporte, vous l'obtenez "gratuitement".


Vous pouvez rechercher beaucoup de codes de cryptage ou les mélanger par exemple comme ceci:

sha1(md5(sha1($pw)));

Je trouve cela inutile alors ce que j'utilise c'est SHA512 hash("sha512",$pw);


Vous devriez vraiment utiliser bcrypt pour hacher vos mots de passe, il a été spécialement conçu pour le hachage du mot de passe.

Les fonctions de hachage pour les mots de passe doivent être lentes (nécessite un peu de temps de calcul). La plupart des algorithmes de hachage comme SHA-1 et MD5 ou même SHA-256 sont conçus pour être rapides, mais cela en fait une cible facile pour les attaques par force brute. Un GPU standard est capable de calculer environ 8 hash Giga MD5 par seconde!

N'ayez pas peur d'utiliser bcrypt! Ce n'est pas seulement pour les sites de haute sécurité, et l'utiliser peut être aussi simple que d'utiliser un hachage md5. Il est recommandé d'utiliser une bibliothèque bien établie comme phpass , et si vous voulez comprendre comment elle peut être implémentée, vous pouvez lire cet article , où j'ai essayé d'expliquer les points les plus importants.

METTRE À JOUR:

Les versions actuelles de PHP proposent les fonctions password_hash () et password_verify () pour gérer les mots de passe. Utilisez-les comme ceci:

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);





passwords