Argon2 哈希计算

免费在线 Argon2 哈希计算 工具。100% 本地计算,数据不离开您的设备,隐私安全有保障。

General
Password Hashing / KDF
Specialized
Deprecated
KiB
iterations

Verify: input format is "password|hash"

输出

结果将显示在这里...

输入 计算哈希

使用指南

关于 Argon2

Argon2 是 2015 年密码哈希竞赛(Password Hashing Competition)的冠军算法,由卢森堡大学设计。它是目前最安全的密码哈希算法,被 OWASP、NIST 等权威机构推荐用于密码存储。Argon2 有三个变体:Argon2d(抗 GPU)、Argon2i(抗侧信道攻击)、Argon2id(混合模式,推荐)。与传统哈希算法不同,Argon2 具有可调节的计算成本和内存消耗,能有效抵御暴力破解、GPU 攻击和 ASIC 攻击。

OWASP 推荐:Argon2id 是 OWASP 密码存储指南 的首选算法。它结合了 Argon2d 的抗 GPU 特性和 Argon2i 的抗侧信道攻击特性,提供最全面的安全保护。推荐用于所有新项目的密码存储

使用步骤

Argon2 支持密码哈希和验证两种操作:

1. 选择模式选择「加密」模式对密码进行哈希,或选择「解密」模式验证密码
2. 输入密码在输入框填入需要哈希或验证的密码
3. 计算哈希点击「计算哈希」按钮,Argon2 会自动生成随机盐值并计算哈希
4. 保存结果复制完整的哈希字符串(包含算法参数、盐值和哈希值)存储到数据库
5. 验证密码验证时,输入原始密码和完整哈希字符串,系统会自动提取参数并验证
隐私保护:所有计算在浏览器本地高速完成,数据不会上传服务器,完全离线处理。

算法特点

Argon2 专为密码存储设计,具有以下独特优势:

内存困难需要大量内存(默认 64MB),使 GPU 和 ASIC 攻击成本极高
可调成本可调节时间成本(迭代次数)、内存成本和并行度,适应不同安全需求
抗侧信道Argon2i 和 Argon2id 能抵御缓存时序攻击等侧信道攻击
自动加盐内置随机盐值生成,无需手动管理盐值
版本化哈希字符串包含算法版本和参数,便于未来升级和迁移
参数配置:Argon2 的安全性取决于参数配置。OWASP 推荐:内存成本 ≥ 47MB(m=47104)、时间成本 ≥ 1 次迭代(t=1)、并行度 = 1(p=1)。如果服务器性能允许,可以增加内存成本到 64MB 或更高。避免使用过低的参数,否则会降低安全性。

三个变体对比

Argon2 有三个变体,适用于不同场景:

Argon2d数据依赖型,最抗 GPU/ASIC 攻击,但易受侧信道攻击,适合加密货币挖矿
Argon2i数据独立型,抗侧信道攻击,但抗 GPU 能力稍弱,适合密码哈希
Argon2id混合模式(推荐),结合两者优点,既抗 GPU 又抗侧信道,适合所有场景
推荐选择:除非有特殊需求,否则始终使用 Argon2id。它是 OWASP、NIST 和密码学专家的一致推荐,提供最全面的安全保护。

常见问题

Q: Argon2 和 bcrypt/PBKDF2 有什么区别?

A: Argon2:现代算法(2015),内存困难,抗 GPU/ASIC,OWASP 首选。bcrypt:经典算法(1999),计算困难,抗 GPU 能力中等,广泛使用但逐渐被 Argon2 取代。PBKDF2:标准算法(2000),计算困难,易受 GPU 攻击,需要极高迭代次数(≥ 600k)才安全。性能对比:在相同安全级别下,Argon2 比 bcrypt 快 2-3 倍,比 PBKDF2 快 10 倍以上。推荐:新项目使用 Argon2id,现有项目逐步迁移到 Argon2。

