Pourquoi les hachages de mot de passe mysql sont-ils enregistrés en interne avec une étoile (astérisque)?


9

Je lisais sur certains internes de mysql, en parcourant la table mysql.user dans mon mysqlshell, j'obtiens

mysql> select * from mysql.user limit 1 \G
*************************** 1. row ***************************
                  Host: localhost
                  User: root
              Password: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B

Le mot de passe est évidemment haché, mais pourquoi commence-t-il par l'étoile (astérisque)?

Réponses:


8

En plus du mot de passe commençant par un astérisque, voici l'algorithme pour PASSWORD ()

SET @plaintextpassword = 'whatever password you want';
SELECT CONCAT('*',UPPER(SHA1(UNHEX(SHA1(@plaintextpassword)))));

EXEMPLE

mysql> SET @plaintextpassword = 'whatever password you want';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT UPPER(SHA1(UNHEX(SHA1(@plaintextpassword)))) PWD_CREATION;
+------------------------------------------+
| PWD_CREATION                             |
+------------------------------------------+
| D09AF2704D843A5E4E84362830C7EC1CEA40DF8A |
+------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT PASSWORD(@plaintextpassword) PWD_FUNCTION;
+-------------------------------------------+
| PWD_FUNCTION                              |
+-------------------------------------------+
| *D09AF2704D843A5E4E84362830C7EC1CEA40DF8A |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql>

J'ai appris cet algorithme il y a longtemps de Hashing Algorithm dans MySQL PASSWORD ()


14

Ok, trouvé à ce sujet dans la documentation elle-même .

Il s'agissait d'un changement introduit dans mysql 4.1 afin que les anciennes longueurs de mot de passe de 16 caractères et les nouvelles longueurs de mot de passe de 40 caractères puissent être prises en charge simultanément. La colonne Mot de passe était composée de 41 octets (caractères) et les nouveaux mots de passe commenceraient par obligatoirement *à les identifier.

De la documentation :

Les hachages de mot de passe au format 4.1 commencent toujours par un caractère «*», contrairement aux mots de passe au format antérieur à 4.1.


C'était aussi ma supposition. Mais il ne tient pas la route. Ils auraient pu vérifier la longueur pour voir s'il s'agissait d'un nouveau mot de passe ou d'un ancien.
Rick James

3
@Rick James Il est certainement possible de vérifier la longueur, mais il existe des arguments pour l'utilisation du premier caractère comme "indicateur" pour permettre de futures modifications qui pourraient encore utiliser 40 caractères mais un algorithme différent.
Monty Harder du
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.