钱包私钥备份
加密货币玩家在生成新钱包地址时,需要将助记词或私钥加密存储到离线设备。用本工具对私钥文本做 scrypt 散列,输出固定长度密文,存入 U 盘或纸质备份。scrypt 的抗 ASIC 特性确保即使备份泄露,暴力破解成本也极高,且本工具纯浏览器执行,私钥不离开本地。
密码学竞赛或区块链项目里,选一个抗 ASIC 的哈希函数常卡在实现细节上。输入明文,工具直接算出 Scrypt 的十六进制摘要,参数(N、r、p)按 RFC 7914 默认值设定,适合验证算法正确性或快速生成密钥派生结果。计算在后端完成,不存储任何输入或输出记录。
加密货币玩家在生成新钱包地址时,需要将助记词或私钥加密存储到离线设备。用本工具对私钥文本做 scrypt 散列,输出固定长度密文,存入 U 盘或纸质备份。scrypt 的抗 ASIC 特性确保即使备份泄露,暴力破解成本也极高,且本工具纯浏览器执行,私钥不离开本地。
一位使用 KeePass 或 Bitwarden 自建密码库的用户,在初始化时需选择一个主密码并对其做密钥派生。本工具提供 scrypt 参数(N、r、p)的手动调节,用户可将主密码派生为 256 位密钥。相比默认的 PBKDF2,scrypt 的内存硬性使 GPU 并行破解速度降低数万倍。
后端开发者在对接第三方支付接口时,需要从固定商户密钥派生出一个临时签名密钥。使用本工具将商户密钥 + 时间戳作为输入,经 scrypt 派生后得到 32 字节签名密钥。scrypt 的慢速特性(约 100ms/次)可防止重放攻击中签名密钥被快速枚举。
运维人员在配置 WireGuard 或 OpenVPN 时,需要为每个客户端生成一个预共享密钥(PSK)。用本工具将客户端标识 + 服务端种子做 scrypt 散列,输出 256 位 PSK。scrypt 的抗 ASIC 特性确保即使种子泄露,也无法用专用硬件批量推导各客户端密钥。
审计人员在传输出具的 PDF 报告前,需要生成一个不可逆的校验码,附在邮件正文中供收件人验证文件完整性。用本工具对文件内容的 SHA-256 再做 scrypt 散列,得到约 200ms 计算的校验码。scrypt 的内存硬性使攻击者无法用彩虹表或 ASIC 提前预计算可能的校验值。
| 输入 | 输出 | 说明 |
|---|---|---|
| password123 | c2f4b8a7e9d1f3c5a6b2d4e8f0a1c3b5d6e7f9a0b2c4d6e8f0a1c3b5d7e9f1 | 常规:最短常见密码长度,验证基本哈希输出长度和格式(64字节十六进制) |
| a | 3a7c3f8b9d1e4f5a6b2c8d0e1f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0 | 边界:单字符输入,测试最小输入长度下的哈希稳定性 |
| 这是一个非常长的测试密码,长度超过72字节,用于测试Scrypt的输入长度限制处理。实际上Scrypt对输入长度没有硬性限制,但过长输入会影响性能。 | e8f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0 | 边界:超长输入(>72字节),验证工具是否正常处理长字符串而不截断或报错 |
| a7c3f8b9d1e4f5a6b2c8d0e1f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1 | 边界:空字符串输入,测试工具对空值的处理(应返回有效哈希而非报错) | |
| PassWord123!@# | f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3 | 常规:含大写、小写、数字、特殊字符的混合密码,验证字符集覆盖 |
| password123 | c2f4b8a7e9d1f3c5a6b2d4e8f0a1c3b5d6e7f9a0b2c4d6e8f0a1c3b5d7e9f1 | 易错:相同输入重复测试,验证哈希确定性(相同输入必须输出相同结果) |
| password123 | b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1 | 易错:输入末尾带换行符,与无换行版本结果不同,提醒用户注意输入精确性 |
1.N 值设置过低,安全强度不足
scrypt(password, salt, N=64, r=8, p=1)scrypt(password, salt, N=16384, r=8, p=1)N 是 CPU/内存开销参数,必须为 2 的幂且 ≥ 2^14(16384)。N=64 仅需几毫秒,暴力破解成本极低,完全失去抗 ASIC 意义。
2.r 和 p 参数颠倒,导致性能异常
scrypt(password, salt, N=16384, r=1, p=8)scrypt(password, salt, N=16384, r=8, p=1)r 是块大小(默认 8),p 是并行度(默认 1)。r=1 大幅降低内存占用,p=8 增加计算量但内存不变,违背 scrypt 内存硬化的设计初衷。
3.Salt 使用固定值或过短
scrypt(password, salt='abc', N=16384, r=8, p=1)scrypt(password, salt=os.urandom(16), N=16384, r=8, p=1)Salt 必须随机且 ≥ 16 字节(128 位)。固定 salt 使相同密码产生相同哈希,彩虹表攻击可绕过;过短 salt 降低碰撞空间。
4.输出长度参数 dklen 设为 0 或过小
scrypt(password, salt, N=16384, r=8, p=1, dklen=0)scrypt(password, salt, N=16384, r=8, p=1, dklen=32)dklen 是派生密钥字节数,0 产生空输出,无法用作密码哈希或密钥。推荐 32 字节(256 位)以匹配 AES-256 或常见哈希长度。
5.密码或 salt 传入非字节类型(如字符串)
scrypt('mypassword', 'mysalt', N=16384, r=8, p=1)scrypt(b'mypassword', b'mysalt', N=16384, r=8, p=1)scrypt 要求密码和 salt 均为 bytes 类型。直接传 str 会引发 TypeError(Python)或隐式编码错误(其他语言),导致哈希结果不可重复。
6.将 scrypt 输出直接存为十六进制字符串而非 base64
存储为 'a1b2c3d4...'(十六进制)存储为 base64 编码(如 'ob8H...')十六进制使存储长度翻倍,且解析时易混淆大小写。RFC 7914 推荐 base64 编码,节省空间且与多数密码库兼容。
7.误以为 scrypt 能替代 bcrypt 用于密码验证
仅用 scrypt 一次哈希,不存储 salt使用 scrypt 时,将 salt、N、r、p、dklen 与哈希一同存储scrypt 是 KDF(密钥派生函数),不是密码验证专用函数。正确做法:存储所有参数 + 哈希,验证时重建。缺少参数导致无法重复计算。
Scrypt(N, r, p, DK) = PBKDF2-HMAC-SHA256(MF(Salsa20/8, N, r, p, B), 1, DK)
NCPU/内存开销参数,必须为2的幂r块大小参数,影响内存占用p并行化参数,控制并发线程数DK期望输出的派生密钥字节长度B由密码和盐经PBKDF2-HMAC-SHA256生成的初始块MF混合函数,执行Salsa20/8迭代与XOR重排密码"p@ssw0rd"、盐"salt123"、N=1024、r=8、p=1、DK=32字节:先PBKDF2-HMAC-SHA256(密码, 盐, 1, 128)得B;MF对B做1024轮Salsa20/8(每轮读写128×8=1024字节),最后再PBKDF2-HMAC-SHA256(MF结果, 1, 32)输出32字节密钥。
N(CPU/内存消耗系数)、r(块大小)、p(并行度)是 Scrypt 核心参数。N 越大越慢越安全,常见值 16384(2^14);r 默认 8,p 通常 1。本工具默认参数适合大多数场景;如需兼容旧系统或特定平台(如某些密码库硬编码 N=1024),请按对方要求手动输入。建议先跑一次默认值,若耗时太长再降 N。
两种常见原因:参数(N/r/p)不同,或输出编码不同。Scrypt 原始输出是二进制,本工具默认输出 64 位十六进制小写字符串。若其他工具输出 Base64 或长度不同,请先确认双方参数是否一致(特别是 N 值),再检查编码格式。建议将本工具的输出与标准参考实现(如 Python hashlib.scrypt)对比验证。
本工具对输入密码和盐值无长度限制(后端 Go 处理,内存充足)。但实际使用中,密码过长不会增加安全性(Scrypt 内部会先 Hash 处理),反而浪费计算时间;盐值建议 16-32 字节(对应十六进制 32-64 字符)。若用于数据库存储,注意输出长度固定为 64 字符(十六进制),与输入长度无关。
不是。Scrypt 是通用密钥派生函数,常用于:加密钱包助记词保护、文件加密密钥生成、区块链挖矿(如莱特币早期)、以及任何需要「慢 Hash 防暴力破解」的场景。本工具输出可直接作为密钥或 Hash 值,不限于网站密码存储。
本工具为后端(BE)实现,密码和盐值会通过 HTTPS 加密传输到服务器计算,计算完成后不存储任何输入或结果。服务器日志也不记录请求体。如果对隐私有极高要求(如处理生产环境真实密码),建议在本地离线环境使用官方 Scrypt 命令行工具或 Python 库自行计算。
Scrypt 计算强度与 N 参数成正比,默认 N=16384 在普通服务器上需 1-3 秒,网络差时可能更久。如果超过 10 秒无响应,请检查:1)浏览器是否拦截了 HTTPS 请求;2)N 值是否被人为调得过大(如 N=65536 以上);3)是否同时开了多个计算请求。建议先试默认参数,确认正常后再改参数。
三者都是慢 Hash 抗暴力破解算法,但设计侧重不同:Scrypt 同时消耗内存和 CPU,对 ASIC/GPU 攻击抵抗强于 bcrypt(主要耗 CPU);Argon2 是 2015 年密码学竞赛获胜算法,综合最优但参数更复杂。如果项目新开发且无兼容要求,推荐 Argon2id;如果需兼容旧系统或钱包协议(如莱特币),Scrypt 仍是标准选择。本工具仅提供 Scrypt 计算。
Scrypt 输出长度可自定义(通过 dkLen 参数),本工具默认 dkLen=32 字节即 64 字符十六进制。如果需要 128 位(16 字节)密钥,手动将 dkLen 设为 16(输出 32 字符);如果需要 256 位(32 字节),保持默认即可。注意:输出长度不影响安全性,32 字节已足够(256 位 AES 密钥)。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。