Q: Argon2 的参数应该如何配置?

A: OWASP 推荐配置内存成本(m):47104 KB(约 47MB),服务器性能好可增至 64MB 或更高。时间成本(t):1-3 次迭代,通常 1 次即可。并行度(p):1(单线程),避免并行攻击。哈希长度:32 字节(256 位)。调优方法:在开发环境测试,确保单次哈希耗时 0.5-1 秒,然后根据服务器性能调整。注意:参数越高越安全,但会增加服务器负载和响应时间。

Q: 为什么 Argon2 比 SHA-256 更适合密码存储?

A: SHA-256 是通用哈希函数,设计目标是快速计算,这在密码存储场景下是致命弱点。GPU 可以每秒计算数十亿次 SHA-256,即使加盐也容易被暴力破解。Argon2 的优势:1)慢速设计:单次哈希耗时 0.5-1 秒,大幅降低暴力破解速度。2)内存困难:需要大量内存(64MB),GPU 和 ASIC 无法并行攻击。3)可调成本:随着硬件升级,可以增加参数保持安全性。结论:密码存储必须使用专门的密码哈希算法(Argon2、bcrypt、PBKDF2),不要使用通用哈希函数(SHA-256、MD5)。

Q: Argon2 的哈希字符串格式是什么?

A: Argon2 使用 PHC(Password Hashing Competition)字符串格式:$argon2id$v=19$m=65536,t=3,p=1$saltbase64$hashbase64各部分含义$argon2id:算法变体(id/i/d)。v=19:算法版本(当前为 19)。m=65536,t=3,p=1:内存成本(KB)、时间成本(迭代次数)、并行度。saltbase64:Base64 编码的盐值(16 字节)。hashbase64:Base64 编码的哈希值(32 字节)。优点:自包含所有参数,验证时无需额外存储,便于未来升级。

Q: 如何从 bcrypt 迁移到 Argon2?

A: 渐进式迁移方案:1)双重验证:保留 bcrypt 验证逻辑,新用户和密码修改时使用 Argon2。2)透明升级:用户登录时,先用 bcrypt 验证,验证成功后立即用 Argon2 重新哈希并更新数据库。3)标识字段:在数据库添加字段标识哈希算法类型(bcrypt/argon2)。4)完全迁移:经过一段时间(如 6 个月),大部分活跃用户已迁移,可以强制要求剩余用户重置密码。注意bcrypt 和 Argon2 的哈希格式不同,可以通过前缀($2a$ vs $argon2id$)自动识别。

Q: Argon2 在浏览器中计算会不会太慢?

A: Argon2 的设计目标就是慢速计算,这是安全性的保证而非缺陷。在浏览器中计算 Argon2,单次哈希耗时 0.5-1 秒,这对用户体验影响很小(用户输入密码后等待 1 秒是可接受的)。优化建议:1)异步计算:使用 Web Worker 在后台计算,避免阻塞 UI。2)进度提示:显示“正在加密...”的提示,改善用户体验。3)参数调整:浏览器环境可以适当降低内存成本(如 32MB),但不要低于 OWASP 最低推荐(47MB)。注意:服务端验证时也需要相同的计算时间,这是 Argon2 的核心安全机制。

使用场景

推荐:用户密码存储

这是 Argon2 的主要应用场景。用户注册或修改密码时,使用 Argon2id 哈希密码并存储到数据库。登录时,提取存储的哈希字符串,使用相同参数对用户输入的密码进行哈希,然后对比结果。Argon2 的内存困难特性使暴力破解成本极高,即使数据库泄露也能保护用户密码。

推荐配置:
  • ✅ Argon2id(OWASP 推荐,首选)
  • bcrypt(经典选择,成本因子 ≥ 12)
  • PBKDF2-SHA256(≥ 600k 迭代)
  • ❌ 不要使用 SHA-256、MD5 等通用哈希
推荐:API 密钥哈希

