跳到主要内容
uencoder

如何Use bcrypt 为 Password Hashing

Hash passwords 安全具有 bcrypt, including salt generation 和成本因子 tuning.

问题

你需要存储用户 passwords 安全所以该 even 如果数据库是 compromised, passwords cannot 是 recovered.

前置条件

  • Understanding 的哈希 vs 加密
  • Knowledge 的 salt 和成本因子

步骤

  1. 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. 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. 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.

相关工具

相关词条

参考链接