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à

7
demandé sur ciem 2014-06-12 17:48:41

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.

11
répondu Jim 2017-05-23 12:00:10