API 密钥(如 API Token、Access Key)通常需要存储到数据库,但不应明文存储。使用 Argon2 哈希 API 密钥,即使数据库泄露,攻击者也无法获取原始密钥。验证时,对用户提供的密钥进行哈希并对比。注意:API 密钥通常是随机生成的高熵字符串,可以适当降低 Argon2 的参数(如 t=1, m=32MB)以提高性能。

推荐配置:
  • ✅ Argon2id(高安全性)
  • bcrypt(平衡性能和安全)
  • SHA-256 + 盐值(高熵密钥可用)
  • 💡 考虑使用哈希前缀索引加速查询
推荐:加密货币钱包

加密货币钱包需要用密码保护私钥。使用 Argon2d(数据依赖型)从用户密码派生加密密钥,然后用该密钥加密私钥。Argon2d 的抗 GPU 特性使暴力破解钱包密码成本极高。注意:钱包场景通常使用 Argon2d 而非 Argon2id,因为侧信道攻击风险较低,而抗 GPU 能力更重要。

推荐配置:
  • ✅ Argon2d(抗 GPU,钱包推荐)
  • ✅ Argon2id(更全面的安全)
  • scrypt(经典选择,比特币核心使用)
  • 💡 结合硬件钱包提供更高安全性
推荐:文件加密密钥派生

使用 Argon2 从用户密码派生文件加密密钥。用户提供密码后,Argon2 生成固定长度的密钥(如 256 位),然后用该密钥加密文件(如使用 AES-256-GCM)。盐值和 Argon2 参数存储在文件头部,解密时提取参数并重新派生密钥。这种方案广泛应用于加密压缩包(如 7-Zip、WinRAR)和磁盘加密(如 VeraCrypt)。

推荐配置:
  • ✅ Argon2id(推荐)
  • ✅ Argon2i(抗侧信道)
  • scrypt(经典选择)
  • 💡 盐值和参数存储在文件头部
推荐:双因素认证备份码

双因素认证(2FA)的备份码需要哈希后存储,防止数据库泄露时被滥用。由于备份码是随机生成的高熵字符串(通常 8-16 位),可以使用较低的 Argon2 参数(如 t=1, m=32MB)以提高性能。验证时,对用户输入的备份码进行哈希并对比,验证成功后立即失效该备份码。

推荐配置:
  • ✅ Argon2id(推荐)
  • bcrypt(性能更好)
  • SHA-256 + 盐值(高熵备份码可用)
  • 💡 备份码使用后立即失效
不推荐:实时性能敏感场景

Argon2 的慢速特性使其不适合需要极高性能的场景,如高频 API 认证、实时游戏登录、物联网设备认证等。这些场景应使用基于令牌的认证(如 JWT、OAuth)或会话管理,而不是每次请求都进行密码哈希。Argon2 只在用户登录时使用一次,验证成功后颁发令牌,后续请求使用令牌认证。

推荐配置:
  • ✅ JWT + HMAC-SHA256(高性能)
  • ✅ Session + Cookie(传统方案)
  • ✅ OAuth 2.0(标准协议)
  • ❌ 不要在高频场景使用 Argon2

最佳实践建议

  • Argon2id 是密码存储的最佳选择,推荐用于所有新项目。现有项目应逐步从 bcrypt/PBKDF2 迁移到 Argon2。
  • 参数配置遵循 OWASP 推荐:m ≥ 47MB, t ≥ 1, p = 1。服务器性能好可以增加内存成本到 64MB 或更高。
  • 不要在高频场景使用 Argon2,应结合令牌认证(JWT、Session)实现高性能。
  • 从 bcrypt 迁移时使用渐进式方案:保留 bcrypt 验证,新用户和密码修改时使用 Argon2,登录时透明升级。
  • 浏览器环境计算 Argon2,配合 Web Worker 和进度提示改善用户体验。

讨论与反馈

0 条评论