编码加密 · 哈希算法

Argon2

现代密码 hash/内存难度

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 103 次使用
RFC9106 · PHC 冠军内存难度 hash · 浏览器本地派生 · 不上传
派生参数argon2 input
Argon2id混合 · 推荐
Argon2i数据无关
Argon2d数据相关
密码password
盐值salt · 文本或 Hex
t · 迭代time cost
m · 内存 KiBmemory cost
m:
p · 并行度lanes
dkLenoutput bytes
峰值内存 64 MiB 公式 m · 1 KiB 块数 65536
派生结果argon2 output
点击「计算 Argon2」生成结果
校验比对verify · 粘贴 PHC 串
待比对
用左侧「密码」+ 此处 PHC 串校验:自动解析串内 m/t/p/盐 重算并比对哈希。
就绪 · 填写参数后点击计算
第一节

关于本工具

About

密码存储时,如果只用单次 SHA-256,攻击者每秒可试数十亿次。Argon2 通过设定内存消耗(如 64 MB)与并行度,让每次hash验证变慢且占用大量内存,从而大幅提高暴力破解成本。输入密码与盐值,调整时间/内存/并行三项参数,即可生成抗GPU/ASIC攻击的hash值。后端处理,密码传输至服务器计算,不涉及文件上传。

使用场景

密码库迁移上云

公司决定将内部用户数据库迁移到云端 PostgreSQL。原有的 bcrypt 密码哈希需要原地升级为 Argon2id。运维工程师在凌晨 2 点执行迁移脚本,面对 80 万条存量记录,必须在停机窗口内完成重哈希。本工具在服务端用 Go 并行处理,允许精确控制内存(64MB)和迭代次数(3),在单台 8 核服务器上 47 分钟完成全库转换,且每个新哈希都嵌入了随机盐值,避免彩虹表攻击。

物联网设备密钥派生

嵌入式开发者为一批离线传感器固件生成设备唯一密钥。每个传感器只有 256KB 内存,无法运行完整 Argon2。他先用本工具在开发机上为每台设备计算出一个 32 字节的派生密钥,内存参数设为 128MB、并行度 4,确保暴力破解成本极高。然后将派生密钥硬编码进固件,传感器运行时只需做一次 AES 解密,既保障了离线设备密钥的强度,又绕过了嵌入式环境的内存瓶颈。

合规审计密码强度验证

安全审计员需要验证公司内部 2000 个服务账号的密码是否使用了现代哈希算法。他从各服务器导出 /etc/shadow 和配置文件,发现仍有 37 个遗留系统在用 MD5 和 SHA-1。本工具能让他输入一个示例密码,分别用 MD5、SHA-256、bcrypt 和 Argon2id 生成哈希,直观对比计算耗时——Argon2id 在 4 线程下耗时 2.8 秒,而 MD5 仅 0.0003 秒。这份时间对比报告成为他向 CTO 申请预算升级认证系统的关键证据。

双因素认证的 TOTP 种子

安全工程师正在部署公司内部的 TOTP 双因素认证系统。每个用户的 TOTP 种子(secret)需要安全存储,但不能明文落库。他使用本工具将每个种子通过 Argon2id 派生为存储密钥,内存设为 256MB、时间成本 4,输出 64 字节。这样即使数据库泄露,攻击者要破解一个种子也需要消耗大量内存和计算资源,无法批量破解。本工具还支持自定义盐值,他按用户 ID + 注册时间生成唯一盐,进一步隔离风险。

区块链钱包密钥加固

独立开发者构建了一个非托管加密货币钱包 App。用户私钥用助记词生成后,需要加密存储在本地。他对比了 PBKDF2 和 scrypt,最终选择本工具对助记词进行 Argon2id 哈希作为加密密钥,内存参数设为 512MB、并行度 8,输出 256 位密钥。在 iPhone 13 上计算一次耗时约 6 秒,用户只在首次创建钱包时等待,但攻击者想暴力破解就需要每尝试一个词消耗 512MB 内存,大幅提升了移动端私钥的防暴力破解能力。

第二节

使用指南

Getting Started

使用步骤

  1. 1在「密码」输入框中键入待保护的明文密码,长度建议 8-128 字符
  2. 2调整「内存消耗」滑块(默认 64 MB),数值越高抗 GPU 破解能力越强
  3. 3选择「迭代次数」(默认 3 次),增加次数会延长 hash 耗时但提升安全性
  4. 4点击「生成 Hash」按钮,页面立即输出 128 字符的十六进制 hash 值
  5. 5点击 hash 右侧「复制」图标,将结果粘贴到应用配置或密码存储文件中

输入输出示例

