Bcrypt Hash Generator

One input per line. Output is numbered to match the input order.
Pinned tools are listed in your favourites on the home page.Copies a link to this tool that carries your current input, so it opens ready to run.Gives you an iframe snippet for putting this tool on your own site.

Real bcrypt (Blowfish + Expensive Key Schedule), computed in your browser — output verifies against bcrypt libraries in Node.js, PHP, Python, Ruby, and Go. Note that bcrypt hashes at most the first 72 bytes of a password.

Ctrl+Enter Run  · Ctrl+Shift+C Copy  · Esc Clear

Understand Bcrypt Hash Generator

以可配置的成本因子把密码哈希成 $2b$ 格式,并可用它产生的哈希校验密码。

How it works

密码哈希是刻意做慢的。成本因子是一个指数,因此每加一档工作量就翻倍:成本 12 是成本 10 的四倍,而离线猜测的攻击者也会遭遇同样的减速。每次哈希都会生成 16 字节随机盐并存进输出字符串,因此选了同一个密码的两个用户会得到不同的哈希,一张预计算的彩虹表也无法攻击整个数据库。工作本身是把 Blowfish 密钥编排跑 2^cost 次——这份昂贵的初始化正是该算法的全部要义,也正是它抵御 GPU 并行的原因,而正是这种并行让 SHA-256 这类快速哈希在此处成为糟糕的选择。

When to use it

  • 在把生产环境的成本因子调高之前,看看每个成本档位算一次哈希需要多久。
  • 排查登录问题时,读懂 $2b$ 字符串的各个部分——版本、成本、盐、摘要。
  • 弄明白为什么存储的密码哈希各自携带自己的盐,而不是共用一个。
  • 为本地夹具或种子脚本生成一次性哈希,那里的值并非真实凭据。

Watch out for

  • 成本是指数,不是百分比。从 10 提到 14 会让每次登录对你的服务器也慢十六倍,因此请依据在你自己硬件上实测的延迟来调高它,而不是照搬某处看到的数字。
  • 绝不要把正在使用的密码放进网页里做哈希。哈希应当发生在你的服务器上,那里明文经 TLS 抵达,从不被渲染,也从不进入日志行或表单字段。
  • 调高成本因子并不会升级你已经存好的哈希。成本被固化在每一个字符串里。标准的迁移做法是在该用户下次成功登录时重新哈希,那是你唯一正当持有明文的时刻。
  • bcrypt 本身会忽略密码前 72 字节之后的一切。较长的口令短语会静默丢掉尾部,如果你接受这类口令,或在 bcrypt 之前对输入做了预哈希,这一点就很关键。

Not the right tool for: 生成你要在生产环境中存储的哈希。那应当在你的应用内部用维护良好的库来生成——在 OWASP 的密码存储指南中,Argon2id 是当前的首选建议,成本 10 及以上的 bcrypt 是被接受的替代方案。

Frequently Asked Questions

什么是密码哈希?

密码哈希用单向函数把密码变换成固定长度的字符串(哈希值)。数据库存储的是哈希而不是明文——即使数据库泄露,攻击者也读不到原始密码。bcrypt 是推荐的哈希算法,因为它刻意做得很慢,使暴力破解不切实际。

密码哈希中的盐是什么?

盐是在哈希之前加到密码上的随机值,它让相同的密码也产生各不相同的哈希。bcrypt 会自动生成 16 字节随机盐并把它嵌入输出的哈希中。没有盐,攻击者就能用预先计算的彩虹表一次性破解多个哈希。

bcrypt 哈希能被解密吗?

不能——bcrypt 是单向函数,没有解密。要校验密码,就用存储的盐对输入运行 bcrypt,再把结果与存储的哈希比对。若一致,密码即正确。这种设计意味着连应用的开发者也无法取回原始密码。

How to Use Bcrypt Hash Generator

  1. Paste or type your input in the input area above.
  2. The tool processes your input automatically or click Run.
  3. Copy or download the result using the action buttons.
  4. Use Ctrl+Enter to run quickly from the keyboard.