Здесь есть длинная предыстория, но вкратце я не могу заставить 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
(Я верю во все комбинации).
Спасибо!