Почему хеши паролей mysql внутренне сохраняются со звездочкой (звездочкой)?

9

Я читал о некоторых внутренностях mysql, когда просматривая таблицу mysql.user в моей mysqlоболочке, я получаю

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

Пароль явно хешируется, но почему он начинается со звездочки (звездочка)?

му 無
источник

Ответы:

8

В дополнение к паролю, начинающемуся со звездочки, здесь есть алгоритм для ПАРОЛЯ ()

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

ПРИМЕР

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>

Я давно изучил этот алгоритм из алгоритма хеширования в ПАРОЛЕ MySQL ()

RolandoMySQLDBA
источник
14

Хорошо, нашел об этом в самой документации .

Это было изменение, введенное в mysql 4.1, так что более ранние длины паролей 16 символов и более новые длины паролей 40 символов могли одновременно поддерживаться. Столбец «Пароль» имел длину 41 байт (символы), и новые пароли начинались с обязательной *их идентификации.

Из документации :

Хэши паролей в формате 4.1 всегда начинаются с символа «*», тогда как пароли в формате до 4.1 никогда не начинаются.

му 無
источник
Это было мое предположение тоже. Но это не держит воду. Они могли бы проверить длину, чтобы увидеть, был ли это новый против старого пароля.
Рик Джеймс
3
@ Рик Джеймс Конечно, можно проверить длину, но есть аргументы для использования первого символа в качестве «флага», чтобы разрешить будущие изменения, которые могут все еще использовать 40 символов, но другой алгоритм.
Монти Хардер