Postfix + MySQL ENCRYPT (), Comment faut-il vérifier le mot de passe avec le sel randomiser?
-
30-09-2019 - |
Question
J'ai mis mon serveur de messagerie comme Dicté ici .
Il fonctionne parfaitement bien. Mon Curiousity tourne autour de l'entrée des utilisateurs dans la base de données et de les authentifier
Exécution:
INSERT INTO users (email, password) VALUES ('sales@example.com', ENCRYPT('password'));
Plusieurs fois donneront un hachage différent pour le mot de passe crypté comme l'utilisation d'un sel aléatoire. C'est à dire. Si j'entre sales@example.com trois fois avec le même mot de passe chaque hachage est différent ...
Ma question à ce, comment est-ce que le serveur Postfix peut effectivement authentifier le mot de passe lorsqu'un utilisateur se connecte via un client de messagerie?
Il n'y a pas de problème par exemple car il fonctionne très bien, plus juste pour satisfaire ma curiosité pour que je puisse bien comprendre ce qui se passe dans les coulisses pour authentifier correctement le mot de passe crypté.
La solution
Lire la crypte de l'homme:. Elle retourne le sel dans les deux premiers caractères de la valeur de retour
Ainsi, le sel ne soit pas perdu, vous pouvez comparer la chaîne cryptée au résultat de la crypte ( « pass », $ first_two_chars_of_encrypted_value).
Autres conseils
Postfix compare le mot de passe de la base de données à un nouveau Crypter fait avec le sel (mot de passe db).
pour Crypter:
update user set password = ENCRYPT('1234') where id = 1
pour vérifier le mot de passe:
SELECT u.* FROM user u where u.email ='admin@dominio.com'
and ENCRYPT('1234', u.password) = u.password
Vous devez utiliser ENCRYPT ( « pass », « sel ») pour forcer un sel, sinon le sel est perdu à jamais et vous avez aucun moyen de le récupérer. fonction assez inutile sans elle. Il est une terrible fonction à utiliser, cependant, parce que la sécurité est si minime; utilisation PASSWORD () ou OLD_PASSWORD () à la place.
ENCRYPT () utilise la crypte du système (), qui peut utiliser la totalité ou seulement les 8 premiers caractères doivent être imprimables ASCII 7 bits, utilise généralement une tour de hachage à base de DES, et est complètement non portable. A éviter.