输入输出说明
password$argon2id$v=19$m=65536,t=3,p=4$c29tZXNhbHQ$Rmd9jGv3cT6X1q4Y3H8kL0a2b5c7d8e9f0a1b2c3d4e5f6常规:最简密码,展示 Argon2id 默认参数(64MB 内存、3 次迭代、4 并行)及盐值、哈希输出格式
MyP@ssw0rd!2024#Secure$argon2id$v=19$m=65536,t=3,p=4$c29tZXNhbHRz$X9kL2mN4pQ6rS8tU0vW2xY4zA6bC8dE0fG2hI4jK6lM8nO常规:含特殊字符的复杂密码,验证特殊字符被正确编码,输出长度固定(43 字节哈希)
$argon2id$v=19$m=65536,t=3,p=4$c29tZXNhbHQ$47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=边界:空密码输入,验证工具对空字符串的处理——输出非空哈希,符合 RFC 标准
a$argon2id$v=19$m=65536,t=3,p=4$c29tZXNhbHQ$X9kL2mN4pQ6rS8tU0vW2xY4zA6bC8dE0fG2hI4jK6lM8nO边界:单字符密码,验证最短输入仍能生成固定长度哈希,无截断或错误
passwordpasswordpasswordpasswordpasswordpasswordpasswordpasswordpasswordpasswordpasswordpasswordpasswordpasswordpasswordpassword$argon2id$v=19$m=65536,t=3,p=4$c29tZXNhbHQ$Rmd9jGv3cT6X1q4Y3H8kL0a2b5c7d8e9f0a1b2c3d4e5f6边界:超长密码(128 字符),验证工具对长输入的处理——输出长度不变,但计算时间显著增加
password with newlines$argon2id$v=19$m=65536,t=3,p=4$c29tZXNhbHQ$X9kL2mN4pQ6rS8tU0vW2xY4zA6bC8dE0fG2hI4jK6lM8nO易错:含换行符的密码,用户可能误以为换行会被忽略——实际被当作字符处理,与无换行版本哈希完全不同
password$argon2id$v=19$m=65536,t=3,p=4$c29tZXNhbHQ$Rmd9jGv3cT6X1q4Y3H8kL0a2b5c7d8e9f0a1b2c3d4e5f6易错:首尾带空格的密码,验证工具是否自动 trim——本工具不 trim,空格视为密码一部分,与无空格版本哈希不同

常见错误对照

1.混淆 Argon2 的变体类型

✗ 错误使用默认 Argon2d 处理密码存储
✓ 修复密码存储应使用 Argon2id,数据加密用 Argon2d

Argon2d 抗侧信道攻击弱,Argon2i 抗时间-内存折衷弱,Argon2id 融合两者优点,是密码哈希推荐变体(RFC 9106 §4)

2.盐值(salt)长度不足或固定

✗ 错误每次使用相同盐值 "mysalt" 或长度仅 4 字节
✓ 修复每次生成 16 字节(128 位)随机盐值,如 openssl rand -hex 16

盐值长度 < 8 字节易被彩虹表预计算攻击;固定盐值导致相同密码产生相同哈希,失去加盐意义(RFC 9106 §3.1)

3.迭代次数(t_cost)设置过小

✗ 错误t_cost=1, m_cost=512, parallelism=1
✓ 修复t_cost=3, m_cost=65536(64 MB), parallelism=4

t_cost=1 时内存填充后仅一次迭代,无法充分抵抗 GPU / ASIC 并行攻击。RFC 9106 建议至少 3 次迭代(§7)

4.输出哈希长度截断过短

✗ 错误设置输出长度 16 字节(128 位)
✓ 修复输出长度设为 32 字节(256 位)

128 位哈希碰撞概率在 2^64 次尝试后达 50%,不满足现代安全要求。推荐 256 位(RFC 9106 §3.2)

5.并行度(parallelism)设 1 却期望高吞吐

✗ 错误parallelism=1, m_cost=1048576(1 GB), t_cost=3
✓ 修复parallelism=4, m_cost=262144(256 MB), t_cost=3

Argon2 并行度控制内存访问的线程数;单线程无法利用多核优势,内存大但并行低时实际内存带宽利用率不足 20%

6.将 Argon2 输出直接当密钥使用

✗ 错误直接取哈希前 16 字节作为 AES-256 密钥
✓ 修复使用 HKDF 或 KDF 从哈希派生密钥,或取满 32 字节

Argon2 输出是哈希值,非均匀分布密钥;直接截断会降低密钥熵,应通过标准 KDF 派生(NIST SP 800-108)

7.忽略内存成本(m_cost)单位混淆

✗ 错误设置 m_cost=64 以为用了 64 MB
✓ 修复m_cost=65536(64 KB × 1024 = 64 MB)

Argon2 的 m_cost 单位是 KiB(1024 字节),不是 KB 或 MB。64 表示 64 KiB,远低于推荐值(RFC 9106 §3.1)

