Perché gli hash delle password mysql vengono salvati internamente con una stella (asterisco)?


9

Stavo leggendo alcuni interni di mysql, mentre attraversavo la tabella mysql.user nella mia mysqlshell, ho capito

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

La password è ovviamente cancellata, ma perché inizia con la stella (asterisco)?

Risposte:


8

Oltre alla password che inizia con un asterisco, ecco l'algoritmo per PASSWORD ()

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

ESEMPIO

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>

Ho imparato questo algoritmo molto tempo fa da Hashing Algorithm in MySQL PASSWORD ()


14

Ok, ho trovato questo nella documentazione stessa .

Questa è stata una modifica introdotta in mysql 4.1 in modo da poter supportare contemporaneamente le lunghezze password precedenti di 16 caratteri e lunghezze password più recenti di 40 caratteri. La colonna Password ha una lunghezza di 41 byte (caratteri) e le password più recenti inizierebbero con un obbligatorio *per identificarle.

Dalla documentazione :

Gli hash delle password nel formato 4.1 iniziano sempre con un carattere "*", mentre le password nel formato precedente alla 4.1 non lo fanno mai.


Anche questa era la mia ipotesi. Ma non trattiene l'acqua. Avrebbero potuto controllare la lunghezza per vedere se si trattava di una password nuova o vecchia.
Rick James,

3
@Rick James È certamente possibile controllare la lunghezza, ma ci sono argomenti per l'uso del primo carattere come "flag" per consentire future modifiche che potrebbero ancora usare 40 caratteri ma un algoritmo diverso.
Monty Harder,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.