Hash / 密码学辅助

密码哈希生成生成完整记录,核对测试密码

只输入测试密码。生成带盐的记录,或切换到校验模式检查已有哈希。

密码哈希生成

测试密码

哈希记录

仅输入测试数据。密码只在当前页面和 Worker 内存中处理,不上传,也不写入浏览器存储。

选项

测试默认成本为 10,允许 4–14;工作量按 2^cost 增长。此默认值不是生产安全建议。

随机模式每次生成 16 字节盐。固定盐:bcrypt 为 16 字节,其余为 8–64 字节;不含空格或 0x 前缀。

bcrypt 和 Argon2id 使用编码串;scrypt/PBKDF2 使用本站 JSON,不是各框架通用的存储格式。

输入测试密码后,执行所选操作。

更换密码库后,测试账号突然无法登录,未必是算法出了问题。密码哈希生成把候选密码、盐和成本参数放在同一处,便于确认到底是输入字节不同,还是存储格式与目标库的要求不一致。

校验始终读取记录中携带的算法、盐和参数,不受生成面板当前选项影响。先用已知测试数据建立可重复的结果,再与应用里的实现逐项核对,能减少反复调整参数却找不到差异的情况。

为什么使用密码哈希生成工具

同一个密码,观察盐的影响

密码哈希生成默认在每次运行时抽取新的 16 字节随机盐,所以同一个测试密码可以得到不同的记录。要做跨库对照时,切换固定盐并填写十六进制字节,即可重复相同计算。

同一个遮挡的测试密码分成两路,经过不同的盐,得到两个不同的哈希记录。

区分不匹配与无法校验

密码不匹配表示已按存储参数完成计算,只是结果不同。格式错误或成本超限则会在计算前被拒绝。结果区保留算法、盐和成本,帮助你判断下一步应检查密码,还是先修正测试记录。

同一份存储记录分别与两个候选密码比对,一路显示绿色对勾,另一路显示红色叉号。

建立可以复现的校验过程

01

先运行已知匹配的示例

载入示例后先看替换预览,再点应用。示例会切到校验模式,填入虚构密码和已知匹配的 bcrypt 记录;修改一个字符后再校验,可以直接观察不匹配的状态。

  • 应用前不会改动当前输入;撤销会同时恢复输入、参数和结果。
02

确认盐是随机还是固定

新建测试记录时切到生成模式。随机盐每次都会变化,固定盐输入的是十六进制字节,不能把普通单词直接当成盐。bcrypt 固定盐必须是 16 字节,其余算法接受 8–64 字节。

  • 结果区会显示实际使用的盐,可将随机运行的盐复制到固定盐框中重现。
03

等结果有效后再导出

Ctrl/Cmd + Enter 执行当前模式。改动密码、记录或参数后,旧结果立即过期并禁用复制、下载;只有成功生成或校验匹配后才恢复导出。

  • 计算可以取消,超过 15 秒会自动终止,不会让旧任务继续覆盖新输入。

围绕盐、参数和完整记录调试

四种算法各有真实引擎

支持 bcrypt 校验与生成、scrypt、Argon2id 和 PBKDF2-HMAC-SHA-256。每次只计算一种算法,便于建立单独的测试样本;本页不把多个算法同时运行的耗时当成安全排名。

把验证所需信息一并保存

bcrypt 记录包含成本因子和盐,Argon2id 采用版本 19 的 PHC 编码。scrypt 与 PBKDF2 输出带版本标识的本站 JSON,包含参数、saltHex 与 hashHex,避免只有摘要却丢失盐和迭代次数。

运行前检查成本,运行后显示耗时

引擎计算前会验证资源范围,记录中的成本参数同样受限。毫秒数是当前设备本次运行的观察值,可能包含首次加载引擎的时间;它适合对照自己的测试,不能推导服务器的并发容量。

输入、成本与格式的明确边界

不修改密码字节
只接受非空、单行且不超过 1024 个 UTF-8 字节的测试密码。空格、大小写及 Unicode 规范化差异均保留;无效 Unicode 和含换行的粘贴会被拒绝。bcrypt 超过 72 字节直接报错,不会截断后继续。
记录里的成本也必须在范围内
bcrypt 成本为 4–14;scrypt 的 ln 为 10–16,固定 r=8、p=1。Argon2id 的 m 为 8–65536 KiB、t 为 1–6、p 为 1–4,且 m≥8p、m×t≤131072。PBKDF2 迭代次数为 1–1000000。
仅解析明确列出的记录格式
支持 bcrypt 的 $2a$、$2b$、$2y$ 前缀,按 m,t,p 排列的 Argon2id v19,以及本站 scrypt/PBKDF2 JSON。记录最多 8192 个字符;不自动适配框架私有格式、Argon2i/d、v16、pepper 或附加数据。
盐和派生值都有尺寸限制
随机盐固定为 16 字节。固定盐只接受无空格、无前缀的十六进制:bcrypt 恰好 16 字节,其余 8–64 字节。非 bcrypt 算法生成 32 字节派生值,校验接受 16–64 字节;PHC 的 Base64 必须规范且不带填充。
默认值用于测试,不是上线配置
没有破解、找回密码、文件导入、批量尝试或强度评分。示例和清空通过预览后才应用,允许一次撤销;旧密码快照会保留至下次编辑、运行或离开页面,不能把清空理解为立即抹除所有内存副本。

密码哈希生成常见问题

bcrypt 是做加密还是做密码哈希?

bcrypt 是密码哈希算法,不提供可逆解密。校验需要你提供候选密码,再按存储记录里的盐和成本重新计算。匹配只说明这组候选输入得到相同结果,不代表密码足够强,也不是泄露检查。

cost 越高就一定越好吗?

成本因子增大会增加计算工作量,也可能拖慢登录和占用更多服务器资源。本页将 bcrypt 限在 4–14,默认 10 只是浏览器测试参数。正式系统应结合使用的库、目标设备、并发量和可接受延迟进行实测,不能照搬本页耗时决定上线值。

为什么 bcrypt 有 72 字节的密码限制?

这是 bcrypt 输入处理的长度边界,单位是字节而不是字符。中文和表情在 UTF-8 中会占多个字节,因此字符少也可能超限。本工具在生成和校验时都拒绝超过 72 字节的密码,不执行截断或自动预哈希,以免验证了另一份输入。

我可以校验由另一个 bcrypt 库生成的哈希吗?

可以测试常见的 $2a$、$2b$ 和 $2y$ 完整 bcrypt 记录,但成本仍需在 4–14 内,编码也必须合法。如果原应用额外做了预哈希、字符规范化或混入 pepper,需要在原应用里复现这些步骤。本页不会猜测那些应用专属处理。

为什么对同一个密码生成两次哈希结果不同?

默认随机盐每次生成都会更新。盐参与计算,因此相同密码会得到不同记录;各记录仍可用自己携带的盐校验同一个密码。需要重现结果时,切换固定盐,并保持密码字节、盐、算法及成本参数全部一致。

还有疑问?

开始密码哈希生成与校验

在密码哈希生成工具中载入示例,先确认匹配,再改动一个字符,检查两次校验结果的区别。

校验匹配不等于密码强度合格。