What is the main purpose of using bcrypt for password hashing?
Bcrypt securely hashes passwords to protect them from being easily read or reversed if stolen. It adds a salt and uses multiple rounds to slow down attackers.
Click to reveal answer
beginner
What does the 'salt' do in bcrypt hashing?
A salt is random data added to the password before hashing. It ensures that even identical passwords have different hashes, preventing attackers from using precomputed tables.
Click to reveal answer
beginner
How do you verify a password using bcrypt in Node.js?
You use bcrypt's compare function to check if the plain password matches the stored hashed password. It returns true if they match, false otherwise.
Click to reveal answer
intermediate
What is the significance of the 'salt rounds' parameter in bcrypt?
Salt rounds control how many times the hashing process runs. More rounds mean stronger security but slower hashing. A common value is 10.
Click to reveal answer
beginner
Show a simple example of hashing a password with bcrypt in Node.js.
```js
import bcrypt from 'bcrypt';
async function hashPassword() {
const password = 'mySecret123';
const saltRounds = 10;
const hash = await bcrypt.hash(password, saltRounds);
console.log(hash);
}
hashPassword();
``` This code creates a hashed password asynchronously.
Click to reveal answer
What does bcrypt add to a password before hashing to make it more secure?
AA suffix
BA prefix
CA checksum
DA salt
✗ Incorrect
Bcrypt adds a random salt to the password before hashing to ensure unique hashes.
Which bcrypt function checks if a password matches a stored hash?
Abcrypt.hash()
Bbcrypt.compare()
Cbcrypt.verify()
Dbcrypt.check()
✗ Incorrect
bcrypt.compare() compares a plain password with a hashed password.
What happens if you increase the salt rounds in bcrypt?
AHashing becomes slower
BHashing becomes faster
CHashing output becomes shorter
DHashing output becomes predictable
✗ Incorrect
More salt rounds mean more hashing cycles, making hashing slower but more secure.
Why should you never store plain passwords in your database?
AThey are hard to read
BThey take more space
CThey can be easily stolen and misused
DThey slow down the app
✗ Incorrect
Storing plain passwords risks user security if the database is breached.
Which of these is a valid bcrypt salt rounds value commonly used?
A10
B1
C5
D100
✗ Incorrect
10 is a common default for salt rounds balancing security and performance.
Explain how bcrypt protects passwords and why it is better than simple hashing.
Think about what makes bcrypt hashes different and harder to crack.
You got /4 concepts.
Describe the steps to hash and verify a password using bcrypt in Node.js.
Consider both creating the hash and checking it later.
You got /5 concepts.
Practice
(1/5)
1. What is the main purpose of using bcrypt in a Node.js application?
easy
A. To securely hash user passwords before storing them
B. To encrypt user data for faster retrieval
C. To compress files on the server
D. To generate random user IDs
Solution
Step 1: Understand bcrypt's role
Bcrypt is designed to hash passwords securely, making them hard to reverse.
Step 2: Identify the correct purpose
Encrypting data or compressing files are not bcrypt's functions; it focuses on password hashing.
Final Answer:
To securely hash user passwords before storing them -> Option A
Quick Check:
Password hashing = Secure storage [OK]
Hint: Bcrypt is for password security, not encryption or compression [OK]
Common Mistakes:
Confusing hashing with encryption
Thinking bcrypt compresses data
Assuming bcrypt generates IDs
2. Which of the following is the correct way to hash a password asynchronously using bcrypt in Node.js?
easy
A. const hashed = await bcrypt.hash(password, 10);
B. const hashed = bcrypt.hashSync(password, 10);
C. const hashed = bcrypt.compare(password, 10);
D. const hashed = bcrypt.hash(password);
Solution
Step 1: Identify asynchronous hashing syntax
Bcrypt's async hash function requires await and two arguments: password and salt rounds.
Step 2: Check each option
hashSync uses the synchronous method, compare is for verification not hashing, and the hash call misses salt rounds.
Final Answer:
const hashed = await bcrypt.hash(password, 10); -> Option A
Quick Check:
Async hash needs await and salt rounds [OK]
Hint: Async bcrypt hash needs await and salt rounds [OK]
Common Mistakes:
Using hashSync instead of async hash
Calling compare instead of hash
Omitting salt rounds argument
3. What will the following code output if the password matches the hash?
D. Missing await before bcrypt.hash causing hash to be a Promise
Solution
Step 1: Check bcrypt.hash usage
Bcrypt.hash is async and returns a Promise, so it needs await to get the hashed string.
Step 2: Identify the error impact
Without await, hash is a Promise, causing compare to fail or behave unexpectedly.
Final Answer:
Missing await before bcrypt.hash causing hash to be a Promise -> Option D
Quick Check:
Async hash needs await [OK]
Hint: Always await async bcrypt.hash calls [OK]
Common Mistakes:
Forgetting await on async functions
Confusing compare with hash
Using invalid salt rounds
5. You want to securely store user passwords and verify them later. Which approach correctly combines hashing and verification using bcrypt in an async function?
hard
A. Hash password synchronously with bcrypt.hashSync(password, 12) and verify asynchronously with await bcrypt.compare(input, storedHash)
B. Store the plain password and verify by hashing input with bcrypt.hashSync(input, 12) and comparing strings
C. Hash the password with await bcrypt.hash(password, 12) and verify with await bcrypt.compare(input, storedHash)
D. Encrypt password with bcrypt.encrypt(password) and decrypt for verification
Solution
Step 1: Choose secure async hashing and verification
Using async bcrypt.hash with salt rounds (12) and async bcrypt.compare is best practice.
Step 2: Evaluate other options
Storing plain passwords and hashing input for string comparison is insecure, mixing sync hashing with async verification is inconsistent, and bcrypt has no encrypt/decrypt methods.
Final Answer:
Hash the password with await bcrypt.hash(password, 12) and verify with await bcrypt.compare(input, storedHash) -> Option C
Quick Check:
Async hash and compare with salt rounds = secure [OK]
Hint: Use async hash and compare with salt rounds for security [OK]
Common Mistakes:
Storing plain passwords
Mixing sync and async bcrypt calls
Assuming bcrypt can encrypt/decrypt
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.