假设 32 字节明文由 AES 128 CBC 加密 - 是否必须根据不同的填充方案添加 16 字节填充?
消息长度是块大小的倍数时的 AES CBC 填充
信息安全
加密
AES
2021-09-06 14:38:20
3个回答
这完全取决于您要加密的内容。如果您要加密长度始终为 32 字节(或块大小的倍数)的数据,则根本不必使用填充。
如果纯文本是任意长度的,那么您必须填充文本并使用一种机制,以便在解密时能够将数据与填充分开。
假设您正在使用填充方案,如果缺少一个字节,则使用 01 填充,如果缺少 2 个字节,则使用 02 02 等等。
您还必须为 16 字节文本添加填充,否则如果您解密像
01 02 03 05 06 01 02 03 05 06 06 01
您将无法知道这是否是 15 字节文本:
01 02 03 05 06 01 02 03 05 06 06 + 01
填充未填充的 16 字节文本:
01 02 03 05 06 01 02 03 05 06 06 01
.
通过知道您始终填充数据,无论长度如何,上述问题都得到了解决。
向块大小的倍数的消息添加填充不是“强制性的”,但大多数实现都会这样做。PKCS#5 填充规定添加一个字节块,全部设置为零,以告诉算法它实际上拥有所有已传输的块。当可以调用实现来加密任何长度的任何内容并通过“不可靠”的传输方法发送它时,这很有帮助。当使用具有自己的错误检查的通信层时,例如 TCP,并且当您知道未填充的消息始终是所用块大小的精确倍数时,它是多余的。