本地文件加密与解密 打开工具

AES-256-GCM 与 PBKDF2 60 万次:参数是怎么定的

这套参数由三部分组成:AES-256-GCM 负责「加密且防篡改」,PBKDF2 负责「把人类密码变成密钥」,随机盐与 IV 负责「同样密码每次结果都不同」。三者缺一,安全性就掉一个量级。

为什么是 GCM 而不是 CBC

CBC 只加密不认证:攻击者可以在你不知情的情况下翻转密文里的比特,解出来的明文会被悄悄改掉。要防这个,得自己再加一层 HMAC,而且「先加密还是先 MAC」很容易写错。

GCM 是认证加密(AEAD),一次运算同时产出密文与 128 位认证标签。解密时标签校验不过就直接失败,不会返回一段「可能被改过」的明文。

这条性质直接决定了这个工具的行为:密码错误、文件损坏、被截断、被篡改,都会明确报错并中止,绝不产出一个看起来成功的错误文件。反过来,只要认证通过,就能确认内容与加密时逐字节一致。

PBKDF2 的 60 万次在挡什么

人的密码熵很低(「abc123456」在字典里)。PBKDF2 通过反复做 HMAC 把「猜一次密码」的成本抬高 60 万倍,让离线暴力破解变得不划算。

60 万次来自 OWASP 对 PBKDF2-HMAC-SHA256 的现行建议值。这个数字会随硬件进步上调——它是一个移动靶,不是一个永恒正确的常数。

迭代次数写在文件头里并参与认证,所以旧文件用旧次数、新文件用新次数,互不影响;也不会出现「升级参数后老文件解不开」。

盐与 IV:为什么同一密码结果不同

盐(16 字节随机):参与密钥派生,让同一个密码在不同文件上派生出不同密钥。没有盐,攻击者可以用一张彩虹表同时破解所有文件。

IV(12 字节随机):GCM 要求每次加密的 IV 唯一。IV 重复会导致密钥流重复,两条密文异或就能得到两条明文的异或——这是 GCM 最致命的误用。

两者都为每个文件独立随机生成,所以「同一密码加密两个相同文件,得到的密文完全不同」,攻击者也无法通过比对密文判断两个文件是否相同。

AAD 与截断攻击

附加认证数据(AAD)是「参与校验但不加密」的部分。这里把文件头(盐、迭代次数、分块大小)与最后一块标记都放进去。

最后一块标记很关键:它让「把文件尾部的密文切掉」这种截断攻击无法通过校验。没有这个标记,攻击者可以删掉最后几块,解密仍然「成功」,只是内容少了——而你无从察觉。

上面这些都不用装软件,也不用注册:打开页面就能用。

打开本地文件加密与解密 →

常见问题

能用别的工具解开吗?

理论上可以,只要按同样的容器格式(文件头布局、KDF 参数、AAD 范围)实现。但这是自定义容器,没有通用工具支持,实际只能在这个页面解。

为什么不用 Argon2?

Argon2 抗 GPU 破解更好,但浏览器 Web Crypto 没有原生支持,必须引入 wasm 实现,体积与兼容成本都高。PBKDF2 是 Web Crypto 原生能力,取舍是「零依赖 + 够用」。

迭代次数越高越安全吗?

是,但代价是每次解密都要等更久。60 万次在普通笔记本上约需 0.3–1 秒,再高会明显影响体验。安全性主要还取决于密码本身的强度。