PBKDF2 与 HKDF 密钥派生
用 PBKDF2 或 HKDF 从密码或密钥派生密钥,可选择盐值、迭代次数或 info 标签、哈希以及输出长度,并以十六进制或 base64 读取,全部在浏览器中完成。
正在加载工具…
PBKDF2 与 HKDF 密钥派生 — 用 PBKDF2 把密码拉伸成密钥,或用 HKDF 把高熵密钥扩展为带命名的子密钥,整个过程都不离开你的设备。选择哈希、设置盐值与迭代次数(PBKDF2)或 info 标签(HKDF),指定需要多少位输出,再以十六进制或 base64 复制派生密钥。每一个字节都通过原生 Web Crypto API(crypto.subtle.deriveBits)在本地计算,你的密码和密钥绝不会接触服务器。
PBKDF2 与 HKDF 密钥派生 是什么?
PBKDF2 与 HKDF 密钥派生是一款免费的浏览器内工具,运行开发者最常用的两种密钥派生函数。PBKDF2(基于口令的密钥派生函数 2)通过把 HMAC 重复成千上万次来刻意减慢暴力破解,将人类密码加盐值转换成固定长度的密钥。HKDF(基于 HMAC 的密钥派生函数)接收一个本身已具备足够熵的密钥,借助 info 标签把它扩展为一个或多个与上下文绑定的子密钥,非常适合从单个主密钥派生出独立的加密密钥和认证密钥。后端工程师、安全审查人员,以及编写登录或加密代码的人都用它来测试向量、复现服务端的派生过程,或为一次性任务生成密钥。用顶部的 PBKDF2/HKDF 开关切换算法,选择 SHA-256、SHA-384、SHA-512 或 SHA-1,设置以位为单位的输出长度,并以十六进制或 base64 读取结果。
如何使用 PBKDF2 与 HKDF 密钥派生
- 用顶部的开关选择 PBKDF2 或 HKDF,与你的代码或测试向量所用的函数保持一致。
- 在「密码/密钥」字段输入或粘贴你的密码(PBKDF2)或高熵密钥(HKDF),然后输入盐值。
- PBKDF2 设置迭代次数;HKDF 设置可选的 info 标签,把密钥绑定到某个上下文。
- 选择哈希(SHA-256、SHA-384、SHA-512 或 SHA-1)以及以位为单位的输出长度。
- 把「十六进制/base64」开关切到你需要的编码,再用复制按钮复制派生密钥。
示例
PBKDF2——从密码派生 256 位密钥
输入
密钥:correct horse battery staple 盐值:a1b2c3d4 哈希:SHA-256,迭代:100000,位数:256
输出
一个 64 字符的十六进制字符串(32 字节),相同密码、盐值、哈希与迭代次数下可重复得到
HKDF——从主密钥派生上下文绑定子密钥
输入
密钥:9f8e7d6c…(主密钥) 盐值:session-2024 Info:aes-gcm-encryption 哈希:SHA-256,位数:256
输出
与同一密钥配 Info: hmac-authentication 时得到的 256 位密钥不同,因此一个主密钥可产出彼此独立的子密钥
更短的输出,使用 base64
输入
位数:128,编码切换为 base64
输出
一个 24 字符的 base64 字符串,编码前 16 个派生字节
常见问题
- 我的密码或密钥会被发送到任何地方吗?
- 不会。「密码/密钥」、盐值和 info 都保留在你的浏览器中。密钥通过 Web Crypto API(crypto.subtle.deriveBits)在本地派生,没有任何内容会被上传到或存储在任何服务器上,因此该工具可离线使用,你的输入绝不会离开页面。
- 什么时候用 PBKDF2,什么时候用 HKDF?
- 用 PBKDF2 从低熵的人类密码派生密钥——它的迭代次数能减慢暴力破解。当你已经拥有高熵密钥(主密钥或共享密钥),想借助 info 标签把它扩展为一个或多个独立子密钥时,用 HKDF。HKDF 很快,并不能替代 PBKDF2 的密码拉伸作用。
- 为什么我的输出长度被取整了?
- Web Crypto 的 deriveBits 以整字节为单位工作,因此以位为单位的输出长度会被取整到最接近的 8 的倍数。结果下方的统计会显示实际产生的位数和字节数。
- 支持哪些哈希和算法?
- 两种算法都可使用 SHA-256、SHA-384、SHA-512 或 SHA-1,即浏览器 Web Crypto 为 PBKDF2 和 HKDF 暴露的哈希。不提供 scrypt、Argon2 和 bcrypt,因为浏览器没有原生实现它们。
- 相同的输入是否总能得到相同的密钥?
- 是的。密钥派生是确定性的:相同的算法、密钥、盐值、哈希、输出长度以及迭代次数(PBKDF2)或 info(HKDF)总会产生相同的字节,因此你可以用它来复现或验证服务端派生的密钥。