PBKDF2哈希校验

生成哈希
PBKDF2 由 RFC 8018 / NIST SP 800-132 标准化,兼容性最好,几乎所有语言与数据库都内置支持。 它的强度完全取决于迭代次数:次数越高越难暴力破解,但计算也越慢。 它不可逆,无法从哈希值还原出密码。
生成结果
输入密码与参数后点击「生成哈希」

校验哈希

待校验的密码与哈希值
校验结果
粘贴已存储的哈希值,再输入密码进行校验
PBKDF2 的输出是裸摘要,不像 Bcrypt / Argon2 那样把参数写进哈希串,所以校验时必须知道原来的哈希算法、迭代次数、输出长度与盐值。
本工具的处理方式:若粘贴的是 PHC 串($pbkdf2-sha256$i=600000,l=32$盐$哈希),会自动解析出全部参数;否则沿用左侧参数面板的当前设置。
校验只会在本机完成,密码与哈希值都不会发送到服务器。
在线生成与校验 PBKDF2(HMAC-SHA1 / SHA256 / SHA512)哈希,可调迭代次数与输出长度,支持自定义盐值,输出十六进制或 PHC 格式串;粘贴哈希值即可校验密码。全部在本机浏览器完成,密码不上传服务器。

这个工具能做什么

PBKDF2 密钥派生与校验工具,分为两个面板:

  • 生成哈希:输入明文密码,选择 HMAC 算法、迭代次数与输出长度,生成派生结果,同时给出十六进制与 PHC 格式($pbkdf2-sha256$i=600000,l=32$盐$哈希)。
  • 校验哈希:粘贴已存储的哈希值(十六进制、Base64 或 PHC 串)与密码,工具判断是否匹配。

所有计算都在浏览器本机完成,密码与哈希值都不会上传到服务器。

使用步骤

  1. 在「生成哈希」面板输入明文密码。
  2. 选择 HMAC 算法,默认 PBKDF2-HMAC-SHA256。
  3. 设置迭代次数。默认 600000(OWASP 对 SHA-256 的建议值),耗时约 1.5 秒;追求速度可用预设的 10 万。
  4. 设置输出长度,默认 32 字节(256 位)。
  5. 点击「生成哈希」,结果区给出十六进制值与 PHC 格式串。
  6. 校验时把哈希值与密码填到下方「校验哈希」面板。若粘贴的是 PHC 串,工具会自动解析出算法、迭代次数、长度与盐值。

PBKDF2 是什么

PBKDF2(Password-Based Key Derivation Function 2)由 RSA Laboratories 设计,最初发布于 PKCS #5 v2.0(RFC 2898),现行版本为 RFC 8018,同时被 NIST SP 800-132 采纳。

项目说明
发布年份2000(RFC 2898),2017(RFC 8018)
设计机构RSA Laboratories
底层结构HMAC 迭代(HMAC-SHA1 / SHA256 / SHA512 等)
标准RFC 8018、NIST SP 800-132
盐长度建议至少 16 字节
是否可逆不可逆
FIPS 合规是

工作原理

PBKDF2 的公式可以简写为:

DK = T_1 || T_2 || ... || T_l
T_i = F(P, S, c, i)
F(P, S, c, i) = U_1 XOR U_2 XOR ... XOR U_c
U_1 = HMAC(P, S || INT(i))
U_j = HMAC(P, U_{j-1})

其中 P 是密码,S 是盐,c 是迭代次数,l 是输出块数。核心思想很简单:把 HMAC 反复迭代 c 次,让每次尝试都付出 c 倍的计算代价。

迭代次数怎么选

迭代次数是 PBKDF2 唯一的安全旋钮,次数越高越难暴力破解,但用户等待也越久。

来源算法建议迭代次数本机参考耗时
OWASP(2023)HMAC-SHA11300000约 3.5 s
OWASP(2023)HMAC-SHA256600000约 1.6 s
OWASP(2023)HMAC-SHA512210000约 0.7 s
快速预览HMAC-SHA256100000约 0.27 s
旧系统常见HMAC-SHA11000 – 10000约 3 – 30 ms

原则仍然是:让单次校验耗时落在 100 – 500 毫秒之间。OWASP 给的是 2023 年的建议值,实际部署时应按服务器算力实测调整。

⚠️ PBKDF2 的输出是裸摘要

这是 PBKDF2 与其他口令哈希最大的差别:

  • Bcrypt 与 Argon2 的哈希串自带算法、参数与盐值,一个字符串就能完成校验。
  • PBKDF2 的输出通常只是一段十六进制或 Base64 摘要,不含任何参数信息。校验时必须额外知道:用了哪个 HMAC 算法、迭代多少次、输出多长、盐是什么。

因此实际系统里通常会自己拼一个存储格式,常见的有:

格式示例来源
PHC 字符串$pbkdf2-sha256$i=600000,l=32$<盐b64>$<哈希b64>PHC 规范
passlib$pbkdf2-sha256$29000$<盐>$<哈希>Python passlib
Djangopbkdf2_sha256$600000$<盐>$<哈希>Django

