sha512-crypt mysql et dovecot
j'ai une question sur la compréhension de SHA512-Crypt hashing. J'ai trouvé ce tutoriel configurer dovecot et postfix avec mysql. J'ai suivi le tutoriel (avec de légères modifications) et tout fonctionne très bien. Mais il y a une chose que je ne comprends pas:
ajouter un utilisateur, il faut utiliser:
INSERT INTO `mailserver`.`virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
('1', '1', ENCRYPT('firstpassword', CONCAT('$', SUBSTRING(SHA(RAND()), -16))), 'email1@example.com'),
('2', '1', ENCRYPT('secondpassword', CONCAT('$', SUBSTRING(SHA(RAND()), -16))), 'email2@example.com');
et encore une fois, cela fonctionne parfaitement, i.e. je peux me connecter avec mon mot de passe (et seulement mon mot de passe) à dovecot. Mais pourquoi? Si je vois à droite, il crypte le mot de passe avec un sel aléatoire, mais il ne le sauve nulle part. Donc, Hasher le même mot de passe deux fois me donne 2 hashes différents (je l'ai essayé). Donc, ma question se résume à: Puis-je obtenir une brève explication de sha-512 (que je n'ai pas pu trouver en ligne) et une explication quant à la raison pour laquelle ces lignes fonctionnent?
Merci déjà
1 réponses
le sel est sauvegardé dans le mot de passe. Par exemple un appel:
ENCRYPT('firstpassword', CONCAT('$', 'FooBarBaz'))
Donne
$6$FooBarBaz$.T. G. 7frjqz6n2ff7b3bekr5j37cwhwgvpoooocrrr0bvkbbnmmlcxzqqkjbnhnhc.583dTBLEuZcDuQe7NEe.
cela stocke à la fois l'algorithme utilisé (6 étant SHA512) et le sel ('FooBarBaz') tous deux délinéés par $
.
Edit: Pour vérifier un mot de passe, vous pouvez utiliser:
password = ENCRYPT('user_input', `password`)
ENCRYPT
saisira le sel du stock mot de passe et utilisez ceci pour vérifier user_input
.
crédit total à hek2mgl pour la vérification du mot de passe qu'il a détaillé dans cette réponse.