什么时候使用
适合需要现代带认证加密、运行环境对 AES 硬件加速依赖较少,或需要对接 RFC 8439 的场景。没有明确互操作要求时,优先使用默认的 XChaCha20-Poly1305。
快速使用
- 保持默认参数,点击“生成随机密钥”。
- 输入明文并执行加密。
- 分别保存密钥和 ChaCha v1 JSON;解密时粘贴 JSON,页面会自动同步算法与密钥来源。
工具说明
这个工具使用 ChaCha20 流加密和 Poly1305 消息认证处理 UTF-8 文本,提供两个带认证的 AEAD 算法:
- ChaCha20-Poly1305:12 字节 nonce,遵循 RFC 8439。
- XChaCha20-Poly1305:24 字节 nonce,默认推荐。
两种算法都使用 32 字节密钥和 16 字节认证标签。工具不提供没有 Poly1305 认证的纯 ChaCha20,避免把不能检测篡改的密文误用于生产场景。
页面默认使用 XChaCha20-Poly1305 + Base64 原始密钥 + ChaCha v1 JSON。也可以改用 RFC 8439 的 ChaCha20-Poly1305、PBKDF2 口令派生或原始参数模式;两种算法都支持 UTF-8 和标准 Base64 AAD。
密钥、口令、AAD、明文和密文只在当前浏览器中处理,不会上传或保存。算法实现来自项目已有的 @noble/ciphers。
算法选择
| 算法 | 密钥 | nonce | 认证标签 | 建议 |
|---|---|---|---|---|
| ChaCha20-Poly1305 | 32 字节 | 12 字节 | 16 字节 | 对接要求 RFC 8439 的系统 |
| XChaCha20-Poly1305 | 32 字节 | 24 字节 | 16 字节 | 默认推荐,更适合随机 nonce |
同一密钥下 nonce 绝不能重复。本工具每次加密都使用浏览器安全随机数生成新 nonce;不要手动复用旧密文中的 nonce 加密新内容。
密钥来源
Base64 原始密钥
输入必须是标准 Base64 编码的 32 字节数据。可以粘贴外部密钥,也可以在浏览器中生成随机密钥。
PBKDF2 口令派生
口令模式使用 PBKDF2-HMAC-SHA-256、600000 次迭代和每次随机生成的 16 字节盐,派生 256 位密钥。JSON 会保存盐和派生参数,但不会保存口令。
AAD
AAD 不会被加密,但会参与 Poly1305 认证。页面支持:
- UTF-8 文本:先使用 UTF-8 转换为字节。
- 标准 Base64:直接表示任意 AAD 字节。
解密时必须提供完全相同的 AAD,否则认证失败。v1 JSON 会保存最终 AAD 字节的 Base64;原始参数模式需要手动重新输入。
密文格式
ChaCha v1 JSON
{
"v": 1,
"alg": "XChaCha20-Poly1305",
"secretMode": "passphrase",
"nonce": "<24-byte Base64>",
"ciphertext": "<Base64>",
"authTag": "<16-byte Base64>",
"aad": "<optional Base64>",
"kdf": "PBKDF2-HMAC-SHA-256",
"iterations": 600000,
"salt": "<16-byte Base64>"
}
ciphertext不包含认证标签。- 没有 AAD 时省略
aad。 - 原始密钥模式省略 KDF、迭代次数和盐。
- 解密时页面会读取 JSON 中的算法和密钥来源,并自动同步页面参数。
原始参数
原始参数模式分别显示:
- Base64 密文。
- 12 或 24 字节 Base64 nonce。
- 16 字节 Base64 认证标签。
- 口令模式使用的 16 字节 Base64 盐值。
原始参数不携带算法和密钥来源,解密时需要手动选择正确配置并保留全部参数。
常见问题
ChaCha20-Poly1305 和 XChaCha20-Poly1305 有什么区别?
主要区别是 nonce 长度。ChaCha20-Poly1305 使用 12 字节 nonce,适合对接 RFC 8439;XChaCha20-Poly1305 使用 24 字节 nonce,更适合直接通过安全随机数生成。
为什么修改密文后无法解密?
Poly1305 会认证密文和 AAD。密钥、nonce、AAD、密文或认证标签任意一项不匹配,解密都会失败。
可以只使用 ChaCha20、不使用 Poly1305 吗?
本工具不提供这种模式。纯 ChaCha20 不能检测密文篡改,容易被误用;这里仅提供带认证的 AEAD 组合。
密钥和内容会上传吗?
不会。随机数生成、密钥派生、加密、认证、解密和复制都在当前浏览器中完成。