Я работаю над модулем веб-администрирования для почтовых серверов (это открытый исходный код, если вы хотите посмотреть).
Для этого мне нужно иметь возможность генерировать хэшированный пароль, который читается Dovecot . Как описано в их вики , их рекомендуемая схема хэширования пароля – SSHA256 (дополнительный S для соления).
Также объясняется, что это может быть достаточно просто реализовать с помощью чего-то вроде этого PHP-кода:
$salt = 'generate_a_salt_somehow'; $hash = hash('sha256', $password . $salt);
Однако из того, что я прочитал о криптографии, это довольно наивный способ генерировать соленые хэши, но если вы ошибаетесь при вводе AES в исходный код , я полагал, что в этом случае это может быть правдой.
Поэтому, если у вас есть понимание криптографии, я бы хотел услышать о самом безопасном способе сделать это, будь то mcrypt, mhash или что-то еще.
Страница вики-страницы Dovecot, с которой вы связались, объясняет, что именно использует точный формат файла Dovecot. У вас нет выбора в этом вопросе – у Dovecot есть свои надежды на то, как будет выглядеть хэш, поэтому вы должны играть по своим правилам:
Для большинства схем соленого пароля (SMD5, SSHA *) соль сохраняется после хеша пароля, и ее длина может меняться. Когда хеширование пароля, добавьте соль после пароля открытого текста, например: SSHA256 (проход, соль) = SHA256 (проход + соль) + соль.
Поэтому подходящая функция генерации пароля в PHP может выглядеть так:
$hash = "{SSHA256}" . base64_encode(hash('sha256', $password . $salt) . $salt);
Функция генерации пароля в PHP:
$hash = "{SSHA256}".base64_encode(hash('sha256', $password.$salt, true).$salt);
Обязательно «истинный» – третий параметр …