Scrypt 生成器
使用随机盐值或自定义盐值,从密码派生 scrypt 密钥。选择最高为 15 的成本指数(N 最高为 32768)、最高为 8 的区块大小 r、最高为 4 的并行度 p,以及 16 到 64 字节的密钥长度。该工具遵循 RFC 7914,并以十六进制或 Base64 格式返回密钥、所用盐值和参数,可用于与 Node.js crypto.scrypt、Python hashlib 或 libsodium 的结果进行比较。密码不会回显。
常见问题
什么是 scrypt?
Scrypt 是 Colin Percival 设计的一种内存密集型密钥派生函数,已通过 RFC 7914 标准化。它根据密码和盐值派生密钥,同时强制每次尝试都使用大量内存。它用于密码存储、磁盘加密和一些加密货币。
N、r 和 p 分别代表什么?
N 是 CPU 和内存成本,必须是 2 的幂;r 是区块大小;p 是并行化系数。内存用量约为 128 乘以 N 再乘以 r 字节,因此 N = 16384 且 r = 8 时需要 16 MiB。此处 N 最高为 32768,r 最高为 8,p 最高为 4。
默认参数是什么?
默认值为 N = 16384(成本指数 14)、r = 8、p = 1,密钥长度为 32 字节;这是 scrypt 论文推荐的交互式设置。请在系统允许的范围内增大 N,以加强保护。
盐值如何选择?
如果盐值字段留空,工具会生成 16 个随机字节,并在结果中显示。如果你输入盐值,则会使用其 UTF-8 字节,这样便可复现由其他系统生成的密钥。不同密码绝不能重复使用同一个盐值。
可以复现 RFC 7914 测试向量吗?
可以。密码 pleaseletmein、盐值 SodiumChloride、成本指数 14、r = 8、p = 1 和 64 字节密钥会得到 7023bdcb3afd7348461c06cd81fd38ebfda8fbba904f8e3ea9b543f6545da1f2d5432955613f0fcf62d49705242a9af9e61e85dc0d651e40dfcf017b45575887,即 RFC 的第三个测试向量。
为什么参数设有上限?
Scrypt 会分配实际内存,并在共享服务器上运行。将 N 限制为 32768、r 限制为 8、p 限制为 4,可将每次派生的内存用量控制在约 32 MiB 以内,耗时控制在一两秒。
如何存储 scrypt 密码哈希?
请将密钥、盐值以及 N、r 和 p 一并存储,因为之后检查密码时需要用到这些值。像 Node.js crypto.scrypt 这样的库会将存储格式交由你决定,而其他库则使用各自的字符串格式。
结果中会包含我的密码吗?
不会。响应中包含密钥、盐值和参数,但绝不包含密码。任何内容都不会被记录或存储。
我应该使用 scrypt 还是 Argon2?
两者都具有内存硬性,适合用于密码。Argon2id 是较新的推荐方案,也更容易调整;而 scrypt 在 Node.js 和 Python 等标准库中得到广泛支持。
hex 和 Base64 选项会改变什么?
这些选项会改变结果中密钥和盐值的表示方式。字节内容相同,因此请选择代码能够读取的形式。