本工具的校验面板支持直接粘贴 PHC 串并自动解析全部参数,其他格式需要手动把参数填到左侧面板。

什么时候该用 PBKDF2

场景是否适合
必须满足 FIPS 140 合规适合。PBKDF2 是 NIST 认可的算法,Argon2 与 Bcrypt 都不符合
对接只支持 PBKDF2 的旧系统适合
环境算力与内存受限(如嵌入式、HSM)适合,只需 CPU 时间不占内存
新项目的通用口令存储可以,但优先 Argon2id;PBKDF2 抗 GPU 能力较弱
从密码派生加密密钥(而非口令存储)适合,这是它的原始设计用途

结果区里的几种格式

格式说明
十六进制默认输出,最通用
PHC 格式把算法、迭代、长度、盐、哈希拼成自描述串,便于存储与迁移

常见误区

  • 迭代次数越高越好。次数过高会让登录耗时数秒,既影响体验,也给攻击者提供了低成本拒绝服务的手段(用大量错误密码打满 CPU)。应在压测后取一个平衡值。
  • PBKDF2 输出可以直接当哈希串存库。可以,但你必须同时把算法、迭代次数、盐值单独存下来,否则将来无法校验。更稳妥的做法是存 PHC 格式的自描述串。
  • PBKDF2 是加密。它是单向密钥派生,无法还原原文。
  • 改了迭代次数旧哈希就失效了*。不会失效,但用新参数算出的结果与旧哈希不同,校验必须用*当初生成时的那组参数。常见做法是在用户下次成功登录时用新参数重新哈希并更新存储。

常见问题 FAQ

同一个密码每次生成的 PBKDF2 哈希一样吗?

如果盐值和参数相同,结果就完全一样;如果每次用新的随机盐,结果就不同。校验时用的是存储下来的那组盐与参数,所以能正确匹配。

PBKDF2 可以用来加密文件吗?

不能直接加密,但它的原始用途就是从密码派生加密密钥。典型做法是用 PBKDF2 从口令派生出一个 AES 密钥,再用 AES 加密数据,这种组合叫基于口令的加密(PBE)。

盐值需要多长?

NIST SP 800-132 建议盐长度至少 128 位(16 字节)。本工具默认随机生成 16 字节,自定义模式下要求至少 8 字节。盐必须是随机的,不能用固定值或用户名,否则彩虹表会重新生效。

密码和哈希值会被上传到服务器吗?

不会。生成与校验全部通过浏览器本地的 WebAssembly 完成,页面不发送任何包含密码或哈希值的请求,可在开发者工具 Network 面板确认。

改了迭代次数,之前存的哈希还能校验吗?

能,但必须用**当初生成时的那组参数**去校验。用新参数算出的结果与旧哈希不同。常见做法是保留旧参数校验,在用户下次成功登录时用新参数重新哈希并更新数据库。

为什么默认迭代次数是 600000,算起来有点慢?

600000 是 OWASP 对 HMAC-SHA256 的建议值,本机约需 1.5 秒。这个「慢」正是安全性的来源——攻击者每尝试一个密码也要付出同样代价。如果只是快速预览,可以用预设的 10 万次(约 0.27 秒)。

PBKDF2 符合 FIPS 140 认证吗?

符合。PBKDF2 是 NIST SP 800-132 认可的算法,可以使用经过验证的 HMAC-SHA1 / SHA256 / SHA512 实现。Argon2 与 Bcrypt 都不是 NIST 标准算法,无法通过 FIPS 140 认证。

PBKDF2 和 Bcrypt、Argon2 该选哪个?

OWASP 推荐顺序是 Argon2id > scrypt > Bcrypt > PBKDF2。PBKDF2 的优势是兼容性最好且符合 FIPS 合规要求,劣势是只消耗 CPU 时间、不消耗内存,因此抗 GPU 破解能力较弱。新项目优先 Argon2id,需要 FIPS 合规时选 PBKDF2。

PHC 串是什么?为什么要用它?

PHC 串是自描述格式,把算法、参数、盐值与哈希拼在一起,例如 $pbkdf2-sha256$i=600000,l=32$盐$哈希。存 PHC 串的好处是将来校验时不需要额外记录参数,本工具的校验面板可以直接粘贴 PHC 串并自动解析。

为什么校验时还要填算法和迭代次数?

因为 PBKDF2 的输出是裸摘要,不像 Bcrypt / Argon2 那样把参数写进哈希串。校验必须用**与生成时完全相同**的算法、迭代次数、输出长度与盐值重新计算,否则结果不可能匹配。

迭代次数应该设多少?

OWASP(2023)建议:HMAC-SHA1 用 1300000 次,HMAC-SHA256 用 600000 次,HMAC-SHA512 用 210000 次。核心原则是让单次校验耗时落在 100 – 500 毫秒之间,应按服务器实际算力实测调整。本工具默认 600000。

PBKDF2 是什么?

PBKDF2 是由 RSA Laboratories 设计的基于口令的密钥派生函数,最初发布于 PKCS #5 v2.0(RFC 2898),现行版本为 RFC 8018,并被 NIST SP 800-132 采纳。它通过对 HMAC 反复迭代来增加计算代价。