PBKDF2 哈希计算
免费在线 PBKDF2 哈希计算 工具。100% 本地计算,数据不离开您的设备,隐私安全有保障。
结果将显示在这里...
输入 → 计算哈希
使用指南
关于 PBKDF2
PBKDF2(基于密码的密钥派生函数 2)是一种密钥派生函数,已在 RFC 8018(PKCS#5)和 NIST SP 800-132 中标准化。与简单的哈希函数不同,PBKDF2 专门设计用于通过对伪随机函数(HMAC-SHA256 或 HMAC-SHA512)反复迭代数十万次,从密码派生出加密密钥。这使暴力破解在计算上代价极高。PBKDF2 符合 FIPS 140-2 标准,广泛应用于 LUKS 磁盘加密、WPA2/WPA3 Wi-Fi 认证、iOS/Android 安全存储及密码管理器。
使用步骤
本工具支持两种操作:派生密钥(加密模式)和验证密码(解密模式):
参数说明
PBKDF2 有四个关键参数,控制密钥派生的安全性和输出:
PBKDF2 与 Argon2 / bcrypt 对比
了解何时选择 PBKDF2 而非其他密码哈希算法:
常见问题
Q: PBKDF2 的输出格式是什么?
A: 本工具输出一个自包含的哈希字符串: {迭代次数}:{算法}:{盐值_base64}:{派生密钥_hex}。
例如:600000:sha256:abc123...==:d4e5f6...。
各部分含义:迭代次数:使用的 HMAC 轮数(如 600000)。算法:哈希函数(sha256 或 sha512)。盐值_base64:Base64 编码的随机盐值。派生密钥_hex:十六进制编码的派生密钥。
验证时,在解密模式输入:password|{完整哈希字符串}。
Q: 为什么 PBKDF2 需要 600,000 次迭代?
A: PBKDF2 不是内存困难型 —— 它可以被 GPU 廉价并行。现代 GPU 每秒可计算约 10–20 亿次 PBKDF2-SHA256 迭代。在 600,000 次迭代的情况下,每块 GPU 每秒仍可尝试约 1,600 次哈希。高迭代次数是主要防御机制 ——直接倍增攻击者的成本。OWASP 2023 将 600,000 设定为 SHA-256 的最低要求;SHA-512 使用 210,000(本身计算更慢)。随着硬件发展应逐步提高这些数值。
Q: PBKDF2 与 bcrypt 或 Argon2 有何区别?
A: PBKDF2:仅计算困难,非内存困难。可被 GPU 并行。FIPS 140-2 批准。需要极高迭代次数。最适合 FIPS 合规环境。 bcrypt:计算困难,约 4KB 内存,中等 GPU 抵抗性。72 字节密码限制。无法派生任意长度密钥。 Argon2id:内存困难,抵抗 GPU/ASIC,现代 OWASP 首选。未获 FIPS 批准。等效安全级别的性能:Argon2 凭借内存困难性,在相同实际安全强度下显著快于 PBKDF2。
Q: PBKDF2 符合 FIPS 140-2 标准吗?
A: 是的。PBKDF2 明确定义于 NIST SP 800-132 并通过 FIPS 140-2 批准。这使其成为美国联邦机构、承包商、受 HIPAA 约束的医疗 系统以及需要 PCI-DSS 合规的金融应用的法定选择。Argon2 和 scrypt 未获 FIPS 批准。如果需要 FIPS 合规,PBKDF2 目前是唯一广泛可用的选择。 请确保您的 PBKDF2 实现使用经 FIPS 验证的加密模块。
Q: 盐值为何重要?必须存储吗?
A: 盐值是在哈希之前添加到密码的随机值,确保两个相同的密码产生不同的派生密钥。没有盐值,攻击者可以使用预计算的彩虹表同时破解多个哈希。盐值 无需保密 —— 只需每个密码唯一即可。盐值包含在输出字符串中,并且 必须与派生密钥一起存储,以便在验证时重现相同的哈希。切勿跨密码复用盐值。
Q: 如何将 PBKDF2 用于 AES 密钥派生?
A: 将密钥长度设置为 32 字节(256 位),直接派生 AES-256 密钥。使用 SHA-256 的 600,000 次迭代。将盐值与加密数据一起存储。解密时,使用相同的密码、盐值、迭代次数和算法重新派生密钥,再用 AES-256-GCM 进行解密。这正是 LUKS 磁盘加密、iOS 数据保护和许多密码管理器的工作原理。派生密钥是确定性的 —— 相同输入始终产生相同密钥 —— 这也是为什么保护密码并使用唯一盐值至关重要。
使用场景
推荐:FIPS 合规密码存储
受 FIPS 140-2、NIST SP 800-131A、HIPAA 或 PCI-DSS 约束的组织必须使用经批准的加密算法。带有 HMAC-SHA256 或 HMAC-SHA512 的 PBKDF2 是满足这些要求的唯一广泛可用的密码 KDF。 SHA-256 至少使用 600,000 次迭代,并存储完整的输出字符串。这是在合规环境中选择 PBKDF2 而非 Argon2id 的主要原因。
- ✅ PBKDF2-HMAC-SHA256(≥600,000 次迭代)—— FIPS 合规
- ✅ PBKDF2-HMAC-SHA512(≥210,000 次迭代)—— FIPS 合规
- ❌ Argon2 / scrypt —— 未获 FIPS 140-2 批准
- ❌ bcrypt —— 未获 FIPS 140-2 批准
推荐:磁盘加密密钥派生(LUKS)
LUKS(Linux 统一密钥设置)默认使用 PBKDF2(LUKS1)和 PBKDF2/Argon2(LUKS2)从密码派生卷加密密钥。PBKDF2 从用户密码派生固定长度密钥(AES-256 为 32 字节),该密钥用于加密 存储在 LUKS 头部的主密钥。这确保即使知道 LUKS 头部也无法揭露密码。WPA2/WPA3 Wi-Fi 安全也使用 PBKDF2 从 Wi-Fi 密码派生成对主密钥(PMK)。
- ✅ PBKDF2-HMAC-SHA512(LUKS1 标准)
- ✅ Argon2id(LUKS2 首选 —— 更好的内存困难性)
- 💡 设置足够高的迭代次数,使目标硬件上的派生耗时 0.5–2 秒
- 💡 将盐值存储在磁盘/头部元数据中,切勿单独存储
可接受:旧系统中的密码验证
许多现有系统(旧版 Django、.NET Membership、Java PBKDF2WithHmacSHA1)已存储 PBKDF2 哈希。对这些系统继续使用 PBKDF2,并随着硬件进步逐步提高迭代次数。使用存储的迭代次数进行验证 (已内嵌在哈希字符串中),新注册和密码变更则使用当前 OWASP 推荐值。这避免了强制密码重置,同时随时间提升安全性。
- ✅ PBKDF2(保留现有哈希 —— 无需迁移)
- ✅ 对新哈希将迭代次数提升至当前 OWASP 最低要求
- 💡 下次登录时透明升级迭代次数
- 💡 不需要 FIPS 的新项目考虑迁移至 Argon2id
可接受:从单一密码派生多个密钥
PBKDF2 可以派生任意长度的密钥,使其在需要从一个主密码派生多个密钥时很有用(例如,一个用于加密,另一个用于 MAC 认证)。使用不同的盐值或索引后缀派生独立密钥。将密钥长度参数设置为 64 字节并将输出分为两个 32 字节的密钥,或使用不同的盐值运行 PBKDF2 两次。此模式用于某些密码管理器架构和多层加密方案。
- ✅ 对不同用途的派生密钥使用不同的盐值
- ✅ 初始 PBKDF2 派生后使用 HKDF(基于 HMAC 的密钥派生函数)进行密钥扩展
- ❌ 切勿对不同密钥用途复用相同的盐值
- 💡 与 AES-256-GCM 结合使用以实现认证加密
不推荐:在新项目中替代 Argon2
不推荐:通用数据哈希
PBKDF2 是一个密钥派生函数,而非通用哈希函数。它被设计为故意缓慢,绝不应用于对文件内容、校验和、消息认证或重复数据删除进行哈希。对于数据完整性,请使用 SHA-256 或 SHA-512。对于消息认证,请使用 HMAC-SHA256。将 PBKDF2 的输出用作通用哈希会浪费大量 CPU 资源,而没有任何安全收益。
- ❌ 不要将 PBKDF2 用于文件校验和或数据完整性
- ❌ 不要将 PBKDF2 用于消息认证(使用 HMAC-SHA256)
- ✅ SHA-256 / SHA-512 用于通用数据哈希
- ✅ HMAC-SHA256 用于认证消息完整性
最佳实践摘要
- 在 FIPS 合规环境中使用 PBKDF2-HMAC-SHA256(≥600,000 次迭代)或 HMAC-SHA512(≥210,000 次迭代)。存储包含迭代次数、算法和盐值的完整哈希字符串。
- 对于没有 FIPS 要求的新项目,优先选择 Argon2id —— 它是内存困难型,在相当的性能下对 GPU 攻击的抵抗力显著更强。
- 始终对每个密码使用唯一的随机盐值(本工具自动生成)。切勿在应用代码中复用或硬编码盐值。
- 随着硬件发展增加迭代次数。迭代次数存储在哈希字符串中,新旧次数可以并存。
- 仅在登录或密钥设置时使用 PBKDF2 —— 切勿在每次请求时调用。认证成功后签发令牌(JWT、会话)用于高频操作。