AEAD 文件加密/解密
用密码通过 AES-256-GCM 或 (X)ChaCha20-Poly1305 与 Argon2id 加密文件,并可再解密。文件不会离开浏览器。
输入内容和文件始终留在浏览器中
加密
大文件在浏览器中分块处理。
内存和迭代次数越多,猜测密码越慢,但加密和解密也更耗时,并需要同样多的内存。参数保存在文件中,解密时会自动读取。
低于 OWASP 对 Argon2id 的最低要求(19 MiB × 2 次迭代):弱密码可能很快被猜出。
密码以空格开头或结尾。密码将按输入原样使用,空格也包括在内。
解密
选择文件并输入密码,然后加密或解密——结果文件及其头部将显示在这里。
- 结果
- 密钥派生
- 头部
本页内容
AEAD 文件加密/解密使用认证加密(AES-256-GCM、ChaCha20-Poly1305 或 XChaCha20-Poly1305)以密码保护文件,并能还原为原文件。一切都在浏览器中完成:文件和密码都不会上传。
详细功能
密码通过 Argon2id(64 MiB 内存、3 轮)加上随机 16 字节盐派生为 256 位密钥,即使在高性能硬件上猜测密码也很慢。随后 Rust/WebAssembly 模块以 1 MiB 分块加密文件;每块都有自己的 nonce(随机前缀加分块计数器)和 16 字节认证标签。进度条显示速度和剩余时间,取消 会在分块之间停止任务。
密钥派生(Argon2id) 用于设置成本:轻量、标准(默认)、加强、最高(1 GiB,适合电脑),或自行设置内存、迭代次数和通道数。成本越高,猜测密码以及每次加密和解密都会按同样比例变慢。非默认参数写入经过认证的文件头(多 9 字节),因此解密仍然只需要密码;低于 OWASP 最低要求的设置会显示警告。
结果是 MDT3 格式的 .aead 容器:35 字节的头部(XChaCha20 为 47 字节),包含算法、盐和 nonce 前缀,后面是各个分块。头部和"最后一块"标志随每个分块一起认证,因此密码错误、任意字节被改、分块顺序被打乱、文件被截断(即使恰好在分块边界)或末尾被追加数据,都会被拒绝,而不会输出损坏的结果。算法从头部读取,解密时只需要密码。
本工具旧版本生成的容器(MDT2)仍可解密;这种旧格式无法发现恰好在 1 MiB 边界处的截断,解密后工具会给出提示。密码按输入原样使用;对旧文件还会尝试去掉首尾空格的密码,因为旧版本会去掉它们。加密或解密后的文件在下载前于内存中组装,因此实际大小上限取决于设备内存。
实用示例
上传云盘前加密:report.pdf(2.5 MiB)用 AES-256-GCM 加密后变为 report.pdf.aead,大小为 2.5 MiB 加 35 字节头部再加 3 × 16 字节标签。头部 字段以 4d445433 开头,即 ASCII 字节 MDT3。
在另一台电脑上解密:打开工具,在解密面板选择 report.pdf.aead,输入相同密码并下载 report.pdf。没有 .aead 扩展名的文件会在名称后追加 .dec 保存。
传输中断:如果 report.pdf.aead 只收到前 2 MiB,解密会报错"解密失败:密码错误,或文件已损坏或被修改。",而不是返回一个变短的 PDF。
空文件:0 字节的文件也会生成 51 字节的容器(头部加一个经过认证的空分块),因此即使容器被清空也能发现。
如何使用此工具
选择要加密的文件
在 加密 面板中,点击 文件 下的 选择文件。
选择算法并设置密码
选择 算法(默认 AES-256-GCM)并输入 密码。如果密码以空格开头或结尾会出现提示,因为空格也算在内。
加密并下载
点击 加密文件,等待进度条完成后点击 下载 保存
<文件名>.aead。之后解密
在 解密 面板选择
.aead文件,在上方字段输入相同密码,点击 解密文件,再点击 下载。
提示和最佳实践
- 没有密码找回:密码丢失后,任何人(包括本工具)都无法解密该文件。
- 长的密码短语胜过短而"复杂"的密码;Argon2id 能拖慢猜测,但救不了
123456。 - XChaCha20-Poly1305 使用 128 位随机 nonce 前缀;如果用同一密码加密非常多的文件,请选择它。
- "密码错误"和"文件被修改"刻意给出相同的错误:标签校验无法区分二者。
- 将旧的 MDT2 文件重新加密,即可升级为 MDT3 并获得截断检测。
- 首次访问后,页面在没有网络时也能使用。