如何Use bcrypt 为 Password Hashing
Hash passwords 安全具有 bcrypt, including salt generation 和成本因子 tuning.
问题
你需要存储用户 passwords 安全所以该 even 如果数据库是 compromised, passwords cannot 是 recovered.
前置条件
- Understanding 的哈希 vs 加密
- Knowledge 的 salt 和成本因子
步骤
-
1. Choose a cost factor
The bcrypt cost factor determines how many iterations the hashing runs. A cost of 10 takes about 100ms; each increment doubles the time. Choose the highest cost your server can afford during login (typically 10-12).
输入cost: 12输出~400ms per hash -
2. Hash the password with a generated salt
bcrypt automatically generates a random salt and embeds it in the hash. You do not need to manage the salt separately. The output is a single string containing the algorithm, cost, salt, and hash.
输入password: 'correct horse'输出$2b$12$...salt+hash... -
3. Verify on login
To check a password, pass the candidate password and the stored bcrypt hash to the verify function. It extracts the salt and cost from the hash and re-computes, then compares the result. Never compare hashes manually with ==.
输入candidate + stored hash输出true / false
预期结果
bcrypt hash 字符串该 能够验证 passwords 无 storing plaintext, 具有 adjustable 工作因子.
常见错误
- Cost factor too low
- A cost below 10 is too fast for modern hardware. Increase to at least 10-12 to resist GPU brute force.
- Using a fixed salt
- Let bcrypt generate a random salt per password. A fixed salt enables precomputation attacks like rainbow tables.
排障指引
- If hashing is too slow, lower the cost by 1. If too fast, raise it.
- If verify always returns false, check that you are passing the full bcrypt hash string, not just the hash portion.
安全限制
- bcrypt has a 72-byte password limit; longer passwords are truncated. Pre-hash with SHA-256 if you need to support longer passwords.
- All hashing is done locally; no password leaves your browser.