我只是回答了这个问题:
Size of data after AES/CBC and AES/ECB encryption
由于AES在加密消息的末尾添加了填充,因此在给定输入长度的情况下,有一个简单的公式来确定预期的输出长度。但是,有没有办法确定DECRYPTED消息的预期大小是多少?如果没有,我应该将它与iv和加密消息一起发送吗?
答案 0 :(得分:2)
AES是一种分组密码。在AES的情况下,分组密码仅加密块,块为128位/ 16字节。要使用块密码来处理大量数据,您需要操作模式。有一些操作模式,例如AES-CBC和不安全的AES-ECB,它们需要填充,因为它们也会对每个块进行加密/解密。对于AES,您可以确定即使在解密之前填充量也是1到16个字节。
其他模式,如AES-CFB,AES-OFB,最重要的是AES-CTR不需要填充。这些模式只是创建一个与明文一样大的密文(尽管如果你无法计算它,你可能仍然需要静态的开销来发送IV向量)。 AES-GCM是一种在内部也使用CTR的模式,但它还添加了一个身份验证标记,以保护消息的完整性和真实性。
如果您想在解密之前知道大小,那么使用该消息发送明文的长度是绝对可以的。但是,如果要保护消息的完整性,则应将这些值包含在身份验证标记中。
如果您有选择,可以更轻松地进行CTR或GCM模式加密。
请注意,还有一种称为CBC的密文窃取方法。但是,CTS并不常用。它可以删除较大密文的填充,但是你仍然可以将IV作为开销。