不对 AES 使用填充有什么影响?

What are the implications of not using padding with AES?

我在使用 AES 算法时遇到填充问题,如果我在加密和解密数据时禁用填充检查会怎样?

AES 是一种块密码,只能在单个块上运行。它需要一种操作模式来加密多个块。如果操作模式也只适用于块(如 CBC、ECB),那么你不能加密任意明文。如果禁用这些模式的填充,则需要提供正好是块大小(AES 为 128 位)倍数的明文。

对于像 CTR 或 GCM 这样的流媒体模式,这不是必需的。他们没有 require/support 填充。

如果由于某种原因,您无法使默认的 PKCS#5/PKCS#7 填充工作,您可以选择 ZeroPadding,它仅将 0x00 字节附加到明文,直到块的倍数尺寸达到。这意味着原始明文不能以 0x00 字节结尾,因为它们会在解密过程中被删除。你当然可以使用任何类型的填充字节,只要它不可能出现在最后的明文中。