ChaCha20-Poly1305 加密解密

免费在线 ChaCha20-Poly1305 加密解密 工具。100% 本地计算,数据不离开您的设备,隐私安全有保障。

National Standards
Legacy
输出

结果将显示在这里...

输入 加密

使用指南

关于 ChaCha20-Poly1305

ChaCha20-Poly1305 是一种带关联数据的认证加密(AEAD)算法,将 ChaCha20 流密码与 Poly1305 消息认证码结合。由 Daniel J. Bernstein 设计,标准化于 RFC 8439,并被 TLS 1.3、SSH 和 WireGuard 采用为主要密码套件。它在单次操作中同时提供保密性(加密)和完整性(认证),防止窃听和密文篡改。ChaCha20-Poly1305 作为软件友好型替代方案设计,适用于没有硬件 AES 加速的平台。

现代 TLS 标准:ChaCha20-Poly1305 是 TLS 1.3 中两个强制密码套件之一(另一个是 AES-256-GCM)。在移动端和 IoT 设备上是首选,与 AES-256-GCM 在所有平台上安全性相当。

使用步骤

本工具支持加密和解密操作。密钥为必填项;Nonce 留空时自动生成:

1. 生成或输入密钥点击「Secret Key (Hex)」旁的随机按钮生成随机 32 字节(256 位)密钥,或手动输入 64 个十六进制字符
2. Nonce(可选)留空则每次加密自动生成随机 12 字节 Nonce。解密时 Nonce 已内嵌于密文中,保持此字段为空即可
3. 加密在输入框中输入明文,选择「加密」模式,点击「加密」。输出为 base64 字符串,包含 12 字节 Nonce 前缀和密文+认证标签
4. 解密将 base64 密文粘贴到输入框,选择「解密」模式,输入加密时使用的相同密钥,点击「解密」
隐私保护:所有 ChaCha20-Poly1305 运算完全在浏览器中执行,数据不会发送到任何服务器——完全离线处理。

密钥与 Nonce 格式

ChaCha20-Poly1305 使用固定长度的参数:

密钥32 字节(256 位)——以 64 个十六进制字符输入,或使用随机生成器
Nonce12 字节(96 位)——以 24 个十六进制字符输入,或留空自动生成。同一密钥下绝不能重复使用相同的 Nonce
密文格式base64(Nonce[12 字节] + 密文 + 认证标签[16 字节]),Nonce 前置于密文中,解密时自包含无需额外传递
认证标签16 字节(128 位)Poly1305 认证标签,加密时自动追加,解密时自动验证
切勿重复使用 Nonce:对同一密钥重复使用相同的 Nonce 会完全破坏 ChaCha20-Poly1305 的安全性——攻击者可恢复密钥流并解密所有消息。请始终为每次加密使用唯一 Nonce,或让本工具自动生成。

ChaCha20-Poly1305 与 AES-GCM 对比

两者均为 TLS 1.3 的 AEAD 密码套件。以下是选择建议:

ChaCha20-Poly1305适合无硬件 AES 的移动端、ARM 和 IoT 设备。软件实现为常数时间,抗时序攻击,无需硬件加速器
AES-GCM在有 AES-NI 硬件指令的平台(大多数现代 x86/x64 CPU)上更快
安全性等价两者均提供 256 位密钥强度和 128 位认证标签,安全性无显著差异
TLS 1.3 策略TLS 1.3 自动协商:有 AES-NI 的服务器/桌面端优先使用 AES-GCM;无硬件 AES 的移动端客户端优先使用 ChaCha20-Poly1305

常见问题

Q: 为什么输出比输入长?

A: 加密输出经过 base64 编码,并包含:12 字节 Nonce + 明文长度 + 16 字节 Poly1305 认证标签。因此二进制开销为 28 字节(12 Nonce + 16 标签),base64 编码再增加约 33% 的长度。这是所有同时提供加密和认证的 AEAD 算法的标准开销。

Q: 如果我篡改密文会怎样?

