AES128-CBC 加密可以产生奇数长度的输出吗?



我正在尝试实现一个应该接收带有MTOM/XOP附件的消息(XML(的SOAP客户端。邮件正文和附件使用单独的密钥进行加密。使用的加密算法是AES128-CBC。正文采用 base64 编码,解密正常,但附件是二进制的,长度为奇数(530 字节、527 字节等(。

我的问题是,服务器是否有可能在加密中搞砸某些东西?或者是否有可能产生不是 16 倍的 AES128 输出?

CBC模式下的AES将始终产生 16 字节的倍数输出。

如果在CTR(计数器(模式下使用AES,则会产生与输入长度相同的输出。

AES 是一种分组密码,适用于 16 字节块,一次包含16 字节的数据。对于 CBC 模式,输入和输出必须是 16 字节的倍数。点击率模式没有此要求。

解决此问题的方法是在加密之前向输入添加填充字节,并在解密后删除它们。这可以通过指定填充类型(通常是 PKCS#7 填充(自动完成。

最新更新