这个工具适合做什么
在线Bcrypt加密/校验工具使用bcrypt对文本字符串进行加密和校验。Bcrypt是一个基于Blowfish密码的密码哈希函数,与其它哈希函数相比它具有更高的安全性以及较慢的运算速度。
尽管很多页面习惯把这类操作写成“加密”,但 bcrypt 更准确的定位是密码哈希与校验。它通常用于密码存储,而不是用于把任意文本可逆地还原回来。
生成、校验和解密的区别
| 操作 | 输入 | 输出 | 是否可行 |
|---|---|---|---|
| 生成 hash | 明文密码和 cost 轮数 | 新的 bcrypt hash | 可行 |
| 校验密码 | 明文候选值和已有 bcrypt hash | 匹配或不匹配 | 可行 |
| 解密 hash | 只有 bcrypt hash | 原始密码 | 不可行 |
bcrypt hash 中已经包含 salt 和 cost 参数,所以同一个密码每次生成的 hash 可能不同,但只要使用校验流程仍然可以判断是否匹配。
Cost 轮数参考
| 轮数 | 特点 | 适合场景 |
|---|---|---|
| 8-9 | 计算较快,安全余量较低 | 本地演示、兼容旧系统、低风险测试。 |
| 10-12 | 常见起步范围 | 多数 Web 应用可从这里开始,再根据登录耗时调优。 |
| 13+ | 计算更慢,成本更高 | 只有在服务器性能和用户体验允许时才适合提高到此范围。 |
- 应在接近生产环境的机器上测试轮数,而不是只看本地电脑的速度。
- 轮数选择要兼顾暴力猜测成本、正常登录延迟和服务器并发压力。
- 随着硬件性能变化,密码哈希策略也应定期复查。
登录校验流程
- 注册时用 bcrypt 计算用户密码,并只保存生成后的 hash。
- 登录时根据账号取出数据库里的 bcrypt hash。
- 把用户输入的候选密码和已存 hash 交给 bcrypt 校验函数。
- 只有校验返回匹配时,才认为密码正确。
// 伪代码
storedHash = users.find(email).password_hash
isMatch = bcrypt.verify(candidatePassword, storedHash)
if (!isMatch) rejectLogin()
使用步骤
Bcrypt 加密:输入原密码,调整salt轮数(默认10),加密自动计算并显示在结果区域。Bcrypt 校验:输入原密码和之前加密后的hash代码,自动校验并显示校验密码是否一致。
- 在哈希区域输入原始密码或待处理文本。
- 根据性能与安全需求调整 salt 轮数。
- 查看自动生成的 bcrypt 结果;如需校验,再输入原文和现有 hash。
- 确认匹配结果后,再将 hash 用于系统配置、测试或排错。
使用时要注意
- 轮数越高,通常暴力破解成本越高,但计算时间也会更长。
- bcrypt 主要面向密码场景,不适合代替普通摘要、文件校验或消息签名流程。
- 由于 bcrypt 自带 salt,即使同一段原文重复计算,多次得到的 hash 也可能不同,这属于正常现象。
- 不要把生产环境的真实密码、真实 hash 或用户隐私数据暴露在公开调试记录中。
常见问题
为什么同一个密码每次生成的 bcrypt 结果都不一样?
因为 bcrypt 会把随机 salt 一起参与计算,所以相同原文也可能得到不同 hash。这正是它适合密码存储的重要原因之一。
bcrypt 可以解密回原文吗?
不能。bcrypt 不是可逆加密,而是哈希。正确做法不是“解密”,而是在登录或验证时把用户输入重新计算后与已有 hash 做匹配。
salt 轮数应该怎么选?
要结合系统性能和安全要求来定。轮数越高越安全,但也越耗时。调试时可以先用默认值,生产环境则应根据服务性能预算做评估。
bcrypt 校验为什么不需要单独保存 salt?
标准 bcrypt hash 字符串里已经包含算法版本、cost 轮数和 salt。校验函数会从已存 hash 中读取这些参数,再用候选密码重新计算并比较。
可以用 bcrypt 做文件校验或接口签名吗?
通常不适合。bcrypt 主要用于密码存储。文件校验、消息摘要、接口签名或鉴权令牌应选择 SHA-256、HMAC 或更适合对应场景的算法。