Le hachage d'un hachage n'offre aucune sécurité supplémentaire. (En fait, cela pourrait aggraver la situation si la personne a une table de recherche de hash-of-hash.)
Le meilleur hachage sera celui qui est le plus coûteux à effectuer sans aucune vulnérabilité. Je voudrais hash mots de passe avec au moins sha-256.
Hachez toujours vos mots de passe avec une clé salée. Cette clé doit être unique par mot de passe. Il n'a pas besoin d'être stocké en privé. Le but d'un mot de passe salé est que le pirate qui a accédé à votre base de données ne peut pas simplement comparer le hachage à une liste connue de hachages correspondant à des mots de passe communs. Au lieu de cela, il doit essayer de forcer le mot de passe en essayant tous les mots de passe possibles. En utilisant un salt unique par mot de passe, vous garantissez que chaque hash de la base de données est différent, même s'il utilise le même mot de passe.
Pour ajouter un mot de passe, créez simplement une chaîne de caractères aléatoire et ajoutez-la au mot de passe. Voici un hachage de l'échantillon avec un sel de 48 bits et 256-sha:
function make_password($password)
{
# random 48-bit salt (8 chars when base64 encoded)
$salt = base64_encode(pack('S3', mt_rand(0,0xffff), mt_rand(0,0xffff), mt_rand(0, 0xffff)));
return $salt.hash('sha256', $salt.$password);
}
function check_password($password, $hash)
{
$salt = substr($hash, 0, 8);
return hash('sha256', $salt.$password) == substr($hash, 8);
}
$password = 'password';
$hash = make_password('password');
echo $hash."\n";
var_dump(check_password('password', $hash));
var_dump(check_password('wrong', $hash));
Chaque fois que vous l'exécutez, le hachage sera différent. Pour valider un mot de passe, sélectionnez la ligne correspondant au nom d'utilisateur, puis appelez le check_password($password_from_user, $hash_from_db)
.
Voici un exemple de sortie:
AzrD1jZzc693714a43ad5dfd4106c0a620ef23ff9915070711fa170a6670b8164862b496
bool(true)
bool(false)
Vous pouvez utiliser un sel plus ou un algorithme de hachage plus fort si vous préférez. Mais au minimum, je voudrais utiliser quelque chose comme ce qui précède.
Je ne suis pas sûr de ce que vous testez? – Neal
Mieux dans quel but? Si vous recherchez la sécurité, je n'utiliserais pas MD5. L'utilisation des deux n'augmente pas la sécurité. Dans certains cas, cela peut en fait le diminuer. –
peut-être sujet n'est pas correct, mais vous voulez trouver une solution comment faire passer les utilisateurs de crack impossible ou le rendre juste difficile de le fissurer. – ZeroSuf3r