PBKDF2 哈希计算

免费在线 PBKDF2 哈希计算 工具。100% 本地计算,数据不离开您的设备,隐私安全有保障。

General
Password Hashing / KDF
Specialized
Deprecated
bytes
输出

结果将显示在这里...

输入 计算哈希

使用指南

关于 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 安全存储及密码管理器。

FIPS 140-2 合规:PBKDF2 是唯一经 FIPS 140-2 和 NIST SP 800-132 批准的基于密码的密钥派生函数,是美国政府、医疗(HIPAA)和金融(PCI-DSS) 合规环境的必选方案。OWASP 2023 推荐 PBKDF2-HMAC-SHA256 使用 600,000 次迭代,PBKDF2-HMAC-SHA512 使用 210,000 次迭代。

使用步骤

本工具支持两种操作:派生密钥(加密模式)和验证密码(解密模式):

1. 派生模式(加密)选择「加密」模式,输入密码,配置参数(算法、迭代次数、密钥长度、盐值),点击「计算哈希」
2. 获取输出结果为完整哈希字符串,格式为:{迭代次数}:{算法}:{盐值_base64}:{派生密钥_hex}
3. 验证模式(解密)选择「解密」模式,输入:password|{迭代次数}:{算法}:{盐值_base64}:{派生密钥_hex}
4. 查看结果密码匹配时返回「✓ Password verified」,不匹配时显示错误信息
5. 自动盐值盐值字段留空时,工具会自动生成 16 字节的加密随机盐值
隐私保护:所有 PBKDF2 计算均在浏览器本地完成,数据不会上传至服务器,完全离线处理。

参数说明

PBKDF2 有四个关键参数,控制密钥派生的安全性和输出:

哈希算法SHA-256(默认)或 SHA-512 —— SHA-512 安全裕量更大,但所需迭代次数更少(210k 对比 600k)
迭代次数HMAC 轮数。OWASP 2023:SHA-256 使用 600,000 次,SHA-512 使用 210,000 次。次数越高 = 越慢 = 对暴力破解越安全
密钥长度输出字节数(1–256)。默认 32 字节(256 位),适合 AES-256 密钥派生
盐值Base64 编码的随机值。留空时自动生成(16 个随机字节)。必须与派生密钥一起存储,以便后续验证
迭代次数警告:迭代次数过少会严重削弱 PBKDF2 的安全性。现代 GPU 每秒可计算数百万次 PBKDF2-SHA256 迭代。请始终遵循 OWASP 最新建议(SHA-256 使用 600k),并随着硬件发展逐步提高。密码存储的迭代次数不得低于 100,000。

PBKDF2 与 Argon2 / bcrypt 对比

了解何时选择 PBKDF2 而非其他密码哈希算法:

PBKDF2FIPS 140-2 合规,已标准化,广泛支持。非内存困难型 —— 可被 GPU 并行攻击。需要极高的迭代次数(≥600k)才能保证安全
Argon2id现代算法(2015),内存困难型(抵抗 GPU/ASIC),OWASP 通用密码存储首选。未获 FIPS 批准
bcrypt经典算法(1999),计算困难型(约 4KB 内存),抗 GPU,但不如 Argon2。不适合密钥派生
scrypt类似 Argon2 的内存困难型,用于比特币密钥派生和 LUKS2。同样未获 FIPS 批准
何时选择 PBKDF2:当需要 FIPS 140-2 合规,或 Argon2 不可用的环境(如旧系统、嵌入式设备)时使用 PBKDF2。其他所有新项目,建议优先选择 Argon2id ,因其具备更优越的内存困难性。

常见问题

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

如果您正在启动一个没有 FIPS 要求的新项目,PBKDF2 相比 Argon2id 较弱的选择。PBKDF2 不是内存困难型,GPU 可以廉价地并行攻击。即使在 600,000 次迭代下,单块高端 GPU 每秒仍可尝试数千次 PBKDF2 猜测。 Argon2id 使用默认参数(47MB 内存,1 次迭代)在相似的实际耗时下,通过内存需求完全阻止了 GPU 并行化。

推荐配置:
  • ❌ 当 Argon2id 可用时,新项目避免使用 PBKDF2
  • ✅ Argon2id(内存困难,OWASP 首选)
  • ✅ scrypt(内存困难,广泛可用)
  • 💡 仅在 FIPS 合规强制要求时才优先选择 PBKDF2
不推荐:通用数据哈希

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、会话)用于高频操作。

讨论与反馈

0 条评论