Функция password_hash в php 5.5

У меня есть следующая функция, которая хэширует пароль и сохраняет его в базе данных. Я пытаюсь использовать функцию password_hash в php 5.5, но это дает мне странные результаты.

function hashpass($password) { include("includes/config.php"); $password = password_hash($password, PASSWORD_DEFAULT); return $password; } 

Затем я выводим результат для того же статического пароля, который я просто тестирую как «testpassword», и он продолжает давать мне разные хэши. Почему это? если он продолжает делать это, я никогда не смогу проверить пароль, потому что он никогда не даст такой же хеш для одной и той же строки.

Есть ли что-то, что мне нужно настроить или установить перед рукой, чтобы это работало правильно?

Related of "Функция password_hash в php 5.5"

Когда вы вводите пароль с password_hash , генерируется случайная соль , используется в процессе хеширования и добавляется к результату. Это точно для того, чтобы избегать одинаковых паролей, приводящих к одному и тому же хэшу каждый раз; чтобы избежать легкой генерации радужных столов. (Все термины, которые вы должны, вероятно, google. :))

Чтобы проверить хэш, сгенерированный с помощью password_hash вам нужно использовать password_verify , который использует соль, встроенную в хеш, для воспроизведения и сравнения хеша из другого пароля открытого текста.

Хеши, сгенерированные password_hash (и наиболее хорошие алгоритмы хэширования пароля), соленые. Это означает, что дополнительный набор случайных данных добавляется к каждому паролю до, а иногда и во время хэширования.

Общий формат для хэшей паролей: ##xxxxxxOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO , где:

  • ## – это идентификатор алгоритма хэширования,
  • xxxxxx – соль, и
  • OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO – это хешированный пароль.

При сравнении сохраненного хэша с заданным текстовым паролем алгоритм будет принимать часть хеша ##xxxxxx и использовать его для вычисления нового хеша пароля (например, ##xxxxxxNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN ). Это они сравнивают два хэша, и если они равны, он может предположить, что данный пароль с четким текстом был таким же, как и исходный пароль.

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