Статьи

Хэш-пароли с PHP 5.5

Почти каждый разработчик PHP должен был создать приложение, основанное на входе пользователя в систему . Это будет включать в себя пользователя веб-сайта, имеющего имя пользователя и пароль, которые хранятся в базе данных, чтобы он или она могли войти на ваш сайт.

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

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

Хеширование паролей является односторонним шифрованием, поэтому при сравнении строки с паролем, введенным пользователем, вам потребуется хешировать введенный пароль и сравнить эту строку с хешированным паролем; если они совпадают, то пароль правильный.

Способы хеширования паролей

Некоторое время назад было принято находить людей, хэширующих пароли с помощью этих функций.

Но эти функции не рекомендуется использовать, когда вы хэшируете пароли. Это из-за того, как эти функции работают. Вы можете легко создать скрипт для использования грубой силы в этой функции для возврата строки, которая соответствует другой строке md5 () . При использовании этих функций не имеет значения, сколько раз вы передадите строку в эту функцию, она также вернет один и тот же хешированный пароль. Таким образом, если два пользователя имеют одинаковый пароль и пароль одного пользователя взломан, то пароль другого пользователя тоже.

Эти функции можно использовать для других операций хэширования, но это не рекомендуется для паролей.

Вместо использования этих функций вы должны использовать crypt () или функцию hash () . Сложность этих функций означает, что они выполняются медленнее, чем другие функции md5 () и sha1 () . Это означает, что вывод из атаки методом грубой силы будет выполняться намного дольше, чем при использовании функции md5 () .

Другое преимущество использования функции crypt () состоит в том, что вы можете передать второй параметр соли. Соль — это зашифрованная строка, которая добавляется к паролю во время хеширования; это способ добавить дополнительные данные в строку, которые сделают хеш более трудным для взлома.

Хеширование паролей с помощью 5.5

В PHP версии 5.5 функции хеширования паролей были введены в ядро, предоставляя вам доступ к четырем функциям, которые можно использовать при хешировании паролей и проверке пароля.

  • password_get_info — возвращает информацию о данном хеше.
  • password_hash — создает хэш пароля.
  • password_needs_rehash — проверяет, соответствует ли данный хеш заданным параметрам.
  • password_verify — проверяет, что пароль соответствует хешу.

Необходимо понимать две важные функции: password_hash () и password_verify () .

Password_hash Функция

Функция password_hash создаст хешированный пароль из строки. Он принимает три параметра: первый — это строка для хэширования, второй — алгоритм, который вы хотите использовать для хэширования пароля, а третий — дополнительные параметры, такие как соль для передачи в функцию.

$options = [
    'cost' => 11,
    'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
$hashed_password = password_hash( $string, PASSWORD_DEFAULT, $options );

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

Третий параметр позволяет добавить соль к паролю; если он не указан, PHP сгенерирует случайную соль для каждого сгенерированного пароля. На самом деле рекомендуется не генерировать соль для этой функции, но разрешить PHP генерировать соль для вас.

Хэш пароля

Password_verify Функция

Эта функция используется для того, чтобы убедиться, что пароль строки и пароль хешированной строки совпадают, и будет возвращать логическое ИСТИНА, если пароли совпадают.

$matched = password_verify( $password, $hashed_password );

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

Подтвердите пароль