2017-07-28 58 views
0

我想实现一个SOAP客户端应该接收消息(XML)与MTOM/XOP附件。邮件正文和附件使用单独的密钥进行加密。所使用的加密算法是AES128-CBC。正文是base64编码和解密很好,但附件是二进制的,并有奇数长度(530字节,527字节等)。AES128-CBC加密可以产生奇数长度的输出吗?

我的问题是,有没有可能是服务器搞乱了加密?或者有可能产生不是16的倍数的AES128输出?

回答

1

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

如果AES用于CTR (Counter) mode)它产生与输入长度相同的输出。

+1

谨慎解释downvote? –

+0

这就是我的想法。所以加密不是在CBC模式下,或者它们不包括加密消息的所有位。我不知道谁低估了你的答案,我给了你一个赞成票。 – andrei

0

AES是一种分组密码,可与一次16字节数据的16字节块一起使用。对于CBC模式,输入和输出必须是16字节的倍数。 CTR模式没有这个要求。

解决方法是在加密之前向输入添加填充字节,并在解密后将其删除。这可以通过指定填充类型自动完成,通常为PKCS#7 padding