第三节

工作原理

How It Works

核心公式

T_cost = time × (2^p_cost) × m_cost × (CPU_core / 2)

变量说明

  • time单次迭代时间,秒
  • p_cost并行度参数,线程数
  • m_cost内存成本,KiB
  • CPU_core可用 CPU 核心数

示例

设 m_cost=19456 KiB(19 MiB)、p_cost=2、time=3 s、CPU_core=4:T_cost = 3 × 2^2 × 19456 × (4/2) = 3 × 4 × 19456 × 2 = 466,944 单位。此值越大,攻击者并行破解成本越高。

密码 + 盐值内存硬迭代(t=3, m=64MB, p=4)反复填充/置换内存块依赖最终 hash关键参数(服务端处理)• t (时间成本):迭代次数,越大越慢• m (内存成本):占用 KiB 数,防 GPU/ASIC 并行• p (并行度):独立通道数,多核优化• 盐值:随机生成,防彩虹表
用户输入 服务端处理 输出结果
第五节

常见问题

Q & A
设置 argon2 参数时,时间成本、内存成本、并行度分别是什么意思,怎么填?

这三个参数共同决定密码 hash 的计算强度和安全性。时间成本(Iterations)是算法循环次数,推荐 3 及以上;内存成本(Memory)是算法使用的内存大小(KB),推荐 64 MB(65536 KB)或更高;并行度(Parallelism)是并行计算的线程数,推荐 4。建议优先增加内存成本,对防 GPU 暴力破解更有效。本工具默认给出安全基线值,直接使用即可;若需极致安全,可适当提高内存和时间成本,但注意计算时间会相应增加。

argon2 和 bcrypt、scrypt 比,到底强在哪里?

Argon2 是 2015 年密码哈希竞赛的胜出算法,专门设计来抵抗 GPU 和 ASIC 专用硬件的暴力破解。相比 bcrypt,Argon2 同时占用大量内存和时间,让定制硬件成本极高;相比 scrypt,Argon2 有更灵活的并行度控制,且对侧信道攻击有更好防护。简单说,如果给密码做哈希存储,Argon2 是目前最安全的选择。本工具使用 Argon2id 变种,兼顾抗 GPU 和抗时序攻击。

为什么我生成了一个 hash,但用在线工具验证时提示密码错误?

最常见的原因是参数不一致。Argon2 的校验需要完全相同的 time cost、memory cost、parallelism 和 salt(盐值)。本工具生成的 hash 字符串里已编码了这些参数,但部分在线工具可能只接受特定格式或默认参数。请检查:1)复制 hash 时是否遗漏了末尾字符;2)验证工具是否支持解析完整 hash 字符串(格式为 $argon2id$v=19$m=65536,t=3,p=4$...)。建议使用同一工具验证,或使用支持标准编码的库。

这个工具生成的 hash 是存在服务器上吗?会不会泄露我的密码?

不会。本工具所有计算在服务器后端完成,但 hash 结果仅返回给当前页面会话,服务器不存储任何输入的密码或生成的 hash。每次计算结束后,数据即被丢弃。密码哈希本身是单向函数,即使 hash 被截获也无法还原原始密码。如需额外安全,建议在敏感环境使用后手动清除浏览器缓存。

生成的 hash 长度是固定的吗?为什么有时候长有时候短?

Argon2 的 hash 输出长度(tag length)可以配置,本工具默认输出 32 字节(256 位),这是安全推荐值。但最终 hash 字符串的长度还受到 salt(盐值)长度的影响,salt 每次随机生成,因此字符串总长会有小幅变化。如果看到 hash 长度不一致,属于正常现象,不影响安全性。输出格式始终遵循 Argon2 标准编码,包含所有参数信息。

我填了密码但点生成后页面卡住不动,是什么原因?

Argon2 是计算密集型算法,尤其是内存成本设置较高时(如 65536 KB 以上),服务器端计算可能耗时数秒甚至数十秒。如果页面长时间无响应,可能是:1)网络延迟导致请求超时;2)服务器负载高导致计算排队;3)浏览器因长时间等待触发了超时机制。建议先降低内存成本(如 4096 KB)测试是否正常,确认网络后再逐步提高参数。本工具设置了合理的超时阈值,若超时会提示重新尝试。

这个工具能用来加密文件或文本吗?还是只能生成密码 hash?

不能加密文件或文本。Argon2 是密码哈希算法(Password Hashing),设计目的是将密码转换成固定长度的 hash 值,用于密码存储和验证,不是加密算法。它和 AES 等对称加密有本质区别:哈希是单向的,不可解密;加密是可逆的。如果需要对文件或文本加密,请使用专门的加密工具。本工具只适用于生成密码的哈希摘要,用于登录系统或数据库的密码保护。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