Как безопасно генерировать хэши SSHA256 или SSHA512 в PHP? - PullRequest
7 голосов
/ 16 июля 2011

Я работаю над модулем веб-администрирования для почтовых серверов (это открытый исходный код, если вы хотите посмотреть).

Для этого мне нужно иметь возможность генерироватьхешированный пароль, который может прочитать Dovecot .Как описано в их вики 1008 *, их рекомендуемая схема хэширования паролей - SSHA256 (дополнительный S - для соленых).

Также объясняется, что это может быть достаточно просто реализовать с помощью чего-то вроде этого PHPcode:

$salt = 'generate_a_salt_somehow';
$hash = hash('sha256', $password . $salt);

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

Так что если у вас есть понимание криптографии, я хотел бы услышать о наиболее безопасном способе сделать это, будь то mcrypt, mhashили что угодно.

Ответы [ 2 ]

8 голосов
/ 16 июля 2011

Вики-страница Dovecot, на которую вы ссылались, объясняет, какой именно формат хэша использует Dovecot.У вас нет выбора в этом вопросе - у Dovecot есть ожидания относительно того, как будет выглядеть хеш, поэтому вы должны играть по его правилам:

Для большинства схем с посоленными паролями (SMD5, SSHA *) соль сохраняется после хеширования пароля, и ее длина может варьироваться.При хешировании пароля добавьте соль после открытого текста, например: SSHA256 (пароль, соль) = SHA256 (пароль + соль) + соль.

Так что подходящая функция генерации пароля в PHP может выглядетькак:

$hash = "{SSHA256}" . base64_encode(hash('sha256', $password . $salt) . $salt);
7 голосов
/ 30 марта 2015

Функция генерации пароля в PHP:

$hash = "{SSHA256}".base64_encode(hash('sha256', $password.$salt, true).$salt);

Обязательно «true» - третий параметр ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...