ChaCha20-Poly1305 加密解密
免费在线 ChaCha20-Poly1305 加密解密 工具。100% 本地计算,数据不离开您的设备,隐私安全有保障。
结果将显示在这里...
输入 → 加密
使用指南
关于 ChaCha20-Poly1305
ChaCha20-Poly1305 是一种带关联数据的认证加密(AEAD)算法,将 ChaCha20 流密码与 Poly1305 消息认证码结合。由 Daniel J. Bernstein 设计,标准化于 RFC 8439,并被 TLS 1.3、SSH 和 WireGuard 采用为主要密码套件。它在单次操作中同时提供保密性(加密)和完整性(认证),防止窃听和密文篡改。ChaCha20-Poly1305 作为软件友好型替代方案设计,适用于没有硬件 AES 加速的平台。
使用步骤
本工具支持加密和解密操作。密钥为必填项;Nonce 留空时自动生成:
密钥与 Nonce 格式
ChaCha20-Poly1305 使用固定长度的参数:
ChaCha20-Poly1305 与 AES-GCM 对比
两者均为 TLS 1.3 的 AEAD 密码套件。以下是选择建议:
常见问题
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(数字签名与身份验证)
不推荐:密码哈希存储
最佳实践总结
- 在无 AES 硬件加速的场景使用 ChaCha20-Poly1305——移动端、IoT 和跨平台软件。
- 每次加密务必使用唯一的随机 Nonce。Nonce 字段留空时,工具会自动生成。
- 密文输出已内嵌 12 字节 Nonce 和 16 字节认证标签——只需存储单个 base64 字符串即可完成解密。
- 切勿重复使用同一(密钥,Nonce)对。Nonce 复用会完全破坏 ChaCha20-Poly1305 的安全性。
- 基于密码的加密请先用 Argon2id 派生密钥——切勿将密码直接作为 ChaCha20-Poly1305 密钥使用。