AES 加密 / 解密

加密 / 解密 明文 → 密文
一键生成对应长度随机密钥
密钥、向量与明文只在浏览器本地参与运算,不会发送到服务器。 密钥长度决定轮数:16 字节 → AES-128,24 字节 → AES-192,32 字节 → AES-256; 模式与填充必须与解密端完全一致,否则无法还原。
结果
填好密钥与向量后点「加密」,结果会显示在这里
在线 AES 加解密工具,支持 AES-128/192/256 与 CBC、ECB、CFB、OFB、CTR 多种模式,可配置密钥与向量,支持 PKCS#7 等填充,全部在浏览器本地完成。

工具简介

AES(Advanced Encryption Standard,高级加密标准)是目前使用最广泛的对称分组密码,由 NIST 在 2001 年发布,用来替代已经不够安全的 DES。本站工具基于浏览器里的 crypto-js 实现,密钥、向量、明文、密文全部只在你的浏览器中参与运算,不会发送到任何服务器。

使用步骤

  1. 在「密钥」框填写密钥:16 字节 → AES-128,24 字节 → AES-192,32 字节 → AES-256。密钥既可以按文本*输入(按 UTF-8 计算字节数),也可以切成 *Hex 直接粘贴十六进制。
  2. 选择加密模式与填充方式。除 ECB 之外的所有模式都需要填写与分组等长的向量(IV),长度为 16 字节。
  3. 在左侧输入明文后点「加密」;把左侧切到「解密」,粘贴密文再点「解密」即可还原。
  4. 密文可以按 Hex* 或 *Base64 输出与输入,解密时选择的编码必须与加密时一致。

参数说明

参数可选值说明
密钥长度16 / 24 / 32 字节对应 AES-128 / 192 / 256,轮数分别为 10 / 12 / 14
分组长度16 字节(固定)所有模式的输入分组都是 128 位
模式ECB / CBC / CFB / OFB / CTRCBC 兼容性最好;ECB 最不安全;CFB / OFB / CTR 属于流式模式
填充PKCS#7 / ZeroPadding / ANSI X9.23 / NoPadding流式模式不使用填充
向量 IV16 字节ECB 不使用,其余模式必填

关于填充

  • PKCS#7:最常用。缺失 n 字节就补 n 个值为 n 的字节,即使已经对齐也会补满一整块。
  • ZeroPadding:只在未对齐时补 0x00。若原文本身以 0x00 结尾,解密后无法区分是原文还是填充。
  • ANSI X9.23:前面补 0x00,最后一个字节写填充长度,即使已经对齐也会补一整块。
  • NoPadding:不做任何填充,因此明文长度必须是 16 字节的整数倍,否则本工具会直接报错而不是给出错误结果。

关于模式

  • ECB:每个分组独立加密,相同的明文块会得到相同的密文块,会泄漏数据的结构特征,只适合做演示。
  • CBC:当前明文先与前一块密文异或再加密,需要一个随机且不可预测的 IV,是最常见的默认选择。
  • CFB / OFB / CTR:把分组密码当密钥流使用,密文长度与明文完全相同,不需要填充;其中 CTR 可并行计算,CFB 解密可并行而加密不可并行。

安全提示

  • 本工具在浏览器本地运行,适合临时加解密、排查接口报文、验证服务端实现是否一致。
  • 生产环境请使用服务端密码库(PHP 的 openssl_encrypt、Java 的 JCE、Go 的 crypto/aes 等),并优先选择 AES-256-GCM 这类带认证的加密模式,它能同时保证机密性与完整性。
  • 不要把密钥写进前端代码或 URL;密钥应当通过安全的密钥管理服务分发。
  • 加解密双方必须完全一致地约定:算法、密钥、模式、填充、IV 传递方式、密文编码,缺一不可。

常见问题 FAQ

这个工具能替代服务端加密吗?

不能。它适合临时验证、接口调试和教学演示。真正的业务数据请使用服务端密码库,并优先采用 AES-GCM 等带认证的模式,同时配合完善的密钥管理。

密文用 Hex 还是 Base64?

两者只是同一段字节的不同表示。Hex 可读性好、便于逐字节比对;Base64 更短,适合放进 JSON、URL 或数据库字段。解密时必须选择与加密时相同的编码。

密钥按「文本」输入时长度不好凑怎么办?

文本模式按 UTF-8 字节数计算,一个汉字占 3 字节。最省事的做法是点「随机」按钮生成符合长度的密钥,或把密钥切成 Hex 直接粘贴十六进制。

支持中文和 emoji 吗?

支持。明文会先按 UTF-8 编码再加密,中文、emoji、换行都能正常往返。

向量 IV 可以重复使用吗?

不可以。同一个密钥下 IV 重复会泄漏明文关系:CBC 会暴露相同的前缀,CTR / OFB 更严重——密钥流重复,两段密文异或就能得到两段明文的异或。IV 应当随机生成且每次加密都不同。

为什么每次加密同样的明文,结果都不一样?

如果向量是随机生成的,CBC / CFB / OFB / CTR 每次的密文都会不同,这是正常且更安全的表现。想得到可复现的结果,请固定 IV,或改用 ECB。

ZeroPadding 和 PKCS#7 有什么区别?

PKCS#7 总是填充,且填充内容可自校验,解密端能准确去掉;ZeroPadding 只在未对齐时补 0x00,若原文本身以 0x00 结尾就无法区分,容易出现「解密后多出 NUL 字节」的情况。

明文长度必须是 16 字节的整数倍吗?

只有选择 NoPadding 时才必须对齐,否则本工具会直接提示错误。使用 PKCS#7、ZeroPadding、ANSI X9.23 时明文可以是任意长度。

为什么 ECB 模式不安全?

ECB 对每个 16 字节分组独立加密,相同的明文块必然产生相同的密文块,会泄漏数据的重复结构(著名的「ECB 企鹅图」就是这样还原出轮廓的)。除演示外请不要使用 ECB。

AES-128、AES-192、AES-256 应该选哪个?

三者算法结构相同,只是密钥长度与轮数不同(10 / 12 / 14 轮)。新项目建议直接用 AES-256;如果需要与已有系统互通,则必须与对端保持一致。

密钥和明文会被上传到服务器吗?

不会。所有运算都由页面里的 JavaScript 在浏览器本地完成,密钥、向量、明文、密文都不会离开你的设备。

AES 加解密支持哪些模式与填充?

模式支持 CBC、ECB、CFB、OFB、CTR 五种;填充支持 PKCS#7、ZeroPadding、ANSI X9.23、NoPadding 四种。其中 CFB、OFB、CTR 是流式模式,不使用填充,密文长度与明文完全相同。