How to use password_verify() function in php

How to use password_verify() function in php

password_verify()

The password_verify() function is a built-in function in PHP used to check whether a password matches a hashed string. The hashed string is generated from a password using a one-way hashing algorithm with high security. The password_verify() function is compatible with the crypt() function, allowing hashed strings created by crypt() to be used with password_verify().

Syntax of password_verify

The syntax of the password_verify() function is as follows:

bool password_verify (string $password, string $hash)

The password_verify() function has two parameters:

  • $password: the plain-text password to be checked.
  • $hash: the hashed string generated by the password_hash() function.

The password_verify() function returns a boolean value, true if the password and hashed string match, and false if they do not match.

Parameters of password_verify

The password_verify() function only has two parameters, as mentioned above. The $password parameter must be a non-empty text string. The $hash parameter must be a valid hashed string generated by the password_hash() function. If $hash is not a valid hashed string, the password_verify() function will return false.

Return value of password_verify

The password_verify() function returns a boolean value, true if the password and hashed string match, and false if they do not match. The password_verify() function is resistant to time-based attacks, meaning the execution time of the function does not depend on the length of the password or the hashed string1.

Use cases of password_verify

The password_verify() function is commonly used in the following scenarios:

  1. Checking user passwords during login: When a user enters a password, the password_verify() function is used to compare the entered password with the hashed string stored in the database. If they match, the user is allowed to log in; otherwise, an error is reported.
  2. Verifying user passwords during password change: When a user wants to change their password, they are required to enter their old password, and the password_verify() function is used to check if the old password is correct. If correct, they are allowed to enter a new password; if incorrect, an error is reported.
  3. Verifying user passwords during password reset: When a user forgets their password, a reset link is sent to them, containing a verification code generated by hashing a random string. When the user accesses the link, the password_verify() function is used to check if the verification code matches the stored hashed string. If they match, the user is allowed to enter a new password; otherwise, an error is reported.

Considerations when using password_verify

When using the password_verify() function, it's important to note the following:

  1. Never store passwords as plain text; always hash passwords using the password_hash() function before storing them in the database. This protects user passwords from theft in case of a database breach.
  2. Avoid using simple hash functions like md5() or sha1() for password hashing, as they are insecure and susceptible to attacks using lookup tables or fast computers. The password_hash() function uses modern hashing algorithms such as bcrypt, argon2, or scrypt, with added salt and complexity to enhance password security.
  3. Always check whether a hashed string needs to be updated using the password_needs_rehash() function. This function returns true if the hashed string is not suitable for the current options, such as the hashing algorithm or complexity. If true, rehash the password using password_hash() and store the new hashed string in the database. This ensures that passwords are always secured to the latest standards.

Comparison of password_verify in PHP with other hash functions

The password_verify() function in PHP has several advantages over other hash functions, such as:

  1. Compatibility with crypt(): password_verify() is compatible with crypt(), making it easy to transition from crypt() to password_hash() and password_verify.
  2. No need to know the hashing algorithm, complexity, or salt used: password_verify() does not require knowledge of the hashing algorithm, complexity, or salt used, as all this information is contained within the hashed string. This simplifies password verification without the need to store additional information.
  3. Time-based attack resistance: password_verify() is secure against time-based attacks, meaning the execution time does not depend on the length of the password or hashed string. This helps prevent attackers from deducing passwords based on system response times.

Example of using password_verify in PHP

Here is a simple example of using the password_verify() function in PHP to check a user's password during login:

<?php
// Assume we have a hashed string stored in the database
$hash = '$2y$10$y8yCjGmds2wZE4FK9ZWGbeG7Eo7K8xrkE0x8QwvRZG5cM6rFfLw4m';

// Assume we receive the password from the user
$password = $_POST['password'];

// Check if the password matches the hashed string
if (password_verify($password, $hash)) {
    // If they match, allow login
    echo "Password correct, you have successfully logged in!";
} else {
    // If they don't match, report an error
    echo "Incorrect password, you cannot log in!";
}
?>

Other hashing functions in PHP

In addition to password_hash() and password_verify(), PHP has other hashing functions, including:

  1. crypt(): A classic function used to hash a string with a chosen hashing algorithm. It can use various algorithms such as DES, MD5, Blowfish, SHA-256, SHA-512, etc. However, it is not secure and should not be used for password hashing.
  2. hash(): A versatile function used to hash a string with various hashing algorithms, including MD2, MD4, MD5, SHA1, SHA2, SHA3, RIPEMD, WHIRLPOOL, and more. Like crypt(), it is not recommended for password hashing.
  3. hash_hmac(): An advanced function used to hash a string with any hashing algorithm, combined with a secret key. It can use the same hashing algorithms as hash() but adds the feature of adding a secret key (keyed-hash) for increased security. This function is often used to create digital signatures for messages or data.

Summary

In this article, I introduced the password_verify() function in PHP, which is used to check whether a password matches a hashed string. I covered the syntax, parameters, return value, use cases, and considerations when using password_verify(). I also compared password_verify() with other hashing functions in PHP and highlighted the advantages of using password_verify(). I hope this article helps you understand password_verify() and how to use it effectively in PHP.

Keywords:

  • Password_hash and password_verify PHP
  • Hash password
  • Hash password mysql php
  • Password_verify
  • Password_needs_rehash
  • Hash PHP
  • Password_verify not working