J'ai un script de connexion que je viens de commencer. Lorsqu'un nouveau mot de passe est entré, il est d'abord chiffré à l'aide de MD5, puis stocké dans la base de données.Problème avec caractère supplémentaire dans MD5 Hash?
Lorsque je tape le nom d'utilisateur et mot de passe dans mon formulaire de connexion et de le soumettre, je suis en train de vérifier le mot de passe stocké contre une variable $ _POST comme ceci:
$username = $_POST['username'];
$password = md5($_POST['password']);
//database stuff here
$q = mysql_query("SELECT * FROM Users WHERE username='$username'");
while ($row = mysql_fetch_array($q))
{
if ($row['password'] == $password)
{
echo "Passwords match.";
}
else
{
echo "Password is incorrect.";
echo "<br />Entered password: " . $password;
echo "<br />Stored password: " . $row['password'];
}
}
Ceci est juste dans les étapes de test , donc le mot de passe que j'essaie de vérifier est 'mot de passe', pour plus de simplicité. Si je génère $ _POST ['mot de passe'], j'obtiens un mot de passe - cependant, si je génère le hachage MD5 tel qu'il est stocké dans la base de données et md5 ($ _ POST ['mot de passe']), ils ne correspondent pas. Ce dernier a des caractères supplémentaires. quelquun sait pourquoi cela se passe?
1. MD5 est un algorithme très faible, utilisez quelque chose de la famille SHA-2, par exemple. SHA-256. 2. Salt vos mots de passe. 3. Utilisez PDO et les instructions préparées pour la connectivité de la base de données. – Crozin
Merci pour les conseils tout le monde! – Kendra
@Crozin: pendant que vous y êtes, mieux vaut proposer bcrypt ou PBKDF2 avec un nombre élevé d'itérations et de sel par mot de passe au lieu d'un simple hachage et sel ... –