Назад | Перейти на главную страницу

SHA256-CRYPT в MySQL8 (был MySQL 8 SHA2 по сравнению с Dovecot SHA256-CRYPT)

Здесь есть длинная предыстория, но вкратце я не могу заставить MySQL 8 и Dovecot генерировать одни и те же хэши SHA256 с той же солью и паролем.

Обновить: Похоже, что SHA256-CRYPT не просто берет соль и добавляет ее к паролю. Фактически он использует соль и пароль умеренно сложным способом, который требует, чтобы алгоритм имел их как две отдельные части, а не одну недифференцированную строку (см. это описание склепа написано одним из сопровождающих glibc), поэтому я не могу реализовать наивную реализацию, которую пробовал ниже. Следовательно, возникает вопрос: есть ли в MySQL пользовательская функция, которая может обращаться к алгоритмам CRYPT? Кажется, я не могу найти ни одного; однако фактические пароли пользователей MySQL 8 теперь, похоже, используют именно это (см. Блог сервера MySQL, новый плагин аутентификации по умолчанию, что оставляет мне надежду, что такая функция действительно существует. Является ли?

Старые детали ниже

Голубятня:

$doveadm pw -s SHA256-CRYPT -p apassword                   
{SHA256-CRYPT}$5$h1JEsg1tmnTGS9Ub$Saoi1jr/uddYVD.n5p0hz70H9slnubpG7MQCkzpAiu4

Затем я хватаю эту соль (h1JEsg1tmnTGS9Ub) и попробуйте получить тот же результат из MySQL 8:

SELECT CONCAT('$5$', 'h1JEsg1tmnTGS9Ub', '$', TO_BASE64(UNHEX(SHA2(CONCAT('apassword', 'h1JEsg1tmnTGS9Ub'), 256)))) WHERE true
$5$h1JEsg1tmnTGS9Ub$Vm9gPbWHuXt/zslurPQ7Nx0JLp1CphlBQbnL9R86XbM=

Здесь было несколько вопросов по этому поводу, но, похоже, все решили отказаться от соли и просто использовать SHA512 без соли. Похоже, что это должен будь легким, и все же ...

У кого-нибудь есть идеи о том, как заставить MySQL 8 генерировать тот же хеш, что и doveadm, с тем же паролем и солью?

FWIW, я пробовал MySQL с и без TO_BASE64 и с и без UNHEX (Я верю во все комбинации).

Спасибо!