A: ChaCha20-Poly1305 将拒绝解密被篡改的密文。Poly1305 标签是对整个密文计算的消息认证码,任何修改——哪怕是一个比特——都会导致标签验证失败,解密函数返回错误而非输出损坏的明文。这是 AEAD 密码的核心安全保证:无法在不被检测的情况下修改密文。

Q: ChaCha20-Poly1305 与 ChaCha20 的区别是什么?

A: 纯 ChaCha20 是仅提供保密性的流密码——它加密数据但不检测篡改。攻击者可以翻转密文中的比特,解密后得到损坏(但未被检测到)的明文。ChaCha20-Poly1305 将 ChaCha20 加密与 Poly1305 认证标签结合,同时提供保密性完整性。"-Poly1305" 后缀表示认证加密。实际使用中请始终选择 ChaCha20-Poly1305,而非裸 ChaCha20。

Q: 可以对多条消息使用同一密钥吗?

A: 可以,但每条消息必须使用唯一的 Nonce。(密钥,Nonce)对绝不能重复使用。使用 12 字节随机 Nonce 时,生日碰撞概率约为 1/296——数十亿条消息内均安全。如果对同一密钥加密极大量的消息(数十亿+),建议定期轮换密钥。本工具的自动生成功能会为每次加密产生加密随机 Nonce。

Q: ChaCha20-Poly1305 能抵抗量子计算机吗?

A: 与所有对称密码一样,ChaCha20-Poly1305 受 Grover 算法影响,有效密钥强度减半——256 位安全性降至 128 位等效。128 位后量子安全性在可预见的未来对大多数应用已足够(NIST 推荐最低 128 位)。因此,使用 256 位密钥的 ChaCha20-Poly1305 在 128 位安全级别下被认为是抗量子的。相比之下, AES-256-GCM 提供相同的后量子安全级别。

Q: 为什么解密失败并提示「invalid key, nonce, or ciphertext」?

A: 此错误表示认证标签验证失败。常见原因:
密钥错误:解密使用的密钥与加密时不同。密钥必须完全一致(相同的 64 个十六进制字符)。
密文损坏:base64 字符串被修改、截断或粘贴不完整。请确保复制完整输出,不含多余空格或换行。
解密非 ChaCha20-Poly1305 数据:输入内容由其他算法或工具加密。Nonce 必须按本工具的格式前置(解码后 base64 的前 12 字节)。

使用场景

推荐:对称文件与消息加密

ChaCha20-Poly1305 是优秀的通用对称加密选择。它在单次操作中完成加密和认证,同时防止窃听和篡改。WireGuard VPN 将其用于所有隧道流量,TLS 1.3 也将其作为两个主要密码套件之一。对于使用共享密钥加密消息、文件或静态数据,ChaCha20-Poly1305 提供现代安全性和简洁的 API。每条消息始终生成新的随机 Nonce,本工具会自动将其前置于输出中。

推荐配置:
  • ✅ ChaCha20-Poly1305(推荐用于移动端、跨平台、纯软件环境)
  • AES-256-GCM (有 AES-NI 硬件时推荐)
  • ✅ XChaCha20-Poly1305(24 字节扩展 Nonce,适合大量消息场景)
  • ❌ 新项目不要使用未认证的密码(AES-CBC、纯 ChaCha20)
推荐:移动端与 IoT 加密

在没有硬件 AES 加速的平台——智能手机、嵌入式系统、IoT 设备——上,ChaCha20-Poly1305 在速度和安全性上均优于 AES-GCM。由于 ChaCha20 是软件友好型算法,在所有平台上都以常数时间运行,不存在时序侧信道风险。Google 正是出于这一原因将 ChaCha20-Poly1305 作为 Android TLS 流量的首选密码套件。如果您的应用场景涉及低功耗设备或纯软件环境,ChaCha20-Poly1305 优于 AES。

推荐配置:
  • ✅ ChaCha20-Poly1305(无硬件 AES 时性能最佳)
  • ✅ AES-256-GCM(有 AES 硬件时可接受)
  • 💡 TLS 1.3 自动协商——两个密码套件均为强制项
  • ❌ 受限设备不要使用 AES-CBC(无认证、速度更慢)
