📖 Scenario: You are building a simple user registration system. To keep user passwords safe, you need to convert plain text passwords into secure hashed versions before storing them.
🎯 Goal: Create a PHP script that hashes a given password using the password_hash function with the default algorithm.
📋 What You'll Learn
Create a variable to hold the plain text password.
Create a variable to store the hashed password using password_hash.
Use the default hashing algorithm.
Print the hashed password.
💡 Why This Matters
🌍 Real World
Web applications need to store user passwords securely to protect user accounts from theft or misuse.
💼 Career
Understanding password hashing is essential for backend developers and security engineers to build safe authentication systems.
Progress0 / 4 steps
1
Create a plain text password variable
Create a variable called $password and set it to the string "MySecret123".
PHP
Hint
Use the = sign to assign the string to the variable.
2
Hash the password using password_hash
Create a variable called $hashedPassword and set it to the result of password_hash called with $password and PASSWORD_DEFAULT as arguments.
PHP
Hint
Use password_hash($password, PASSWORD_DEFAULT) to create the hash.
3
Print the hashed password
Use echo to print the variable $hashedPassword.
PHP
Hint
The output should start with $2y$ which is the prefix for bcrypt hashes in PHP.
4
Complete script to hash and display password
Combine all previous steps into a complete PHP script that sets $password, hashes it into $hashedPassword, and prints the hashed password.
PHP
Hint
Run the script to see the hashed password printed.
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';
}