AES 加密

用 AES 加密或解密。单向摘要请用 哈希计算

这一页加密什么

AES 是分组密码。这一页在浏览器里用 ECB、CBC、CTR、OFB、CFB 或 GCM 运算,密钥是 16、24 或 32 字节。密码的单向指纹在 哈希计算。

怎么用

  1. 粘贴输入。加密模式一开始是 CBC。填充一开始是 pkcs7padding。字符集一开始是 UTF-8。
  2. 密钥格式和偏移量格式一开始是文本。输入格式一开始是文本。输出格式一开始是 hex。ECB 不显示偏移量。GCM 会显示 Tag 长度和 AAD,并把填充固定成 nopadding。
  3. 加密做加密。解密做解密。显示示例填入 hello、CBC、pkcs7padding、UTF-8、密钥 1234567890abcdef、偏移量 1234567890abcdef,hex 结果是 7e6347a62a0a976373e79b1bd586363d。
  4. 交换把结果放回输入框,并把输入格式改成刚才的输出格式。把输出格式改成文本,再点解密。同一把密钥和偏移量得到 hello。
  5. 全部清除会清空输入并恢复 CBC、pkcs7padding、UTF-8、文本格式和 hex 输出。复制结果复制输出。

密钥、偏移量、填充和 Tag

文本按字符集变成字节。hex 和 Base64 本身就是字节,不再套用字符集。密钥接着必须是 16、24 或 32 字节,也就是 AES-128、AES-192 或 AES-256。1234567890abcdef 这种 16 个 UTF-8 字符的密钥就是 16 字节。

CBC、CFB、OFB 和 CTR 的偏移量是 16 字节。ECB 不用偏移量。GCM 接受任意非空偏移量,常见长度是 12 字节。pkcs5padding 和 pkcs7padding 在这里一样,都补 1 到 16 个字节,使长度成为 16 的倍数。nopadding 不改字节,所以 ECB 和 CBC 这时要求长度已经是 16 的倍数。GCM 只能用 nopadding。

GCM 的 Tag 接在密文后面。Tag 长度默认 128 位。AAD 参与校验,本身不加密。解密不接受文本输入,加密不接受文本输出。密钥、偏移量、Tag 或填充不对都会失败。

用在哪里

  • 拿一段 CBC 密文和另一个 AES 工具对一下。
  • 读一段 Tag 接在 hex 末尾的 GCM 结果。
  • 在文本、hex 和 Base64 之间换密钥格式。

问题

为什么这里的 pkcs5 和 pkcs7 一样?

AES 的分组是 16 字节。两种填充都用同一个计数字节补满最后一组。

同一段文字每次 hex 都一样吗?

模式、填充、密钥和偏移量不变时一样。显示示例的结果是 7e6347a62a0a976373e79b1bd586363d。