可接受:本地数据加密存储

ChaCha20-Poly1305 可用于保护本地存储的敏感数据——配置文件、凭证、导出归档。请使用密钥派生函数(如 Argon2id)从用户密码派生密钥,而非直接使用密码。将 Nonce 与加密数据一同存储(本工具已将其内嵌于输出中)。同时确保存储 KDF 参数(盐值、迭代次数),以便解密时重新派生密钥。

推荐配置:
  • ✅ ChaCha20-Poly1305 + Argon2id 密钥派生(基于密码的加密)
  • ✅ AES-256-GCM + PBKDF2(FIPS 合规环境)
  • 💡 存储内容:Argon2id 参数 + 盐值 + ChaCha20 Nonce + 密文
  • ❌ 本地存储不要使用 ECB 模式或未认证的密码
不推荐:大文件加密

标准 ChaCha20-Poly1305 为处理最大约 64 GB 的消息而设计(ChaCha20 计数器为 32 位,提供 232 × 64 字节块)。对于实际的大文件加密,建议使用将数据分块的流式 AEAD 构造(如 age、libsodium secretstream)。标准 ChaCha20-Poly1305 还会在认证之前缓冲整个密文,对大文件而言内存消耗较高。对于超过几 MB 的文件,请使用支持分块加密的专用工具或库。

推荐配置:
  • 💡 超过几 MB 的文件请使用分块 AEAD
  • ✅ libsodium secretstream(流式 ChaCha20-Poly1305)
  • ✅ age 加密工具(面向文件,内部使用 ChaCha20-Poly1305)
  • ✅ 流式 AES-256-GCM(硬件加速环境)
不推荐:密钥交换或身份认证

ChaCha20-Poly1305 是对称密码——双方必须已共享相同的密钥,它无法解决密钥分发问题。若需在不可信网络上安全交换密钥,请使用非对称协议: X25519 (Diffie-Hellman 密钥交换),或完整协议如 TLS 1.3(握手后使用 ChaCha20-Poly1305)。若需无共享密钥的身份认证,请使用 RSA 或 ECDSA 数字签名。ChaCha20-Poly1305 本身无法认证身份。

推荐配置:
  • ❌ ChaCha20-Poly1305 不解决密钥分发问题
  • ✅ TLS 1.3(处理密钥交换 + ChaCha20-Poly1305 数据加密)
  • ✅ X25519 + ChaCha20-Poly1305(Noise 协议模式)
  • ✅ RSA / ECDSA(数字签名与身份验证)
不推荐:密码哈希存储

ChaCha20-Poly1305 是加密算法,而非密码哈希函数。加密是可逆的——任何持有密钥的人都能解密密码。密码存储需要单向函数,且要故意设计得缓慢且内存消耗大。密码哈希请使用 Argon2id (首选)或 bcrypt。切勿加密存储密码——应始终使用哈希存储。

推荐配置:
  • ❌ 不要用 ChaCha20-Poly1305 存储密码(可逆加密)
  • Argon2id (首选密码哈希算法)
  • bcrypt (广泛支持,现有系统适用)
  • ✅ scrypt / PBKDF2(备选密码 KDF)

最佳实践总结

  • 在无 AES 硬件加速的场景使用 ChaCha20-Poly1305——移动端、IoT 和跨平台软件。
  • 每次加密务必使用唯一的随机 Nonce。Nonce 字段留空时,工具会自动生成。
  • 密文输出已内嵌 12 字节 Nonce 和 16 字节认证标签——只需存储单个 base64 字符串即可完成解密。
  • 切勿重复使用同一(密钥,Nonce)对。Nonce 复用会完全破坏 ChaCha20-Poly1305 的安全性。
  • 基于密码的加密请先用 Argon2id 派生密钥——切勿将密码直接作为 ChaCha20-Poly1305 密钥使用。

讨论与反馈

0 条评论