Какой лучший алгоритм хэширования паролей для PHP?

Я просто читал сообщение, чтобы создать систему входа в систему, и, читая, я видел о хэшировании паролей.

Мы собираемся хранить хэш-файл sha256, который является строкой, всегда содержащей 64 символа.

В этой статье предлагается использовать хэш-функцию sha256 . После прочтения этого я не остановился и начал искать больше о создании безопасной системы входа в систему, а затем я придумал эту статью по wikiHow . В этой статье они используют хэш-функцию sha512 . Это действительно смутило меня, какую функцию я буду использовать для моей следующей системы входа. Я все еще искал google для лучшей статьи и нашел эту статью на crackstation . Автор рекомендует и sha256, и sha512.

Для реализации хеширования паролей могут использоваться только криптографические хэш-функции. Хэш-функции, такие как SHA256, SHA512, RipeMD и WHIRLPOOL, являются криптографическими хеш-функциями.

Я думал, что мой поиск закончен, и я могу использовать sha256 или sha512 но при поиске больше я нашел этот ВОПРОС . В принятом ответе Роберта К были новые вещи для меня. То, о чем я никогда не слышал, до которого есть bcrypt и scrypt .

Все это было написано около 2-4 лет назад.

Вопрос

Какой лучший алгоритм хэширования паролей, используемый в наши дни для PHP?

    Главное здесь, что вы хотите выбрать хеш, который медленный . Единственный возможный вектор атаки для любой из этих хэшей – это грубое форсирование . Смысл, злоумышленник может использовать только все возможные пароли один за другим, используя их, используя тот же алгоритм, что и вы, и сравнивайте их с хэшем. Чем дольше это требуется для одного пароля, тем более трудно найти совпадение.

    Семейство алгоритмов SHA спроектировано так, чтобы быть быстрым, потому что они не предназначены для использования для этой цели. Таким образом, они сами по себе несколько непригодны для хэширования паролей; хотя они могут использоваться как часть алгоритма, который делает их подходящими, например, PBKDF2 (который коротко повторяет хеширование много тысяч раз, чтобы растянуть его).

    bcrypt и scrypt явно спроектированы так, чтобы быть медленными и настолько удобны для хэширования паролей. bcrypt спроектирован так, чтобы быть очень дорогостоящим с точки зрения мощности процессора, в то время как scrypt был очень дорогим с точки зрения потребления памяти. Мощность процессора лучше масштабируется с использованием сегодняшнего оборудования, чем память, поэтому в настоящее время scrypt рассматривается как лучшая вещь для использования. Хотя на данный момент он очень режущий, и он не получил поддержки в плане использования кода. bcrypt, с другой стороны, поддерживается PHP с использованием password_hash напрямую.