🗝️
密钥派生
PBKDF2 与 EvpKDF 密钥派生,支持 Web Crypto 原生加速、OWASP 迭代建议与额外派生 IV
算法
口令 P
盐 S (现代建议 ≥ 16 字节随机) · 当前 0 字节 (空盐)
迭代次数 c
输出长度 dkLen
字节 = 256 bit
派生结果
派生密钥 DK
—填入口令或盐后自动派生。默认 600,000 轮 + Web Crypto 原生路径,通常在几百毫秒内完成。
等价 OpenSSL 命令
openssl enc -aes-256-cbc -k '' -md sha256 -pbkdf2 -iter 600000口令已内联进命令,复制到终端或脚本时请留意 shell 历史记录。
PBKDF2 与 EvpKDF 怎么选
| 维度 | PBKDF2 | EvpKDF |
|---|---|---|
| 标准 | RFC 8018 / PKCS#5 v2.2 | OpenSSL 私有实现 |
| PRF | HMAC-SHA1/224/256/384/512 | 朴素哈希链 MD5 / SHA1 / SHA256 |
| 默认迭代 | 1(必须手动提高) | 1 |
| 输出 | 单一 DK | Key + IV(OpenSSL 约定) |
| 抗 GPU | 中(无内存硬,ASIC 仍高效) | 极低 |
| 现状 | 🟢 推荐(配合高迭代) | 🟠 遗留兼容 |
- PBKDF2(RFC 8018 / PKCS#5 v2.2)用 HMAC 做迭代,是目前仍然被推荐使用的口令派生算法;关键是**迭代次数要足够高**。
- OWASP 2023 建议的最低轮数:HMAC-SHA-256 ≥ 600,000、HMAC-SHA-512 ≥ 210,000、HMAC-SHA-1 ≥ 1,300,000。迭代次数应在"用户可接受延迟"内取最大值。
- EvpKDF 就是 OpenSSL 的 EVP_BytesToKey:D1 = H(P‖S),Di = H(D(i-1)‖P‖S)。注意这是**朴素哈希链、不是 HMAC**,且默认只迭代 1 次,对 GPU/ASIC 暴力破解几乎无防护。它存在的唯一理由是兼容 openssl enc / PHP / 老 Java。
- 盐必须随机且足够长(现代建议 ≥ 16 字节,OpenSSL 传统用 8 字节)。空盐会让相同口令派生出相同密钥,彩虹表可直接命中。
- 「额外派生 16 字节 IV」遵循 OpenSSL 约定:把派生材料按 Key 在前、IV 在后切分。这正是 openssl enc 口令模式的做法。
- Web Crypto 原生路径(SHA-1/256/384/512)比软件实现快 10–50 倍;SHA-224 与 EvpKDF 不被原生支持,会自动回退并在状态栏说明。两条路径的结果已在单测中交叉验证一致。
- 🔑 口令与盐不会写入 localStorage、不进分享链接、不进 URL。本工具的历史记录默认关闭。
使用说明 / 算法说明
- PBKDF2(RFC 8018 / PKCS#5 v2.2)用 HMAC 做迭代,是目前仍然被推荐使用的口令派生算法;关键是**迭代次数要足够高**。
- OWASP 2023 建议的最低轮数:HMAC-SHA-256 ≥ 600,000、HMAC-SHA-512 ≥ 210,000、HMAC-SHA-1 ≥ 1,300,000。迭代次数应在"用户可接受延迟"内取最大值。
- EvpKDF 就是 OpenSSL 的 EVP_BytesToKey:D1 = H(P‖S),Di = H(D(i-1)‖P‖S)。注意这是**朴素哈希链、不是 HMAC**,且默认只迭代 1 次,对 GPU/ASIC 暴力破解几乎无防护。它存在的唯一理由是兼容 openssl enc / PHP / 老 Java。
- 盐必须随机且足够长(现代建议 ≥ 16 字节,OpenSSL 传统用 8 字节)。空盐会让相同口令派生出相同密钥,彩虹表可直接命中。
- 「额外派生 16 字节 IV」遵循 OpenSSL 约定:把派生材料按 Key 在前、IV 在后切分。这正是 openssl enc 口令模式的做法。
- Web Crypto 原生路径(SHA-1/256/384/512)比软件实现快 10–50 倍;SHA-224 与 EvpKDF 不被原生支持,会自动回退并在状态栏说明。两条路径的结果已在单测中交叉验证一致。
- 🔑 口令与盐不会写入 localStorage、不进分享链接、不进 URL。本工具的历史记录默认关闭。
同类工具 · 密码学