ZestCalc
Appearance
Language

文本加密 / 解密

使用 AES-256-GCM 直接在浏览器中加密或解密文本。数据不会离开您的设备。

文本加密 / 解密

输入文本和密码后,点击“加密”或“解密”。

OpenSSL 命令参考(AES-256-CBC)

您也可以使用 OpenSSL 在命令行中加密和解密文本。以下命令使用 AES-256-CBC,并通过 PBKDF2 派生密钥(100,000 次迭代,SHA-256)。

请将 待加密文本 替换为要加密的文本,将 你的密码 替换为您设置的密码。解密时,请将 密文Base64 替换为加密命令输出的 Base64 字符串。

加密

printf '%s' '待加密文本' | openssl enc -aes-256-cbc -pbkdf2 -iter 100000 -pass pass:'你的密码' -a

解密

echo '密文Base64' | openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -pass pass:'你的密码' -a

为什么结果不同?

上方网页工具使用 AES-256-GCM(认证加密),而 OpenSSL 命令使用 AES-256-CBC,因为 openssl enc 不支持 GCM 模式。这两种算法生成的输出格式完全不同,因此无法用本网页工具解密 OpenSSL 输出的结果,反之亦然。不过,两种方式都使用相同参数的 PBKDF2 来派生加密密钥(SHA-256、100,000 次迭代)。

如何使用此工具

在“明文”字段中输入或粘贴要保护的文本,选择一个强密码,然后点击“加密”。工具会返回一个 Base64 编码字符串,其中将解密所需的全部内容打包在一起,包括盐值、IV、认证标签和密文。

如需还原内容,请切换到“解密”模式,粘贴 Base64 字符串,输入同一密码,然后点击“解密”。如果密码正确且数据未被篡改,原始明文会立即显示。

AES-256-GCM 有多强?

只要密码没有丢失,几乎不可能在不知道密码的情况下恢复明文,即使使用非常强大的计算机也是如此。AES-256 的密钥空间为 22562^{256},这意味着暴力穷举远远超出当前和可预见技术的能力范围。再加上 PBKDF2 密钥拉伸(100 000 次迭代),随意猜密码同样并不现实。

但需要注意的是,弱密码或重复使用的密码会大大削弱这种优势。请始终使用强且唯一的密码短语。

什么是对称加密?

对称加密在加密和解密时使用同一把密钥(由您的密码派生而来)。与需要公钥/私钥对的非对称加密不同,对称方案简单且高效,因此非常适合在双方共享秘密时保护静态数据或传输中的数据。

为什么使用 AES-256-GCM?

  • 认证加密:GCM(Galois/Counter Mode,伽罗瓦/计数器模式)在一次操作中同时提供机密性和完整性。哪怕密文只改动 1 个比特,解密也会因为认证失败而直接报错,而不会输出乱码。
  • 广泛可信:AES-256 是政府、金融机构和全球安全关键软件广泛采用的加密标准。
  • 行业标准:它是 TLS 1.3 的默认密码套件之一,受到 NIST 推荐,并通过 Web Crypto API 得到各大平台的原生支持。

因为这个工具只使用一种固定算法,所以您无需担心加密端和解密端的算法不匹配。

加密 / 解密过程如何工作

  1. 密钥派生(PBKDF2) — 您的密码不会直接作为加密密钥使用。系统会把它与一个随机生成的 16 字节盐值一起输入 PBKDF2,并执行 100 000 次 SHA-256 迭代。输出结果是一个 256 位密钥,仅凭密码本身几乎无法逆向推导。
  1. 加密 — 系统会生成一个随机的 12 字节 IV(初始化向量)。随后,AES-256-GCM 使用派生出的密钥和 IV 对明文进行加密,生成密文以及一个会在解密时校验的 16 字节认证标签
  1. 打包 — 盐值、IV、认证标签和密文会按顺序拼接,再编码为一个 Base64 字符串。这意味着接收方只需要密码,其他内容都已经嵌入到输出结果中。
  1. 解密 — Base64 字符串会先被解码,再拆分回盐值、IV、认证标签和密文。PBKDF2 会根据密码和盐值重新派生出同一把密钥,然后由 AES-256-GCM 解密数据。如果标签校验失败,操作会立即终止,这可以同时防止密码错误和密文被篡改的情况。

隐私说明

所有处理都完全在您的浏览器中进行。明文、密码和密文都不会发送到任何服务器。您可以打开浏览器的网络面板自行验证,在加密或解密过程中不会产生任何外发请求。

作为参考,结果区域还提供了使用相同密码和迭代次数执行 AES-256-CBC 加密的 OpenSSL 命令。这些命令是为了方便您体验本地命令行加密,但其输出不能被本工具解密,反过来也一样。两者不兼容,主要有以下两个原因:

  1. 密码模式不同 — 本工具使用 AES-256-GCM(认证加密)。openssl enc 工具不支持 GCM 模式,因此这些命令退回到 AES-256-CBC,而后者不带内置的认证标签。
  1. 二进制格式不同 — 本工具会将输出打包为 salt(16 字节)+ IV(12 字节)+ auth tag(16 字节)+ ciphertext,然后再进行 Base64 编码。OpenSSL 则使用自己的 Salted__ 头格式,盐值只有 8 字节,也没有认证标签。

正因为这些差异,这里生成的任何密文都只能在这里解密,而这些 OpenSSL 命令生成的任何密文也只能通过对应的 openssl enc -d 命令解密。