The hashed password looks like a long random string.
Never store or show the original password after hashing.
Use password_verify to check if a password matches the hash.
Summary
Use password_hash to turn passwords into safe codes.
Always use PASSWORD_DEFAULT or a strong algorithm.
Check passwords with password_verify when users log in.
Practice
(1/5)
1. What is the main purpose of the password_hash function in PHP?
easy
A. To store passwords in plain text
B. To verify if a password matches a hash
C. To decrypt a hashed password back to plain text
D. To securely convert a plain password into a hashed string
Solution
Step 1: Understand what password_hash does
This function takes a plain password and creates a secure hashed version that cannot be reversed.
Step 2: Compare options with function purpose
To securely convert a plain password into a hashed string correctly describes hashing. To verify if a password matches a hash is for password_verify. Options A and D are incorrect because passwords should never be stored in plain text or decrypted.
Final Answer:
To securely convert a plain password into a hashed string -> Option D
Quick Check:
password_hash = create secure hash [OK]
Hint: Hash means secure one-way password conversion [OK]
Common Mistakes:
Confusing hashing with verifying passwords
Thinking passwords can be decrypted
Storing passwords as plain text
2. Which of the following is the correct syntax to hash a password using password_hash with the default algorithm?
easy
A. $hash = password_hash($password, PASSWORD_DEFAULT);
B. $hash = password_hash($password, 'default');
C. $hash = password_hash($password, default);
D. $hash = password_hash(PASSWORD_DEFAULT, $password);
Solution
Step 1: Recall the correct function signature
The password_hash function requires the password string and the algorithm constant, e.g., PASSWORD_DEFAULT.
Step 2: Check each option's syntax
$hash = password_hash($password, PASSWORD_DEFAULT); correctly passes the password variable and the constant. $hash = password_hash($password, 'default'); uses a string instead of constant. $hash = password_hash($password, default); uses undefined constant "default". $hash = password_hash(PASSWORD_DEFAULT, $password); swaps arguments incorrectly.
Final Answer:
$hash = password_hash($password, PASSWORD_DEFAULT); -> Option A
The password_verify function takes the plain password as first argument and the hash as second. In the code, the arguments are reversed: hash first, then password.
Step 2: Verify other parts of the code
The password_hash call is correct (uses PASSWORD_DEFAULT by default), $password is defined, echo statements are fine.
Final Answer:
password_verify arguments are reversed -> Option C
Quick Check:
password_verify(plain_password, hash) [OK]
Hint: password_verify(plain, hash) order [OK]
Common Mistakes:
Forgetting the algorithm argument
Swapping arguments in password_verify
Assuming password_hash works with one argument
5. You want to store user passwords securely and later verify them during login. Which of the following code snippets correctly implements this using password_hash and password_verify?
hard
A.
$hash = password_hash($userPassword, PASSWORD_DEFAULT);
// Store $hash in database
// Later during login
if (password_verify($inputPassword, $hash)) {
echo 'Login successful';
} else {
echo 'Login failed';
}
B.
$hash = password_hash($userPassword);
// Store $hash
if (password_verify($hash, $inputPassword)) {
echo 'Login successful';
} else {
echo 'Login failed';
}
C.
$hash = md5($userPassword);
// Store $hash
if (password_verify($inputPassword, $hash)) {
echo 'Login successful';
} else {
echo 'Login failed';
}