scrypt 哈希计算
免费在线 scrypt 哈希计算 工具。100% 本地计算,数据不离开您的设备,隐私安全有保障。
结果将显示在这里...
输入 → 计算哈希
使用指南
关于 scrypt
scrypt(RFC 7914)是一种内存困难型基于密码的密钥派生函数,设计目标是同时消耗大量 CPU 时间和内存资源。它的诞生是为了抵御威胁 PBKDF2 和 bcrypt 的 GPU、FPGA 和 ASIC 暴力破解攻击。scrypt 被用于莱特币(Litecoin)工作量证明、密码管理器和安全密钥派生场景。三个成本参数让您可以灵活调节安全性与性能之间的平衡。
使用步骤
scrypt 是单向密钥派生函数,无法逆向还原:
输出格式
scrypt 输出完整的参数字符串,包含未来验证所需的所有信息:
选择 scrypt 参数
根据安全需求和可接受的延迟选择合适的参数:
常见问题
Q: scrypt 为什么能抵御硬件攻击?
A: scrypt 是内存困难型算法:其内部 ROMix 算法需要以伪随机顺序访问一大块内存(128 × N × r 字节)。这种顺序内存访问模式无法像 SHA-256 那样并行化——N=16384, r=8 时需要随机访问约 16 MB 内存,与纯计算型哈希(如 SHA-256 或 PBKDF2)相比,在 GPU/ASIC 硬件上的攻击成本高出数个数量级。
Q: scrypt 与 bcrypt 和 Argon2 有什么区别?
A: 三者都是密码哈希算法,但设计理念不同:bcrypt(1999)仅具有时间困难性(固定 4 KB 内存),对 GPU 攻击的抵御能力日益减弱。scrypt(2009)具有内存困难性,能抵御 GPU/ASIC,但参数之间存在复杂交互(增大 N 同时通过 p 增加 CPU 成本)。Argon2id(2015,PHC 冠军)具有内存困难性、抗 GPU,且时间/内存/并行度参数相互独立。OWASP 和 NIST 推荐新系统使用 Argon2id,scrypt 是强力的第二选择。
Q: 为什么 N 必须是 2 的幂次方?
A: scrypt 的 ROMix 算法内部将 N 用作查找表的大小,并依赖位掩码运算(index & (N-1))实现高效随机访问。这种掩码技巧只有在 N 为 2 的幂次方时才能正确工作。常用值:交互式场景用 16384(2¹⁴),文件加密用 1048576(2²⁰)。
Q: scrypt 的输出可以直接用作密码学密钥吗?
A: 可以——scrypt 专门设计用于产生密钥材料。32 字节(256 位)的输出可直接用作 AES-256 密钥或 ChaCha20-Poly1305 密钥。但切勿将同一个 scrypt 派生结果用于多种用途(例如同时用于认证和加密)——应使用不同的盐值派生独立密钥,或使用 HKDF 等 KDF 从一个根密钥扩展出多个子密钥。
Q: 验证时的输入格式是什么?
A: 要验证密码与存储的 scrypt 哈希是否匹配,请将密码和完整的 scrypt 输出字符串用管道符分隔:password|16384:8:1:salt_base64:key_hex。工具会使用存储的参数重新派生密钥,并与存储的密钥进行比较。匹配时返回「✓ 密码验证成功」。
Q: scrypt 适合用于数据库密码存储吗?
A: 适合,但需要配置合适的参数。每个用户存储完整字符串(n:r:p:salt:key)——它包含未来验证所需的所有信息。交互式登录至少使用 N=16384, r=8, p=1;对于更高安全要求的应用可增大 N。请参阅 OWASP 密码存储速查表 获取最新建议。
使用场景
推荐:密码存储
scrypt 是将密码存入数据库前进行哈希的绝佳选择。其内存困难特性使离线暴力破解的成本比 PBKDF2 或 bcrypt 高出数个数量级。Web 应用使用 N≥16384,对于更敏感的系统可进一步增大参数。
- ✅ 交互式 Web 登录使用 scrypt N=16384, r=8, p=1
- ✅ 存储完整的 n:r:p:salt:key 字符串——绝不能只存密钥
- ✅ 每个用户使用唯一随机盐值(本工具自动生成)
- ❌ 不要使用 N<1024 的 scrypt——工作因子不足
- 💡 新项目可考虑 Argon2id——目前的 OWASP 首选
推荐:磁盘加密密钥派生
scrypt 非常适合从口令派生磁盘或文件加密密钥。更高的参数(N=1048576)是合适的,因为派生操作只在挂载时执行一次,几秒钟的延迟是可接受的。派生出的密钥可直接用于 AES-256-GCM。
- ✅ 磁盘/文件加密密钥派生使用 scrypt N=1048576(2²⁰)
- ✅ 32 字节输出可直接用作 AES-256-GCM 密钥
- ✅ 将 scrypt 参数和盐值与加密数据一同存储
- ❌ 不要将同一派生密钥同时用于认证和加密
推荐:加密货币应用
scrypt 被莱特币(Litecoin)(及其他加密货币)采用为工作量证明算法。在钱包应用中,scrypt 用于从助记词或口令派生私钥。其内存困难特性正是为了抵御 ASIC 矿机优势而被采用的。
- ✅ 从用户口令派生钱包密钥使用 scrypt
- ✅ 口令保护密钥存储使用 scrypt
- ❌ 对于 PoW 挖矿应用,请使用特定实现的参数
不推荐:无需认证的场景
scrypt 派生的是密钥——它本身不提供认证或完整性保护。如果需要消息认证码,请使用 HMAC-SHA256。如果需要快速数据校验,请使用 SHA-256。scrypt 的计算成本使其不适合高吞吐量操作。
- ❌ scrypt 不适合通用哈希(请使用 SHA-256)
- ❌ scrypt 不适合 HMAC 或消息认证
- ❌ scrypt 不适合高频操作(API 请求签名、单次请求令牌等)
- ✅ 仅在明确需要密码保护特性时才使用 scrypt
最佳实践摘要
- scrypt 是内存困难型 KDF——适用于密码哈希和从口令派生密钥。
- 始终存储完整的参数字符串(n:r:p:salt:key)——绝不能只存密钥。
- N 必须是 2 的幂;默认 N=16384, r=8, p=1 适合交互式登录。
- 对于新应用,OWASP 推荐 Argon2id 作为首选;scrypt 是强力的第二选择。
- scrypt 不适合通用哈希、消息认证码或高频操作——这些场景请使用 SHA-256 或 HMAC。