是否有可能从AES加密算法输出88byte
?如果是这样,那么(理论上)如何以及输入字节大小是什么?
答案 0 :(得分:2)
嗯,AES永远不会输出那么大的。但是,通常使用padding scheme修改密码以在其他功能上进行分层。有些方案可以生成与输入长度完全相同的输出。一个例子是CTR模式。它不包含在.NET中,但可以作为库使用。
.NET没有内置的单一操作模式,不会使输入大小膨胀。
答案 1 :(得分:1)
简短回答:在某种实践中很少使用的操作模式下,可能会发生这种情况。但通常人们不会遇到这种情况,密文是块大小的倍数(16字节= 128位)。
长答案:块密码本身将固定大小的明文块映射到相同大小的密文块。以这种方式使用分组密码存在各种问题,因此密码学家已经开发modes of operation以安全地使用分组密码。在实践中看到的最常见的模式是CBC模式,但在未来我们可能会更频繁地看到GCM模式。
在定义模式时,它们通常需要填充方案,在应用它们之前使输入成为块大小的倍数(AES为16个字节)。最常见的填充是PKCS#7(参见RFC2315)。第10.3节描述了这种填充是如何完成的。
2010年10月,NIST批准了一种阻止消息扩展的不同操作模式,从而允许输出不块大小的倍数。这种操作模式称为ciphertext stealing。
我是一名正在恢复的密码学家,现在是一名网络安全人员,从未见过这在实践中使用过。所以,如果你得到一个88字节的密文,那么也许你发现有人使用它,否则你可能没有得到完整的密文。我打赌后者。
最后,如果您使用密文窃取操作模式,则输入大小将精确为88个字节。请参阅链接标准。