Toolonit
  1. 首页
  2. 加密
  3. 加密 / 解密
  4. ChaCha20

ChaCha20 加密与解密

使用 ChaCha20-Poly1305 或纯 ChaCha20 加密和解密文本。

加密方式

解密时还需要这个密码。输入的任何内容都不会离开本页。

PBKDF2 迭代次数

OpenSSL 的默认值是 10,000。任何次数都可以:次数越多,密码越难猜;解密时必须使用相同的次数。

模式

带认证:密码或密钥错误、文本有任何改动,都能被检测出来。

输出格式
OpenSSL 等效命令

OpenSSL 的 enc 命令无法读取 ChaCha20-Poly1305。请在这里解密,或在代码中用加密库解密:16 字节的标签紧跟在密文之后。

ChaCha20-Poly1305(RFC 8439)是 TLS 1.3 和 WireGuard 使用的认证加密算法:它在加密文本的同时,还能发现文本的任何改动或错误的密码。在这里可以用密码或自定义的 256 位密钥和 12 字节 nonce 加密文本,也可以粘贴 Base64 或 hex 密文进行解密。使用密码时,密钥和 nonce 与 openssl enc -pbkdf2 一样,由 PBKDF2-HMAC-SHA256 加随机盐派生,输出依次为 Salted__、盐、密文和 16 字节的 Poly1305 标签。不带标签的纯 ChaCha20 也可以使用,格式与 OpenSSL 的 chacha20 相同。工具在浏览器中运行,你的文本、密码和密钥不会离开设备;免费,无需注册。

如何用 ChaCha20-Poly1305 加密文本

  1. 选择“加密”或“解密”。输入要加密的文本,或粘贴要解密的 Base64 或 hex 文本,格式会自动识别。
  2. 输入密码(点“生成”可得到一个强密码),或切换到“密钥和 IV(hex)”,输入或生成 64 个 hex 字符的密钥和 24 个 hex 字符的 nonce(纯 ChaCha20 则是 32 个 hex 字符的 IV)。
  3. 保留 ChaCha20-Poly1305,或选择 ChaCha20 以匹配 openssl enc -chacha20。解密时,必须使用与加密时相同的模式、密码和迭代次数。
  4. 复制或下载结果,也可以点“交换”把结果移到输入框,再解密一次进行核对。

功能

  • 符合 RFC 8439 的 ChaCha20-Poly1305:256 位密钥、12 字节 nonce、16 字节标签
  • OpenSSL 格式的纯 ChaCha20:16 字节 IV,由 4 字节小端计数器和 12 字节 nonce 组成
  • 密码模式:密钥和 nonce 由 PBKDF2-HMAC-SHA256 加随机盐派生,前面带 openssl enc -pbkdf2 的 Salted__ 头
  • 密钥和 IV 模式:使用自己的 hex 密钥和 nonce,或点“生成”得到随机值
  • 使用 Poly1305 时,密码或密钥错误、哪怕只改动了一个字符,解密都会失败,而不是返回乱码
  • 无填充:密文与文本等长,使用 Poly1305 时另加 16 字节标签
  • 为纯 ChaCha20 给出 openssl enc -chacha20 命令

隐私安全吗?

是的。ChaCha20 在浏览器内的 WebAssembly 中运行,密码由浏览器的 Web Crypto 进行密钥拉伸。你输入的任何内容——文本、密码、密钥或 nonce——都不会上传或保存。

常见问题

选 ChaCha20-Poly1305 还是纯 ChaCha20?

新数据一律用默认的 ChaCha20-Poly1305:有了 Poly1305 标签,只要改动了一个字符或密码错误,解密就会失败。纯 ChaCha20 只负责加密,密钥错误时得到的是无法阅读的字节而不是报错,所以只在需要兼容使用它的系统(如 openssl enc -chacha20)时才用。

OpenSSL 能解密吗?

纯 ChaCha20 可以:密码模式用 echo 'U2FsdGVkX1…' | openssl enc -d -chacha20 -pbkdf2 -iter 10000 -a -A,密钥和 IV 模式则用 -K <密钥 hex> -iv <IV hex> 代替 -pbkdf2 -iter。ChaCha20-Poly1305 不行:openssl enc 不支持 AEAD 密码。可以在本页读取,也可以用代码读取:在密钥和 IV 模式下,输出就是密文后接 16 字节标签,没有文件头。

重复使用 nonce 会怎样?

用同一密钥和 nonce 加密的两条消息会泄露两段文本的异或值,攻击者还能借此伪造 Poly1305 标签。密码模式下不会犯这个错误:每次加密都会选用新的随机盐,因此密钥、nonce 和输出每次都是新的。在密钥和 IV 模式下,请在每条消息之前点“生成”换一个新的 nonce。

ChaCha20 和 AES 一样安全吗?

是的。ChaCha20-Poly1305 和 AES-GCM 都是 TLS 1.3 的标准密码,都没有实际可行的攻击;在没有 AES 硬件加速的手机上,ChaCha20 往往更快。薄弱环节在于密码:请使用足够长的随机密码,在两端都由你掌控时选用 600,000 次迭代。

支持 XChaCha20-Poly1305 吗?

不支持。XChaCha20 是 libsodium 中使用 24 字节 nonce 的变体,构造方式不同,其密文无法在这里解密。本页接受 RFC 8439 的 12 字节 nonce 和 OpenSSL chacha20 的 16 字节 IV。如果要加密的是文件而不是文本,“文件加密”工具使用 age 格式的 ChaCha20-Poly1305。

相关工具