web-dev-qa-db-fra.com

Comment utiliser l'algorithme `bcrypt` dans la fonction` encrypt` dans MySQL pour vérifier le mot de passe?

J'ai une valeur bcryptée ($2y$10$zQaDT8hXM4pLmBdwN0xEseda/oKJAQKMKMzUrV8jbs6Epz28BXzBS) du mot de passe (qwe). Mais lorsque je vérifie, je me trompe de valeur de hachage.

mysql> select '$2y$10$zQaDT8hXM4pLmBdwN0xEseda/oKJAQKMKMzUrV8jbs6Epz28BXzBS' = encrypt('qwe', '$2y$10$zQaDT8hXM4pLmBdwN0xEseda/oKJAQKMKMzUrV8jbs6Epz28BXzBS') as is_valid; 
+----------+
| is_valid |
+----------+
|        0 |
+----------+

select encrypt('qwe', '$2y$10$zQaDT8hXM4pLmBdwN0xEseda/oKJAQKMKMzUrV8jbs6Epz28BXzBS') as hash;
+---------------+
| hash          |
+---------------+
| $2tBKnsbV2Szg |
+---------------+

md5 fonctionne bien

mysql> select '$1$$.dCRcHz4ApIYzcA0g/qz3/' = encrypt('qwe', '$1$$.dCRcHz4ApIYzcA0g/qz3/') as is_valid; 
+----------+
| is_valid |
+----------+
|        1 |
+----------+

Comment ajouter le support de bcrypt à MySQL?

13
sectus

Tu ne peux pas. La fonction MySQL ENCRYPT() utilise la fonction crypt() du système d'exploitation - si votre système d'exploitation ne prend pas en charge les hachages bcrypt, MySQL ne les prendra pas en charge non plus.

N'utilisez pas non plus la fonction MySQL ENCRYPT(). Comme l'a noté ircmaxell, toutes les données que vous transmettez à une requête MySQL peuvent se retrouver dans les fichiers journaux du serveur, il est donc potentiellement dangereux de les utiliser pour tout ce qui concerne le mot de passe.

21